W在我的帖子历史记录中,我花大量时间与渗透测试人员和红队成员交谈也就不足为奇了。它们是有关威胁行为者正在使用的 TTP 的重要信息来源。它们也是“安全”的真实恶意软件的重要来源。
今天这里的样本是由我的一位朋友和同事分享的,他们允许我在以下情况下对这个样本进行撰写:
-
他们想保持匿名。
-
恶意软件样本不会上传到任何沙盒,无论是公共的还是其他的。
-
我不会透露文件哈希值。
不过,我可以谈谈它的活动和工件。到目前为止,这是一种未知类型的恶意软件,在红队参与期间仍在积极使用,因此我非常感谢我被允许写博客来介绍它的分析。
谢谢****!
坦白说,我仍在学习 x64 汇编语言和逆向工程恶意软件。这是一个缓慢的过程,因为它是致密的材料。但是,与我之前的恶意软件分析文章相比,这篇文章不那么“让我们一起学习”。我只是展示我的发现。
最后,如果您阅读本文并觉得我遗漏或误解了某些内容,请随时提供建议或更正。
背景
这更像是一个灰盒分析。在开始分析此恶意软件之前,我基本上对它了解一些信息:
-
它基于我朋友从 Maldev Academy 学到的东西。
-
它有一个在运行时执行的调试器。(我忽略了)
-
它旨在绕过防病毒软件。
要查看恶意软件的运行情况,我解压缩并执行示例,并启用并运行整个 Windows 安全套件:
工具
与往常一样,我将从两个 VM 开始工作:
-
FLARE-VM — 我将在这里执行大部分静态和动态主机分析。
-
REMnux — 我的 DNS 服务器的位置,以及我将执行大部分动态网络分析的位置。
我将使用以下工具:
-
INetSim — DNS 服务器
-
切割机 — 拆解器
-
IDA — 反汇编器
-
x64dbg — 调试器
-
ProcMon — 动态分析
-
RegShot — Windows 注册表分析
-
System Informer — 动态分析
静态分析
这是适用于 Windows 的 64 位可移植可执行文件:
在 Cutter 中,我可以看到这是用 C 语言编写的:
在静态字符串中,有一个明确的指示符表明这是 offset 处的 shellcode 加载器:0051797C
此外,静态字符串中还有相当多的 UUID:
上述 shellcode 在 UUID 中编码。以下字符串进一步支持了这一点:
UuidFromStringA
通常用于解码 UUID 编码的数据并将其写入内存。
这可以在 main 函数中的 Cutter 等 dissambler 中进一步观察到:
main 函数中还可以找到:
为了了解其功能,在静态字符串中发现了多个 Windows API 函数调用。这些函数调用也可以在 IDA 的 Imports 选项卡中看到:
一些最著名的电话是:
-
IsDebuggerPresent — 这通常是一个反调试调用,但在本例中,我实际上认为此调用是针对前面提到的在运行时打开的调试器。
-
GetSystemTimeAsFileTime — 这将获取当前系统日期和时间。它可用于枚举或反调试。
-
GetProcAddress — 用于获取 DLL 中函数的内存地址。它用于规避,因为它避免了必须直接调用函数。
-
HeapAlloc — 用于从堆分配内存块。这用于工艺注入。
我想重申,该恶意软件旨在绕过 AV,而不是绕过 EDR。正如我的朋友向我解释的那样,这是因为恶意软件进行的上述几个 Windows API 函数调用通常被 EDR 工具检测到:
-
VirtualAlloc — 分配将用于存储进程注入有效负载的内存。
-
VirtualProtect — 将已分配内存的内存保护更改为可执行。
-
CreateThread — 为 shellcode 执行创建新线程。
调试
At 有一条指令,该指令在内存地址处读取 中的值所指向的 64 位值。然后它将该值复制到 register:00007FF79D861153
mov
rsi
rcx
这通常用于准备函数调用,在本例中为 .UuidFromStringA
当我浏览这些说明时,我意识到这是一个不断迭代 UUID 值的循环,并且可能是之前找到的各种 UUID 字符串解码的指令集:
该指令跳回到该指令,表明这是一个循环。当我逐步执行说明时,这得到了支持,将我返回到:jb
mov rcx,qword ptr ds:[rsi]
00007FF79D861153
由于实际上有数万行 UUID 需要解码,因此我继续。
动态分析
从网络的角度来看,没有太多有趣的内容,因此我将重点介绍主机构件。
在 ProcMon 中,有证据表明引爆后存在注入过程:WerFault.exe
查看对 Windows 注册表的引爆后更改的更改,添加了多个有趣的键和键值。
钥匙:
值:
由于添加与 WER 相关的注册表项是为了临时存储数据以避免被 AV 检测到,这可能是解码的 UUID 编码的 shellcode 的结果。
另外值得注意的是已删除的注册表项:
删除这些密钥对于表明恶意软件旨在禁用或破坏组策略非常重要。
结论
根据恶意软件的行为和来源,我将为您命名为 BestieLoader。(是的,我知道我在标题中剧透了它……
我必须说,这个恶意软件真的没有带来很多唾手可得的成果。我必须努力寻找任何有意义的东西。
我的朋友并不是唯一一个向我提供样本的受过 Maldev Academy 培训的恶意软件开发人员,一个普遍的主题是这些样本非常难以分析,至少在我目前的水平上是这样。在我可以完全对它们进行逆向工程之前,我不会觉得我从他们身上得到了多少,这只需要时间和耐心。
x86–64 程序集资源
http://6.s081.scripts.mit.edu/sp18/x86-64-architecture-guide.html?
https://gist.github.com/justinian/385c70347db8aca7ba93e87db90fc9a6
https://cs.brown.edu/courses/cs033/docs/guides/x64_cheatsheet.pdf
其它相关课程
QT开发底层原理与安全逆向视频教程
linux文件系统存储与文件过滤安全开发视频教程(2024最新)
linux高级usb安全开发与源码分析视频教程
linux程序设计与安全开发
-
-
windows恶意软件开发与对抗视频教程
-
-
-
-
windows网络安全防火墙与虚拟网卡(更新完成)
-
windows文件过滤(更新完成)
-
USB过滤(更新完成)
-
游戏安全(更新中)
-
ios逆向
-
windbg
-
还有很多免费教程(限学员)
-
-
更多详细内容添加作者微信
-
原文始发于微信公众号(安全狗的自我修养):BestieLoader 恶意软件分析