Dumping LSASS Like it’s 2019
免责声明:本博客文章仅用于教育和研究目的。提供的所有技术和代码示例旨在帮助防御者理解攻击手法并提高安全态势。请勿使用此信息访问或干扰您不拥有或没有明确测试权限的系统。未经授权的使用可能违反法律和道德准则。作者对因应用所讨论概念而导致的任何误用或损害不承担任何责任。
作者:Alex Reid,Red Siege 实习生
作为威胁行为者和安全研究人员长期使用的技术,通过篡改 LSASS.exe 来获取凭证在 2025 年仍然高度活跃。该技术的实现方式已经演变,行业逐渐从在目标系统上直接运行 Mimikatz 等工具,转向创建 LSASS 的内存转储,然后在攻击者端进行提取和解析以获取敏感信息。如今,各种 LSASS 转储方法层出不穷,而 Fortra 的 nanodump 出色地收集并实现了其中许多方法。
当然,随着攻击技术的演变,防御者也通过识别、缓解和实施控制措施来使其失效。因此,像 Microsoft Defender(Defender)这样的杀毒软件和 Microsoft Defender for Endpoint(MDE)这样的 EDR 服务能够检测并警告 nanodump 中的多种技术也就不足为奇了。例如,在 Cobalt Strike Beacon 中使用 nanodump --shtinkering
会导致本地 Defender 和 MDE 同时发出警报,并直接阻止该尝试:
同样,虽然 nanodump --spoof-callstack --snapshot
成功完成且未被 Defender 标记,但 MDE 识别并警告了该行为:
红蓝对抗的持续升级不断推动攻击和工具的复杂性达到新的高度。作为安全研究人员,很容易只关注新的和未探索的领域,而忽视那些被认为过时或不可行的旧技术。其中一些技术,虽然不再能够简单地通过 git clone 获取、运行并忘记,但只需进行一两次快速修改,就能重新成为有力的竞争者。
为了证明这一点,我们将回顾 2019 年使用 comsvcs.dll
的 MiniDumpW
导出进行 LSASS 转储的技术。该技术的主要参考是 Modexp 的博客文章《通过 COM+ 服务 DLL 进行 MiniDumpWriteDump》,其中提供了一个非常简短且简单的代码片段来演示该技术:
本质上,comsvcs.dll
通过 LoadLibrary
加载,然后通过 GetProcAddress
解析 MiniDumpW
导出。在确保进程内启用了 SeDebugPrivilege
后,使用 LSASS.exe 的进程 ID 和磁盘上的输出位置作为参数调用 MiniDumpW
。这会导致捕获 LSASS 进程的内存转储并将其写入指定位置的磁盘。
令人惊讶的是,该技术至今仍被真实的威胁行为者使用,微软发布的关于 Volt Typhoon 的威胁情报中观察到该 APT 使用了该方法:
将该代码移植到 BOF 格式非常简单,下面是一个初步版本:
这个非常简单的 POC 不包括启用 SeDebugPrivilege
,但可以通过 Cobalt Strike 的 getprivs
命令轻松实现。一个同样简单的 Aggressor 脚本配合 BOF 使用:
在生成一个提升权限的 beacon(管理员或 System 均可)后,可以使用 getprivs
命令在进程中启用 SeDebugPrivilege
:
运行 BOF 需要提供 LSASS PID 和转储文件的写入路径:
不出所料,Defender 和 MDE 都标记了该行为:
仔细观察 Defender 警报提供了一个有用的提示:
Defender 将转储文件本身识别为恶意文件。这并不令人惊讶;nanodump 提供了多种功能来尝试缓解此类警报,包括在将转储文件写入磁盘之前更改其签名,以及在不接触磁盘的情况下转储 LSASS 并下载转储文件的方法。这些信息最终提出了一个问题:如果我们能防止转储文件写入磁盘,那么使用 MiniDumpW
从任意进程转储 LSASS 本身是否会触发警报?
为了验证这一理论,我们可以使用我的一个公开项目 MemFiles。这是一个(在我看来)非常强大的 Cobalt Strike 工具包,它在 Cobalt Strike Beacon 内创建了一个基本的内存文件系统。其效果是,通过提供一个特定的不存在路径(c:redteam...),在 Beacon 进程中运行的工具(如 BOF)可以将文件写入内存而不是磁盘。
从 GitHub 拉取项目、编译并将 Aggressor 脚本导入 Cobalt Strike 后,我们可以通过再次生成一个提升权限的 x64 Beacon 并使用 getprivs
来准备测试:
MemFiles 要求 Beacon 进程不受 EDR 放置的任何用户态钩子的影响。Defender 和 MDE 都不使用用户态钩子,但如果尝试针对不同的安全产品,则需要考虑这一点。可以使用 meminit
在 Beacon 中初始化 MemFiles:
现在可以运行 BOF,使用相同的 LSASS PID,但这次指定转储文件应写入 c:redteamdump.bin
。redteam
目录在目标文件系统中不存在;该关键字触发 MemFiles 拦截文件操作并将文件内容写入内存:
使用 memlist
命令显示内存中的转储文件,然后可以使用 memfetch
下载:
这次 Defender 保持沉默,MDE 也没有发出警报:
没错,在 2025 年,一个未签名的随机可执行文件运行 Cobalt Strike Beacon 可以使用 2019 年的技术转储 LSASS,而 MDE 却毫无反应,前提是你不将转储文件写入磁盘。
这是一个快速而简单的例子,展示了如何通过相对较少的努力,让那些经常被丢弃并认为不再可行的旧工具重新焕发活力。随着信息安全军备竞赛的不断加速,只向前寻找解决方案和 TTP 的诱惑应该与偶尔回顾现有技术相结合,这些技术只需稍作修改,就能绕过行业领先的安全产品。
原文始发于微信公众号(securitainment):转储 LSASS 像 2019 年一样简单
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论