凭据转储(Credential Dumping)手法与 LSASS 进程保护实务
凭据转储(Credential Dumping)手法与 LSASS 进程保护实务

在内网渗透与横向移动(Lateral Movement)过程中,获取域管理员或本地高权限用户的凭据是攻击者达成目标的核心途径。Windows 操作系统的本地安全机构子系统服务(Local Security Authority Subsystem Service, lsass.exe)负责存储当前活动会话的 Kerberos 票据、NTLM 哈希以及部分明文凭据(SSP 缓存)。因此,围绕 lsass.exe 进程内存的提取与防护,历来是红蓝对抗中最为激烈的战场。
常见 LSASS 凭据转储技术手法
攻击者通常在获取本地管理员权限(SeDebugPrivilege)后,通过多种方式提取 lsass.exe 进程的虚拟内存镜像:
1. 基于 MiniDumpWriteDump API 及其封装
Windows 调试接口 Dbghelp.dll 提供的 MiniDumpWriteDump 函数允许将指定进程的完整内存导出到磁盘文件。早期著名的 Mimikatz、ProcDump 以及通过系统内置的 comsvcs.dll 导出的方法均基于此 API:
# 通过 rundll32 调用 comsvcs.dll 的 MiniDump 导出功能
# 假设 lsass.exe 的 PID 为 628
rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump 628 C:\temp\lsass.dmp full
2. 离线注册表提取(SAM / SYSTEM Hive)
若直接访问 LSASS 进程被端点检测响应(EDR)严密拦截,攻击者会通过导出 Windows 注册表中的 SAM 和 SYSTEM 文件,在离线状态下提取本地账户的 NTLM 哈希:
reg save HKLM\SAM sam.save
reg save HKLM\SYSTEM system.save
reg save HKLM\SECURITY security.save
3. 句柄克隆与直接系统调用(Direct Syscalls)
为绕过用户态 API Hook,高级攻击手法采用直接发起内核系统调用(如 NtOpenProcess、NtReadVirtualMemory)或利用已有进程持有的高权限 LSASS 句柄(Handle Duplication)来读取内存,规避常规 EDR 的 API 拦截。
graph TD
Attacker[攻击者 / 恶意进程] -->|请求 SeDebugPrivilege| OS[Windows 内核安全机制]
OS --> CheckPPL{LSASS 是否启用 PPL / VBS ?}
CheckPPL -->|是| Deny[拒绝句柄创建: Access Denied 0x5]
CheckPPL -->|否| Handle[获取 LSASS 读句柄: PROCESS_VM_READ]
Handle --> DumpMethod[转储方式: MiniDump / 直接内存读取]
DumpMethod --> EDRCheck{EDR 行为监控与 Sysmon}
EDRCheck -->|检测到高危访问| Alert[触发报警并阻断进程]
EDRCheck -->|绕过或未拦截| OutDump[生成 lsass.dmp 凭据分析]
EDR 监控维度与 Sysmon 检测规则
企业安全运营团队通常基于以下关键行为在终端构建检测规则:
- 可疑句柄打开请求:非受信任的可执行文件向
lsass.exe请求PROCESS_VM_READ(0x0010)或PROCESS_ALL_ACCESS(0x1FFFFF)访问掩码。 - 敏感 DLL 动态加载:非典型进程动态加载
dbghelp.dll、dbgcore.dll或调用comsvcs.dll。
以下是防御端针对 LSASS 转储行为的 Sysmon 检测配置片段(sysmonconfig.xml):
<Sysmon schemaversion="4.90">
<EventFiltering>
<!-- 监控对 LSASS 进程的非常规句柄访问 -->
<ProcessAccess onmatch="include">
<TargetImage condition="end with">lsass.exe</TargetImage>
</ProcessAccess>
<ProcessAccess onmatch="exclude">
<!-- 排除系统合法核心服务正常访问 -->
<SourceImage condition="is">C:\Windows\System32\svchost.exe</SourceImage>
<SourceImage condition="is">C:\Windows\System32\services.exe</SourceImage>
<SourceImage condition="is">C:\Windows\System32\wininit.exe</SourceImage>
<GrantedAccess condition="is">0x1000</GrantedAccess> <!-- PROCESS_QUERY_LIMITED_INFORMATION -->
</ProcessAccess>
</EventFiltering>
</Sysmon>
企业级纵深防御与加固实务
仅靠被动特征报警无法完全阻断高级免杀手法的内存提取,必须从操作系统底层启用硬件与虚拟化级别的强隔离保护。
1. 启用 LSA 保护进程(RunAsPPL)
将 LSASS 进程配置为受保护进程轻量版(Protected Process Light, PPL)。开启后,即使攻击者拥有本地 NT AUTHORITY\SYSTEM 权限,未通过微软签名验证的代码也无法通过 OpenProcess 打开 LSASS 句柄(错误码 ERROR_ACCESS_DENIED)。
通过注册表配置:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "RunAsPPL" /t REG_DWORD /d 1 /f
或者通过组策略(GPO)下发:计算机配置 -> 管理模板 -> 系统 -> 本地安全机构 -> 将 LSA 配置为作为保护进程运行。
2. 部署基于虚拟化的安全(Credential Guard)
在 Windows 10/11 企业版及 Windows Server 2016+ 中启用 Credential Guard(凭据保护)。
Credential Guard 利用 Hyper-V 虚拟化技术构建独立的隔离执行环境(Virtual Secure Mode, VSM)。它将 NTLM 哈希计算与 Kerberos 密钥管理移至名为 LsaIso.exe(LSA Isolated)的隔离微内核中运行。宿主机上的 lsass.exe 仅作为代理转发 RPC 请求。即便主操作系统内核被完全攻陷,攻击者转储 lsass.exe 内存也只能拿到无意义的代理句柄,无法提取到底层的纯文本与密钥哈希。
# 检查 Credential Guard 运行状态
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard | Select-Object SecurityServicesRunning
3. 配置攻击面减少规则(ASR Rules)
启用 Windows Defender 提供的 ASR 规则:9e6c4e1f-7d60-472d-ba1a-a39ef669e4b2(阻止从 Windows 本地安全机构子系统读取凭据):
Set-MpPreference -AttackSurfaceReductionRules_Ids 9e6c4e1f-7d60-472d-ba1a-a39ef669e4b2 -AttackSurfaceReductionRules_Actions Enabled
结合“RunAsPPL 进程白名单拦截 + Credential Guard 硬件虚拟化隔离 + Sysmon/EDR 行为闭环审计”,可以从根本上瓦解凭据转储在内网横向扩散中的实用性。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)