yic
LSASS凭证窃取与现代Windows防御深度分析报告
摘要本报告对通过内存转储技术窃取Windows操作系统凭证的攻击向量进行了深入的技术分析。报告以观察到使用Mimikatz工具及其sekurlsa::logonpasswords
命令成功从受感染的Windows主机内存中提取明文密码为出发点,系统性地剖析了该攻击的底层机制、相关系统组件的脆弱性以及全面的防御对策。本分析经过事实核查,所有关键论断均有据可查。
报告首先详细介绍了攻击工具Mimikatz的起源、功能演进及其在网络攻击中的核心作用。随后,报告深入探讨了Windows本地安全认证子系统服务(LSASS)的内部工作原理,阐明了其为实现单点登录(Single Sign-On, SSO)而缓存用户凭证的架构设计,这一设计也成为了此类攻击的主要目标。接着,报告分析了攻击者如何利用窃取的凭证进行横向移动、权限提升,并最终实现对整个Active Directory域的控制。
最后,本报告提出并详述了一套纵深防御策略,涵盖了操作系统层面的基础加固措施、以Windows Credential Guard为代表的现代虚拟化安全架构、基于最小权限原则的特权访问管理(Privileged Access Management, PAM)策略,以及基于行为的检测与响应机制。报告还对用户关心的“注销后清除内存”问题进行了澄清,对比了注销、关机和重启在清除内存凭证方面的实际安全影响。
1.0 攻击工具剖析:Mimikatz
1.1 背景与演进:从概念验证到后渗透核心工具
Mimikatz最初并非作为恶意软件被开发,而是由法国安全研究员Benjamin Delpy于2007年创建的一个研究项目。其初始目的是作为一个概念验证,旨在向微软展示其认证协议中存在的一个严重漏洞,该漏洞与一个名为WDigest的认证支持包相关。Delpy发现,在特定配置下,Windows操作系统会将用户密码的加密副本与相应的解密密钥同时存储在内存(RAM)中。
2011年,Delpy向微软报告了此漏洞,但微软的回应是,利用该漏洞需要攻击者已具备目标主机的管理权限,因此认为主要的安全边界并未被突破。Delpy预见到,单一主机的沦陷可作为攻击整个网络的跳板,因此决定在GitHub上公开发布Mimikatz的源代码,意在帮助网络安全防御人员理解并构建针对此类攻击的防御措施。
然而,源代码的公开无意中为攻击者提供了巨大的便利,将一种高效的凭证窃取技术普及化。Mimikatz迅速从一个研究工具演变为全球渗透测试人员、红队以及各类恶意行为者(从勒索软件即服务团伙到国家级APT组织)武器库中的核心组件,其代码被集成到多个臭名昭著的恶意软件活动中,如NotPetya和BadRabbit勒索软件攻击,从而巩固了其作为顶级后渗透工具的地位。
1.2 核心功能模块:sekurlsa::logonpasswords
sekurlsa::logonpasswords
命令是Mimikatz最核心且最常被恶意利用的模块之一。其功能是直接与本地安全认证子系统服务(LSASS)进程的内存空间进行交互,提取当前已登录或自上次系统重启以来曾处于活动状态的所有用户的可用登录凭证。
该命令的输出可以提供一个包含多种认证材料的“宝库”,具体包括:
• 明文密码
• NTLM(NT LAN Manager)密码哈希
• Kerberos票据(包括票据授予票据(Ticket-Granting Ticket, TGT))
• 智能卡PIN码
执行sekurlsa::logonpasswords full
命令可以获得更详尽的会话信息。虽然功能强大,但此命令仅是Mimikatz庞大工具集的一部分,如下表所示。
表1:Mimikatz部分核心模块及其功能
sekurlsa
logonpasswords
,tickets
,ekeys
,pth
,minidump
提取登录凭证、Kerberos票据、加密密钥,执行哈希传递(Pass-the-Hash)攻击,并解析离线的LSASS内存转储文件。
kerberos
list
,ptt
,golden
,purge
列出、使用(票据传递)、伪造和清除当前会话中的Kerberos票据。
lsadump
sam
,secrets
,cache
,dcsync
转储本地安全账户管理器(SAM)数据库、注册表中的LSA机密、缓存的域凭证,并对域控制器执行DCSync攻击。
privilege
debug
提升工具的权限以包含SeDebugPrivilege
,这是与受保护的系统进程(如LSASS)进行交互所必需的。
1.3 攻击前提:后渗透与高权限
一个必须明确的关键点是,Mimikatz是一个后渗透工具,而非初始访问向量。它本身无法突破网络防御或从外部攻陷一台主机。攻击者必须首先通过其他手段(如网络钓鱼、利用未修补的软件漏洞或对暴露的远程桌面协议服务进行暴力破解)在目标系统上获得立足点。
此外,为了执行其最强大的功能,特别是sekurlsa
模块中与LSASS交互的命令,Mimikatz必须以本地管理员(Administrator)或SYSTEM级别的权限运行。攻击者在启动Mimikatz后通常执行的第一条命令是privilege::debug
。此命令的作用是为当前进程请求SeDebugPrivilege
权限,该权限允许进程调试和检查系统上任何其他进程的内存,包括受到高度保护的lsass.exe
进程。因此,防御Mimikatz攻击的首要屏障是阻止攻击者获得初始访问和后续的权限提升。
2.0 目标剖析:Windows凭证缓存与LSASS进程
2.1 系统安全核心:LSASS的角色
Windows安全体系的核心是本地安全认证子系统服务(LSASS),其进程名为lsass.exe
。这是一个位于%WINDIR%\System32
目录下的关键系统进程,负责在本地计算机上强制执行安全策略。其核心职能包括:验证用户登录凭证、处理密码变更、以及创建定义用户身份和权限的访问令牌。用户在系统中的所有操作,从访问文件到连接网络共享,都受LSASS生成的访问令牌的制约。该进程对系统的稳定运行至关重要,任何强制终止lsass.exe
的行为都会导致系统触发严重错误并立即重启,这是一种防止安全策略被绕过的内置保护机制。
2.2 架构设计权衡:为可用性而缓存凭证
LSASS在内存中存储敏感凭证,使其成为Mimikatz等工具的攻击目标,这并非一个无意的设计缺陷或编程错误,而是为了提升用户体验和实现无缝网络访问而做出的架构设计权衡。在企业环境中,用户需要频繁访问文件服务器、邮件系统、打印机等多种网络资源。如果每次访问都需要用户重新输入密码,将严重影响工作效率。
为了解决此问题,Windows实现了单点登录(SSO)机制。用户在登录时成功认证一次后,LSASS会将其凭证材料缓存在RAM中,直至会话结束。当用户后续访问网络资源时,操作系统会自动从该缓存中检索所需凭证进行认证,无需用户再次交互。虽然这一设计带来了安全风险,但它对Windows在网络环境中的功能至关重要。这也解释了为何微软最初认为,只要阻止了对主机的管理权限访问,安全边界就未被突破,同时也说明了为何需要开发如Credential Guard这样的全新安全架构来从根本上改变凭证的存储方式。
2.3 凭证宝库:LSASS内存中的数据类型
由于其在SSO机制中的核心作用,LSASS进程内存成为了攻击者眼中的“高价值目标”,集中存储了多种形式的认证数据。能够读取此内存的攻击者可以获取所有活动及近期登录会话的以下凭证:
• 可逆加密的明文密码:在启用了旧版WDigest认证协议的情况下,LSASS存储的密码可以被轻松解密回明文。
• Kerberos票据:在Kerberos认证环境中,LSASS内存中存储着服务票据和至关重要的票据授予票据。
• NTLM哈希:作为Windows密码的现代标准哈希格式,NTLM哈希虽非明文,但可直接用于哈希传递攻击。
• LM哈希:一种安全性较弱的旧式哈希格式,虽已基本弃用,但为保持向后兼容性,仍可能存在于内存中。
• 智能卡PIN码:对于使用物理智能卡认证的用户,其PIN码也可能被缓存在内存中。
2.4 技术实现:Mimikatz如何读取LSASS内存
sekurlsa::logonpasswords
命令的执行过程是一次对LSASS进程的精确技术入侵,其前提是攻击者已获得管理员权限。
1. 权限提升:通过执行privilege::debug
,Mimikatz请求并获取SeDebugPrivilege
权限,这是访问其他进程内存的先决条件。
2. 进程交互与内存读取:获得权限后,Mimikatz通过一系列Windows应用程序编程接口(API)调用与LSASS交互。其核心逻辑如下:
• 首先,调用NtQuerySystemInformation
等函数来枚举系统进程,定位lsass.exe
的进程ID(PID)。
• 接着,使用OpenProcess
API,传入LSASS的PID,请求一个具有内存读取权限(如PROCESS_VM_READ
)的进程句柄。这一行为——一个非授权进程尝试打开LSASS的句柄——是高保真度的攻击指标,常被Microsoft Sysmon等监控工具记录(事件ID 10)。
• 最后,利用获得的句柄,反复调用ReadProcessMemory
,将LSASS进程的整个虚拟内存空间复制到由Mimikatz控制的缓冲区中。
3. 数据解析与提取:在获取内存转储后,Mimikatz通过模式扫描技术在海量数据中定位凭证。它会搜索特定认证模块(如wdigest.dll
或lsasrv.dll
)中已知的字节序列(签名),以找到关键数据结构的地址,例如指向所有活动登录会话链表头部的LsaLogonSessionList
指针。随后,Mimikatz遍历此链表,逐一解析出会话条目中包含的用户名、域名及相关的凭证材料(密码、哈希或票据)。
3.0 攻击升级路径:从单点突破到全域控制
成功转储凭证通常只是攻击的起点,而非终点。这些凭证是攻击者进行横向移动、权限提升和建立持久化控制的关键资源,能将一次局部的主机入侵升级为一场全域性的安全灾难。
3.1 哈希传递
在Windows环境中,攻击者通常无需明文密码,NTLM哈希本身就可用于认证。哈希传递(Pass-the-Hash)攻击正是利用了这一点,将窃取的NTLM哈希直接提交给远程主机进行身份验证。Mimikatz的sekurlsa::pth
命令极大地简化了此过程。攻击者只需提供用户名、域名和窃取的NTLM哈希,Mimikatz便能启动一个新进程(如cmd.exe
),并将伪造的凭证注入其认证令牌中,从而冒充受害者访问网络上的其他资源。
3.2 票据传递与Kerberoasting
在采用Kerberos协议的现代Active Directory环境中,针对票据的攻击同样致命。
• 票据传递:攻击者可使用sekurlsa::tickets /export
命令导出LSASS内存中的所有Kerberos票据。这些票据(.kirbi
文件)可被转移并在另一台机器上通过kerberos::ptt
命令注入到攻击者的会话中,使其获得票据所有者的所有访问权限,而无需密码或哈希。
• Kerberoasting:这是一种针对服务账户的隐蔽攻击。攻击者可向域控制器(DC)请求特定服务(由服务主体名称(Service Principal Name, SPN)标识,如SQL服务)的票据授予服务(TGS)票据。该票据的一部分使用服务账户密码的NTLM哈希加密。攻击者可离线对该票据进行暴力破解。由于服务账户密码通常强度较低且更新不频繁,此方法成功率很高。
3.3 伪造票据攻击:黄金票据与白银票据
获取对整个网络的持久性控制是许多高级攻击者的终极目标,Mimikatz通过伪造Kerberos票据使其成为可能。
• 黄金票据:每个Active Directory域中都有一个名为KRBTGT
的隐藏主账户,其密码哈希是签发域内所有TGT的“主密钥”。一旦攻击者攻陷DC并获取KRBTGT
哈希,便可使用kerberos::golden
命令伪造任意用户(甚至不存在的用户)的TGT,授予自身任意权限(如域管理员),并设置长达数年的有效期。黄金票据(Golden Ticket)提供了对整个AD林的完全、持久且极难被检测的控制权。
• 白银票据:与黄金票据不同,白银票据(Silver Ticket)是伪造的TGS票据。攻击者只需获取特定服务(如文件共享服务)的密码哈希,即可伪造仅能访问该服务的票据。虽然权限受限,但由于其认证过程不与DC通信,白银票据攻击更为隐蔽,难以通过网络监控发现。
3.4 目录复制服务攻击:DCSync
为了获取制作黄金票据所需的KRBTGT
哈希,攻击者过去必须在DC上执行代码。而DCSync攻击(通过lsadump::dcsync
命令实现)则利用了DC之间用于同步数据的合法协议——目录复制服务(Directory Replication Service, DRS)远程协议。拥有域复制权限的攻击者可以冒充一台DC,向另一台真实的DC发送合法的复制请求,从而获取包括KRBTGT
在内的任意账户的密码哈希。此攻击无需在DC上运行恶意代码,因此极为隐蔽和高效。
4.0 纵深防御策略
防御内存凭证窃取需要一个多层次的纵深防御策略,整合主动的系统加固、现代化的架构防护以及严格的管理策略,确保即使某一层防御被突破,其他层次仍能有效阻止或检测攻击。
4.1 基础加固:主动的系统配置
在部署高级防御方案之前,应首先实施以下基础性加固措施以缩减攻击面:
• 禁用WDigest:WDigest协议是导致明文密码在内存中泄露的主要原因。虽然在现代Windows系统(Windows 8.1/Server 2012 R2及更新版本)中默认禁用,但仍需确保在所有系统(尤其是旧版系统)中明确禁用。这可以通过将注册表项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest
下的UseLogonCredential
值设为0
来实现。
• 限制凭证缓存:Windows默认缓存最近10个域用户的密码哈希以支持离线登录。可通过组策略交互式登录: 不缓存前次登录的次数
将此值设为0
,以阻止哈希被存储在注册表中。
• 启用LSA保护:此功能将LSASS配置为受保护进程轻量版(Protected Process Light, PPL),阻止非PPL进程读取其内存或注入代码,从而直接对抗Mimikatz的标准攻击方式。可通过将注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
下的RunAsPPL
值设为1
来启用。但需注意,此设置可能与某些需要合法访问LSASS的第三方安全产品或应用不兼容。
4.2 架构防护:Windows Credential Guard
Windows Credential Guard是抵御LSASS内存转储最有效的技术手段,它代表了Windows凭证保护机制的根本性架构变革。
Credential Guard利用基于虚拟化的安全(Virtualization-Based Security, VBS)技术,创建一个由Windows Hypervisor保护的安全隔离环境。启用后,主LSASS进程(lsass.exe
)不再存储NTLM哈希和Kerberos TGT等敏感凭证。这些凭证被转移到一个名为LSAIso.exe
(LSA Isolated)的新进程中,该进程运行在VBS容器内。此容器的内存对主操作系统完全隔离,即使是内核级的代码也无法访问,从而使标准的Mimikatz攻击失效。
尽管极为有效,Credential Guard的部署有严格要求,且并非万无一失。它无法防御键盘记录器或在获得管理权限后安装的恶意安全支持提供程序(SSP)。此外,某些依赖旧协议(如NTLMv1、MS-CHAPv2)或无约束Kerberos委派的应用可能与其不兼容。
表2:Windows Credential Guard:要求与保护
64位CPU,支持虚拟化扩展(Intel VT-x, AMD-V)和二级地址转换(SLAT)。支持安全启动(Secure Boot)的UEFI固件。推荐使用可信平台模块(TPM)1.2或2.0版以实现硬件级安全。
Windows 10/11企业版/教育版或Windows Server 2016/2019/2022/2025。
隔离并保护NTLM密码哈希、Kerberos票据授予票据(TGTs)以及应用程序存储的域凭证。直接缓解依赖于从LSASS窃取这些机密的哈希传递和票据传递攻击。
无法防御通过键盘记录器或网络钓鱼捕获明文密码。无法阻止特权攻击者安装恶意的SSP以捕获未来的认证。可能与需要旧协议(例如MS-CHAPv2、摘要式身份验证、Kerberos无约束委派)的应用程序产生兼容性问题。