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 / WinRM | powershell.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 工作流
- 从范围内的每台主机采集 SYSTEM hive。见 获取 SYSTEM hive。或者用 Velociraptor 进行舰队级采集。
- 把每一份都解析并导出为 CSV。对批量工作来说 Eric Zimmerman 的 AppCompatCacheParser 是正解。
- 规范化路径,按共享的、不寻常的二进制做 diff。同样的随机服务名或 staging 路径出现在多台主机上,就是移动路径。
- 按插入顺序而不是时间戳给主机排序。时间戳是 文件的 mtime,不是事件时间,所以它单独无法对跳点排序。
- 对每一跳用 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。
延伸阅读
- MITRE ATT&CK Remote Services (T1021):目标侧迹象的技术参考。
- Mandiant 的 Caching Out the Val:奠基性的 ShimCache 技巧。
- JPCERT/CC 的 Detecting Lateral Movement through Tracking Event Logs:与分析的 EVTX 一侧自然搭配。