Skip to content

LSASS凭证窃取的演进与EDR防御

· 7 min

引言#

在 Windows 系统的攻防中,lsass.exe(本地安全机构子系统服务)负责处理本地安全和登录策略,内存中驻留着极其关键的明文密码、哈希值和身份验证数据包。对于攻击者而言,一旦获取高权限并成功访问 LSASS 进程内存进行转储(Dump),就等于拿到了横向移动和权限提升的“万能钥匙”。

本文将从安全研究的视角,梳理 LSASS 转储技术从“合法工具滥用”到“底层系统调用”,再到“句柄克隆”的演进路线,并探讨现代 EDR 该如何应对这些高级威胁。

依据工作中写的安全调研内容整理而来。

合法签名工具滥用#

早期的防御机制主要依赖于黑名单和文件特征查杀。为了规避杀软,攻击者转向了“离地攻击”,即利用系统自带或带有微软官方合法签名的二进制文件来完成内存转储。

image-20240304230410137 得到转储文件 lsass.dmp 后,将其拷贝到 Mimikatz 同目录下执行:

Terminal window
mimikatz # sekurlsa::minidump lsass.dmp
Switch to MINIDUMP
mimikatz # sekurlsa::logonPasswords full

即可获取目标机器的凭证信息 。

通常密码在输入后,经过 wdigest 和 tspkg 模块调用,会使用可逆算法加密存储在内存中,而 Mimikatz 正是通过逆算获取明文密码 。

image-20240305135759138

image-20240305141420847

防御思考: 这类手法的核心在于“信任滥用”。现代 EDR 已经不能仅靠数字签名来放行文件,必须引入命令行参数审计(如监控 -ma lsass.exe)和父子进程调用链分析

底层 Syscall 与特征剥离#

当 EDR 厂商开始在用户态的 Windows API(如 MiniDumpWriteDump)挂钩(Hook)进行监控时,传统的转储工具便会立刻触发告警。以 nanodump 为代表的现代工具开辟了新的战场:

句柄克隆与位置无关代码(PIC)#

EDR除了Hook API,还会密切监控针对 LSASS 进程的 ProcessAccess(进程访问)事件。为了在不触发访问告警的情况下窃取数据,攻击者引入了更底层的混淆手法:

位置无关代码(PIC): 位置无关代码是一种编程技术,它使得代码不依赖于特定的内存地址。这意味着无论在内存中的哪个位置加载共享库,它都可以正常工作。这是通过使用相对寻址和基址寄存器等技术来实现的。PIC的使用使得多个进程可以共享同一库的单一副本,从而减少内存占用,并减少重复的代码加载。这对于系统中有多个进程需要使用相同库的情况非常有用。

image-20240313180555951

HandleKatz现在没办法克隆句柄了,被守护进程保护了,所以这个工具失效了。

防线迭代#

尽管攻击手法不断迭代,但防御体系也在不断进化。