威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法

admin 2024年5月6日17:38:49评论7 views字数 4488阅读14分57秒阅读模式

执行摘要

深度本能威胁实验室发现疑似针对乌克兰的针对性行动 该操作使用CVE-2017-8570作为初始向量 该行动无法归因于任何已知的威胁行为者 该行动使用了针对Cobalt Strike Beacon的定制加载器。

活动概览

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法

图 1:活动概览

深度本能威胁实验观察到 2023 年底从乌克兰上传到 VirusTotal 的恶意 PPSX 文件:

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法

图2:VT上传信息 文件名表明它是通过Signal应用共享的;然而,这并不一定意味着该文件最初是通过该应用程序发送给受害者的。PPSX(PowerPoint 幻灯片)文件似乎是美国陆军坦克扫雷刀片 (MCB) 的旧说明书。

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法

图3:PPSX内容 PPSX 文件包含与外部 OLE 对象的远程关系:

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法

图4:远程关系 在 https URL 之前使用“script:”前缀表示使用了 CVE-2017-8570,这是对更为人所知的 CVE-2017-0199 的绕过。

该远程脚本名为“widget_iframe.617766616773726468746672726a6834.html”,托管在受 CloudFlare 保护的域“weavesilk[.]space”。但是,在我们的分析过程中,我们成功识别了该域背后的真实托管。这是一家俄罗斯 VPS 提供商:

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法

图5:实域IP

scriptlet 的内容高度混淆:

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法

图 6:混淆的 scriptlet 内容 

去混淆后:

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 7:Scriplet 反混淆处理 

第二阶段 dropper 是一个包含 JavaScript 代码的 HTML 文件,该代码将通过 Windows cscript.exe 执行 它负责持久性、解码并将嵌入的有效负载保存到磁盘。

关键点

将伪装成思科AnyConnect VPN文件的有效载荷放置在路径下:

  • C:Users<Username>AppDataRoamingCiscoAnyConnectvpn.sessings 通过修改这些注册表项来获得持久性:
  • HKCUSoftwareMicrosoftCommand ProcessorAutoRun: start regsvr32 /s C:<path>vpn.sessings - 每次执行 cmd.exe 时都会执行恶意软件。
  • HKCUSoftwareMicrosoftWindowsCurrentVirsionRun: cmd /Q /C whoami - 这是实际的持久性。它通过执行 whoami 来实现这一点,每次系统启动时都会触发加载程序。

这种持久性技术是不寻常的,可能会导致有效载荷被不必要地多次执行,尽管它看起来是良性的,但这种持久性更难以被事件响应发现,如果具有高权限的用户或进程执行了cmd.exe,还可能导致权限提升。

DLL负载分析

该示例包含一个名为 vpn.sessings 的加载器/加壳器动态链接库 (DLL),它将 Cobalt Strike Beacon 加载到内存中并等待来自 C&C 服务器的指令

Cobalt Strike 已经被分析了很多次,所以我们不会详细介绍,但加载程序包含一些有趣的行为。

Loader Analysis

该示例是一个使用 Regsvr32 执行的 DLL。大多数重要逻辑都在 DllRegisterServer 内部。奇怪的是,导出的方法具有未记录的低级 WinAPI 调用的名称(Nt、Zw、Rt),但大多数都是空的且未使用。

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图8:Loader导出表 

加载器尝试终止父进程(反调试),迭代正在运行的进程并寻找自身。然后,它尝试终止其父进程:

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 9:终止父进程 

当它从“命令处理器”注册表键执行时,它会在“Non-Existent Process”下运行,这意味着没有它可以终止的父进程。然而,在调试时,它会与调试器一起终止,这会减慢分析速度——并让研究人员感到烦恼!威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法

停止执行(可能是沙盒规避)

加载程序动态加载低级 NtDelayExecution WinAPI 调用,并在没有任何明确的功能原因的情况下停滞 20 秒。

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图10:延迟执行 

可能的解释是,它可能是为了减缓调试或逃避沙箱。它可能利用了预防性沙箱仿真需要处理大量恶意软件并且只能持续很短的时间(2-5分钟)这一事实。大多数解决方案跳过了长时间的休眠/延迟,但在这里执行了20次,每次一秒,可能是试图绕过自动跳过同时也稍微延迟了执行。一秒钟的延迟看起来是一个短暂的时间量,但由于这些调用通常被钩住以进行监控,每个调用都需要更长的时间,并可能将重要的指标排除在仿真窗口之外。

检查CPUID(反VM)

加载程序使用内联 ASM 指令执行 CPUID,以确定恶意软件是否正在虚拟机中执行。如果在 VM 中执行,CPUID x86 指令将返回负值(2^31 位设置为 1;超过 0x80000000 的有符号值为负)。我们可以在下面的指令中看到,如果CPUID返回正数,它将返回true:

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 11:检查恶意软件是否在虚拟机内执行 

如果这个条件为假,它就会退出,但有趣的是它在其他地方执行此检查。这包括对 DllEntryPoint 的检查(在 DllRegisterServer 之前执行),该检查分配一个全局变量,该变量稍后可以更改某些行为。

解除 NTDLL(反 AM)

动态链接库ntdll.dll是用户态和内核态之间最底层的Windows API调用接口。因此,反恶意软件供应商通常会在各种调用中放置挂钩来监视恶意行为。如果恶意软件想要避免检测,它需要找到一种方法来规避这些保护。这个想法很简单:内存中预加载的 ntdll.dll 在各种 API 调用中包含内联钩子,恶意软件需要绕过或覆盖这些钩子以避免检测。在下面的屏幕截图中,我们可以看到 ntdll.dll 从磁盘的内存映射,以及从正在运行的进程的内存中获取 ntdll.dll 加载的模块:威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 12:加载两个 ntdll

他们叫: 

  • MemNTDLL :用于从内存加载的模块

  • DiskNTDLL :用于从磁盘复制 ntdll.dll

这看起来像是明显的脱钩,但其余的代码非常复杂,并且由于某种原因,它在我们的测试中没有脱钩。这花了一些时间,在深入挖掘之后,我们发现了恶意软件作者为减缓分析速度而采取的一些额外技巧。我把这些延迟技巧分为几点:

1.过于复杂的臃肿代码

很难理解其确切目的,但我们怀疑这是故意这样做的,目的是浪费威胁分析师的时间,正如我们在下面的示例代码中看到的那样:威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 13:无意义代码 

这段代码是从负责unhook ntdll.dll的函数中调用的,变量lp_text_base_DiskNTDLL/MemNTDLL是这两个DLL在内存中的LONG_PTR地址。

由于 MemNTDLL 始终希望由操作系统在最高用户空间模块地址(上面的 0x77000000(32 位))加载,并且由于 ASLR 而存在一些变化,因此条件 lp_text_base_DiskNTDLL > lp_text_base_MemNTDLL 永远不会成立。至少从这个背景来看。该函数也会从其他充满膨胀代码的位置调用,与取消挂钩无关。

2.隐藏的额外VM检查(如上所述)

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 14:DllEntryPoint 检查虚拟机 

如果检查为假,它不会取消钩子,而是将执行流转移到......你能猜到吗?

更多膨胀代码:

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 15:取消挂钩和膨胀代码 

众所周知,恶意软件开发人员会创建虚拟行为来减慢分析速度。这是一个有效的技巧,并且知道这一点,最好继续前进,不要陷入没有明确目的的过于复杂的代码,特别是如果它在正常情况下没有执行的话。

3. 具有手动偏移的结构

作者在手动加载各种PE结构时还使用了任意偏移,使重建变得更加困难:

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 16:任意偏移 

重建后,更容易看到它会查找.text节(包含所有函数实现),将权限更改为PAGE_EXECUTE_READWRITE,然后将其发送到用原始的ntdll.dll:IOCs覆盖:威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 17:重建后

解密负载(Cobalt Strike)网络

使用标准解密例程

  • 哈希base_data/key_seed
  • 从哈希派生密钥
  • 解密:

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 18:解密有效负载(Beacon)

Self-DLL 注入 Cobalt Strike

这是为了隐藏有效负载,避免将文件存储在磁盘上(无文件),绕过远程注入启发式方法,并且一如既往地使分析复杂化。程序如下:

  • 打开进程
  • 在其中分配内存
  • 使用有效载荷写入进程内存
  • 在其内部创建远程线程
  • 等待单一对象直到该线程完成

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图 19:自我DLL 注入

提取Cobalt Strike配置:

Cobalt Strike 配置包含用于非对称密钥交换的公钥,用于与 C&C 进行加密通信。licence_id : 0 表示这是 Cobalt Strike 的破解版。

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法

image.png

图 20:提取的配置 Cobalt Beacon

有一个详细的配置,其中包含 C&C 地址/域名、URI、公钥,甚至它要注入的进程 (dllhost.exe)。

它等待来自 C&C 服务器的指令,该服务器位于 petapixel[.]fun(伪装成流行的摄影网站),也隐藏在 Cloudflare 后面,并在具有 GDPR 屏蔽的欧盟国家注册,这使得调查变得更加困难。

它确实提到它是在波兰华沙注册的。

威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法图21:注册地点

结论

深度本能威胁实验室无法将这些攻击归因于任何已知的威胁参与者,也无法排除这是红队演习的一部分的可能性。证据显示,该样本是从乌克兰上传的,第二阶段(weavesilk[.]space)由俄罗斯 VPS 提供商托管和注册,Cobalt 信标 C&C(petapixel[.]fun)在波兰华沙注册。该二进制文件 (vpn.sessings) 包含用于 Cobalt Strike Beacon 的自定义加载程序/打包程序,其中包含各种技术来减慢分析速度并绕过网络安全解决方案。大多数技术并不新鲜,但可能足够独特,可以用作指纹。Cobalt Strike Beacon本身是红队为评估计算机安全性而设计的专业渗透测试工具,但这是泄露的破解版本,因此我们无法追踪到任何合法用户。

Cobalt 是一种高级工具,具有多种功能,例如窃取敏感数据、提升权限、传播到网络中的其他计算机、下载工具等。如果没有额外的线索,很难理解攻击的确切目的。

诱饵包含了与军事相关的内容,表明它针对的是军事人员。但域名weavesilk[.]space和petapixel[.]fun被伪装成一个鲜为人知的生成艺术网站(http://weavesilk.com) 和一个受欢迎的摄影网站(https://petapixel.com) 。这些是无关的网站,有点令人困惑为什么攻击者会特别使用它们来欺骗军事人员。

IOC

weavesilk[.]space 

109.107.178[.]241 

petapixel[.]fun b0b762106c22e44f7acaa3177baabd64ea28990d16672e1f902b53f49b2027c4 0bc0e9410f4a9703ff0b5af7ec9383a1cc929572ade09fbd2c69ed2ae1486939 976f57442452cd54cada011c565ada0c01f5b1460e31ee6cea330d210d3e8f50

原文始发于微信公众号(独眼情报):威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月6日17:38:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   威胁狩猎:2017年零日漏洞 + Cobalt Strike加载器的新利用手法http://cn-sec.com/archives/2712154.html

发表评论

匿名网友 填写信息