【翻译】像2019年一样dump lsass - 对2019年的技术进行简单修改绕过检测
n1ji1 发表于 北京 渗透测试 783浏览 · 2024-05-15 14:46

原文链接:https://redsiege.com/blog/2024/03/dumping-lsass-like-its-2019/

作为威胁行动实施者和进攻性安全专业人员的长期策略,篡改LSASS.exe以恢复凭据仍然是 2024 年的一项高度应用的技术。实现此目的的方法已经进步,随着行业的发展,攻击者不再在目标系统上运行 Mimikatz 等工具,而是转向创建 LSASS 的内存转储,然后可以在攻击者本机进行转储文件输出和解析,以提取敏感信息。跟踪当今可用的所有不同的转储 LSASS 方法比较困难,但 Fortra 的 nanodump 在收集和实现 LSASS 转储方面做得非常出色。

当然,随着进攻性安全 TTP 的发展,防御者执行着分析识别、缓解和实施使其无效的控制措施的重要工作。像Microsoft Defender(Defender)这样的AV产品和像Microsoft Defender for Endpoint(MDE)这样的EDR服务可以检测nanodump中可用的几种技术并发出警报,这并不奇怪。例如,从一个Cobalt Strike Beacon上执行 nanodump --shtinkering 会导致本地 Defender 和 MDE 警报,以及完全阻止攻击尝试:

Microsoft Defender 告警

MDE 告警

同样,虽然 nanodump --spoof-callstack --snapshot 成功完成且未被 Defender 标记,但 MDE 会识别并针对以下行为发出告警:

MDE 告警

红蓝之间无休止的猫捉老鼠游戏不断将攻击手法和工具的复杂性推向新的高度。作为一名安全研究人员,人们很容易只关注新的和未探索的部分,而忽视了旧的 TTP,这些 TTP 很容易被当作过时的或不可行的而丢弃。其中一些 TTP 虽然不再能够简单地被 git -cloned、抛弃和遗忘,但距离作为有利的竞争者重新进入红蓝对抗的视野只需要一两个快速修改。

为了证明这一点,我们将重新审视 2019 年时代的技术,该技术使用 comsvcs.dll 的 MiniDumpW 导出来转储 LSASS。此技术的主要参考是 Modexp 的博客文章 MiniDumpWriteDump via COM+ Services DLL,它提供了一个非常简短和简单的代码片段来演示该技术:

本质上,comsvcs.dll使用 LoadLibrary 加载,然后使用 GetProcAddress 解析 MiniDumpW 导出。确保在进程中启用 SeDebugPrivilege 后,MiniDumpW" 是使用 LSASS.exe 进程的进程ID和磁盘上的输出位置作为参数调用的函数。这样做的结果就是捕获 LSASS 进程的内存转储并将其写入指定位置的磁盘。

令人惊讶的是,这种技术今天仍然被真正的威胁行为实施者使用,Microsoft发布了有关Volt Typhoon的威胁情报,在这份APT威胁报告中观察到采用了这种方法:

将此代码移植成 BOF 格式是很简单的,移植版本如下所示:

这个非常简单的 POC 不包括启用 SeDebugPrivilege,但使用 Cobalt Strike getprivs 命令可以轻松完成。

同样简单的 Aggressor 脚本便于使用 BOF:

生成高权限的beacon(admin或system同样有效)后,getprivs 命令可用于在此进程中启用 SeDebugPrivilege:

运行 BOF 需要提供 LSASS PID 和将转储文件写入的路径:

不出所料,Defender 和 MDE 都标记了这一点:


Defender Alert


MDE Alert

仔细查看 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 都没有用户层HOOK,但如果尝试针对不同的安全产品这样做,则需要考虑这一点。MemFiles 可以在 Beacon 中使用 meminit 初始化:

现在可以运行 BOF ,使用与以前相同的 LSASS PID,但这次指定应将转储文件写入 c:\redteam\dump.bin 。目标文件系统上不存在 redteam 目录;此关键字会触发 MemFiles 拦截文件操作并将文件内容写入内存:

使用 memlist 命令显示内存中的转储文件,然后可以使用 memfetch 下载该文件:

Defender 这次保持静默,MDE 中也没有引发任何警报:

是的,没错。在 2024 年,运行 Cobalt Strike Beacon 的无签名的,随便的可执行文件可以使用 2019 时代的技术转储 LSASS,而 MDE不会对此行为产生告警,前提是您不将转储文件写入磁盘。

这是一个快速而简陋的例子,说明经常被丢弃并被认为不再可行的旧工具如何以相对较少的努力复活。随着信息安全军备竞赛的不断加速,只期待解决方案和 TTP 的诱惑应该通过偶尔回顾现有的解决方案和 TTP 来缓和,这些解决方案和 TTP 只需稍作修改,就可以超越、绕过行业领先的安全产品。

0 条评论
某人
表情
可输入 255
目录