用 ShimCache 检测横向移动

约 2 分钟阅读

TL;DR. 横向移动工具(PsExec、wmic、at / schtasks、远程 PowerShell)会在目标主机(被投放的服务二进制)上留下 ShimCache 条目,源主机上往往也会。对多主机之间的 AppCompatCache 做差异比对,可以浮现出攻击者走过的路径。

ShimCache 通常被定位为单主机工件。它在事件响应里的真正威力是跨主机的。同样的工具在它接触的每台机器上都被进行兼容性检查,留下可关联的痕迹。下面是我实际用来重建横向移动的方法。

横向移动在缓存中的样子

远程执行技术会在目标上投放或调用一个可执行文件。每一种都留下一个有特征的路径。

技术目标 ShimCache 的迹象
PsExec / 通过 SMB 的服务执行C:\Windows\PSEXESVC.exe 或 C:\Windows\ 中一个 8 字符随机名服务二进制
sc \\host create攻击者命名的服务二进制,通常在 C:\Windows\ 或 \PerfLogs\
WMI (wmic process call create)位于 C:\Windows\Temp\ 或某个用户可写目录下的 payload 路径
计划任务 (schtasks /s)任务动作二进制,常见于 C:\Users\Public\
远程 PowerShell / WinRMpowershell.exe 加上它 staged 的任何 .exe
Impacket smbexec / wmiexec\Windows\Temp\ 下随机命名的 .bat 和 .exe

C:\Windows\ 中一个随机命名的服务二进制是 ShimCache 中信号最强的发现之一。在 用 ShimCache 狩猎恶意软件 中作为分诊规则有介绍。

源主机一侧

发起的主机经常会显示攻击工具本身的 ShimCache 条目:PsExec.exe、被交互式使用的 wmic.exe、自定义 mover、后渗透框架 loader。在合理的时间窗口内把"主机 A 上的工具"与"主机 B 上的服务二进制"配对,是横向移动推断的核心。

与 Sysmon Event ID 3 网络连接 和 Security 4624 logon type 3 交叉参照来闭合回路。EVTX parser 介绍了相关的事件 ID。

跨主机 diff 工作流

  1. 从范围内的每台主机采集 SYSTEM hive。见 获取 SYSTEM hive。或者用 Velociraptor 进行舰队级采集。
  2. 把每一份都解析并导出为 CSV。对批量工作来说 Eric Zimmerman 的 AppCompatCacheParser 是正解。
  3. 规范化路径,按共享的、不寻常的二进制做 diff。同样的随机服务名或 staging 路径出现在多台主机上,就是移动路径。
  4. 按插入顺序而不是时间戳给主机排序。时间戳是 文件的 mtime,不是事件时间,所以它单独无法对跳点排序。
  5. 对每一跳用 Security 4624(logon type 3)、4648(显式凭据)、7045(服务安装)以及用于 SHA-1 归属的 AmCache 进行佐证。

这能自然地汇入一条完整的 程序执行时间线。为报告把技术映射到 ATT&CK T1021(Remote Services)和 T1570(Lateral Tool Transfer)。

注意点

ShimCache 只在 clean shutdown 时刷新,所以一台仍在运行的主机可能尚未写入那条决定性条目。在断言某台主机未被触碰之前,先检查内存(从内存转储中提取)。时间戳单独无法给跳点排序;事件时间要依靠插入顺序加 EVTX 和 USN journal。清除该 value 的攻击者会留下自己的痕迹。见 ShimCache 反取证。

要快速对 hive 做 diff,用 Shimcache Parser 分别解析然后在客户端比对。EZ 工具的 CSV 导出,对较大的集合可直接喂入 pandas 或 csvdiff。

延伸阅读

相关文章