宜兴市住房和城乡建设局网站,举重运动员 做网站,装修设计软件哪个好用免费,网站热力图怎么做从内存到密钥库#xff1a;Windows凭证提取的现代攻防全景与实战演进 如果你在渗透测试或红队评估的战场上待过一段时间#xff0c;肯定会发现#xff0c;获取Windows系统上的凭证#xff0c;早已不是简单地运行一个工具然后坐等结果那么简单了。这更像是一场猫鼠游戏…从内存到密钥库Windows凭证提取的现代攻防全景与实战演进如果你在渗透测试或红队评估的战场上待过一段时间肯定会发现获取Windows系统上的凭证早已不是简单地运行一个工具然后坐等结果那么简单了。这更像是一场猫鼠游戏攻防双方的技术都在快速迭代。从古老的SAM文件离线分析到直接与LSASS进程内存“对话”再到如今需要绕过层层防护的复杂操作每一步都充满了细节和变数。这篇文章我想和你深入聊聊当前环境下几种主流凭证获取技术的核心差异、实战效果以及那些真正能帮你绕过现代防御体系的“组合拳”技巧。无论你是刚入门的安全研究员还是经验丰富的红队成员希望这些基于实战踩坑后的梳理能给你带来一些新的视角和可落地的操作指南。1. 基石解析Windows凭证存储的核心机制与演变要理解如何获取凭证首先得明白Windows把它们藏在了哪里以及为什么这些地方会成为攻击者的目标。Windows的认证与凭证管理体系是一个多层级的复杂架构其设计初衷是为了平衡安全性与用户体验但历史遗留问题和功能迭代也留下了不少可供利用的“缝隙”。本地安全机构子系统服务LSASS无疑是当今凭证攻防的绝对焦点。你可以把它想象成Windows系统认证的“中央处理器”。当用户交互式登录如输入密码、网络登录或运行计划任务时相关的凭证信息包括经过处理的哈希值甚至在某些配置下是明文最终都会由LSASS进程加载并维护在它的内存空间中。LSASS内存中可能包含多种类型的凭证材料NTLM哈希这是最经典的身份验证凭据由用户密码计算而来。即使系统启用了“禁止在内存中存储明文密码”的策略NTLM哈希通常也依然存在因为它被用于NTLM挑战/响应认证。Kerberos票证在域环境中用户成功登录后会获得票证授予票证TGT和各种服务票证。这些票证特别是如果能够获取到加密密钥如RC4密钥对应NTLM哈希就等同于拥有了该用户的身份。WDigest、TSPkg、LiveSSP等凭据这些是较旧的认证协议包在历史版本或特定配置下它们可能会在内存中保留可逆加密的甚至明文的密码。微软通过后续的补丁和策略逐步收紧了对这些凭据的保护。与LSASS这种“在线热数据”相对的是安全账户管理器SAM数据库。它存储了本地用户账户的密码哈希LM Hash和NTLM Hash位于%SystemRoot%\system32\config\SAM。这个文件在系统运行时被系统锁死通常无法直接读取。它的特点是存储“冷数据”——即用户密码的静态哈希值不包含会话密钥或明文。获取SAM文件通常意味着你已经具备了文件系统访问权限例如通过物理接触、卷影复制或系统权限提升后但其价值在于可以离线进行哈希破解如彩虹表、暴力破解。注意自Windows Vista/Server 2008引入Credential Guard基于虚拟化安全以来对LSASS的传统内存读取攻击得到了极大遏制。Credential Guard将LSA隔离在一个受保护的、普通内核甚至管理员都无法直接访问的虚拟容器中运行这直接废掉了许多传统工具的直接内存转储能力。因此了解目标环境是否启用了Credential Guard是选择攻击路径的第一步。为了更清晰地对比这两种核心数据源我们可以看下面这个表格特性维度LSASS 进程内存SAM 数据库文件数据性质运行时“热数据”包含登录会话状态存储的静态“冷数据”主要内容NTLM哈希、Kerberos票证与密钥、可能存在的明文密码、会话密钥本地账户的LM/NTLM哈希LM可能为空访问条件需要调试权限SeDebugPrivilege和高权限进程令牌需要系统级SYSTEM权限访问受保护的文件典型场景用户已登录系统正在运行系统离线如通过启动盘访问或在线但通过特殊手段复制文件防御绕过难点受防病毒/EDR、攻击面减少策略、Credential Guard、PPL等保护受文件系统ACL、BitLocker全盘加密保护信息“鲜度”高反映当前登录会话低反映上次密码更改时的状态理解了这些基础我们就能明白所谓的“凭证获取”本质上是一场围绕LSASS和SAM的权限争夺与防御绕过之战。下面我们就进入具体的实战方法拆解。2. 经典路径实战SAM文件提取与离线分析虽然LSASS是更“多汁”的目标但SAM文件的提取作为一条经典路径在特定场景下依然不可忽视。例如在物理安全评估、应急响应中获取到硬盘镜像或者通过某些漏洞获得了系统级文件操作权限但LSASS被严密防护时。在线提取SAM文件的核心挑战在于绕过系统的文件锁定。直接复制C:\Windows\System32\config\SAM是行不通的。通常我们依赖的是卷影复制服务Volume Shadow Copy Service, VSS。这是Windows用于创建备份快照的机制我们可以利用它创建一个包含SAM文件的卷影副本然后从副本中读取。一个经典的命令行操作序列如下它不需要额外的第三方工具仅使用Windows内置的vssadmin和reg命令# 创建一个新的卷影副本针对C盘 vssadmin create shadow /forC: # 上述命令会输出副本的路径通常类似于 \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1 # 我们将SAM、SYSTEM、SECURITY文件从副本复制到临时位置 copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SAM C:\temp\SAM copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\temp\SYSTEM # 使用注册表工具加载这些hive文件并导出哈希 reg load HKLM\TempSAM C:\temp\SAM reg load HKLM\TempSYSTEM C:\temp\SYSTEM # 之后可以使用Mimikatz或其它离线工具如secretsdump.py从加载的注册表项中提取哈希 # 清理卸载hive并删除临时文件 reg unload HKLM\TempSAM reg unload HKLM\TempSYSTEM del C:\temp\SAM C:\temp\SYSTEM提示在实际操作中vssadmin的执行可能需要管理员权限并且可能被安全软件监控。更隐蔽的方式是使用diskshadow脚本或直接调用VSS的COM API这些方法产生的命令行日志特征更少。获取到SAM和SYSTEM文件后离线提取哈希就变得直接了。除了广为人知的Mimikatz的lsadump::sam模块需在加载hive的上下文中运行我更喜欢在跨平台环境下使用Impacket套件中的secretsdump.py脚本它非常高效且稳定python3 secretsdump.py -sam SAM.bak -system SYSTEM.bak LOCAL这条命令会解析SAM数据库输出所有本地用户的RID、用户名和对应的NTLM哈希以及可能存在的、已废弃的LM哈希。接下来这些哈希就可以被用于哈希传递攻击或导入到如Hashcat、John the Ripper等工具中进行离线破解。这种方法的局限性也很明显第一它只能获取本地账户哈希对域账户无能为力域账户哈希存储在域控制器上。第二它获取的是静态哈希如果目标系统启用了LSA保护或Credential Guard即使在线提取SAM其哈希值也可能无法直接用于某些认证因为缺少必要的会话数据。因此在现代攻防中SAM提取往往作为LSASS攻击受阻时的备选方案或是用于获取那些长期未登录、其凭据未加载到LSASS中的本地服务账户。3. 核心战场LSASS内存提取技术与模块化剖析直接针对LSASS进程的操作是获取凭证信息最丰富、最直接的方式。正如前文所述LSASS是一个宝库。我们以最著名的工具Mimikatz为例深入看看它能从LSASS中挖掘出哪些不同的“矿脉”。Mimikatz的sekurlsa模块家族是专门用于与LSASS交互的。很多人只知道sekurlsa::logonPasswords这个“万能”命令但理解每个子模块的差异能帮助你在不同场景和防御措施下更精准地获取所需信息。sekurlsa::msv这是基础。它主要提取MSV1_0认证包的凭据核心输出是用户的NTLM哈希以及古老的LM哈希。这是进行哈希传递攻击最关键的数据。即使系统配置了“不存储可逆加密密码”这里依然会有NTLM哈希。sekurlsa::wdigest在Windows 7/Server 2008 R2及更早的默认配置中或后期系统未启用相应安全策略时WDigest协议会在内存中存储明文密码。这个模块就是用来提取它们的。从Windows 8.1/Server 2012 R2开始默认已禁用此行为但可通过修改注册表UseLogonCredential键值重新启用这本身也是一个后渗透技巧。sekurlsa::kerberos在域环境中此模块能提取用户的Kerberos加密密钥如aes256_hmac,rc4_hmac等。rc4_hmac密钥实际上就是该用户的NTLM哈希而AES密钥则更为安全。获取这些密钥后可以用于伪造银票证或进行Kerberos票证操作。sekurlsa::tspkg/sekurlsa::livessp/sekurlsa::ssp这些模块针对其他一些安全支持提供程序。例如tspkg与终端服务相关livessp与Live账户相关。它们在某些特定的登录场景或服务配置下也可能存有凭据信息。sekurlsa::logonPasswords这个命令可以看作是一个“聚合查询”它会尝试调用上述多个模块一次性列出它能找到的所有类型的凭据哈希、明文、密钥等。在未知环境进行初步侦察时非常有用。那么一个典型的、权限准备充分的Mimikatz执行流程看起来是这样的# 提升权限至DEBUG并尝试提升令牌 privilege::debug token::elevate # 然后执行信息提取例如最全面的扫描 sekurlsa::logonPasswords # 或者针对性提取NTLM哈希 sekurlsa::msv然而“能直接运行Mimikatz”本身在现代高安全环境中已经是一种奢望。它的二进制文件特征、内存扫描行为、以及对LSASS的特定API调用早已被主流终端检测与响应EDR产品列入高度敏感的行为模型。因此盲目的直接执行无异于“自杀”。这引出了我们下一个必须深入讨论的话题绕过技巧。4. 绕过现代防御从内存转储到无文件加载面对层层设防的系统传统的“双击exe”方式已经失效。我们需要更隐蔽、更底层、更多样的技术来达成目标。这些绕过技巧大致可以沿着几个维度展开。第一层规避磁盘扫描与进程创建监控。直接上传mimikatz.exe到目标磁盘并运行几乎百分之百会被静态或动态查杀。因此无文件加载成为首选。反射式DLL注入将Mimikatz的DLL版本如mimikatz.dll不落地直接加载到某个可信进程如notepad.exe,svchost.exe的内存中执行。可以使用PowerSploit的Invoke-ReflectivePEInjection或自定义的加载器实现。PowerShell内存加载通过PowerShell脚本将Mimikatz的PE文件以字节数组形式载入内存并执行。例如使用Invoke-Mimikatz这个广为人知的PowerShell脚本。虽然其签名也已被广泛标记但可以通过代码混淆、分块加载、或将其功能重写到自定义的PS脚本来规避。.NET Assembly加载利用Cobalt Strike的execute-assembly或自行编写的.NET加载器将Mimikatz的.NET版本如SharpKatz在内存中运行不接触磁盘。第二层规避对LSASS的直接内存访问。即使你的恶意代码成功运行尝试调用OpenProcess获取LSASS的进程句柄并进行内存读取时也会触发EDR的警报。使用合法的转储工具利用系统自带或第三方可信的调试、诊断工具来创建LSASS的内存转储文件.dmp然后离线分析。常用工具包括procdump.exe(Sysinternals)procdump -ma lsass.exe lsass.dmpTask Manager创建转储文件需管理员权限。comsvcs.dll这是一个Windows系统DLL包含一个导出函数MiniDump可以通过rundll32调用rundll32.exe C:\windows\system32\comsvcs.dll MiniDump PID lsass.dmp full。这种方法利用了白名单进程和DLL。利用PPL受保护进程轻量级绕过Windows 10/Server 2016之后LSASS可以被配置为PPL进程这阻止了非受信进程获取其完全访问句柄。一些技术通过驱动漏洞或利用SeDebugPrivilege与特定标志的组合来绕过PPL保护。例如Mimikatz自身在更新中也加入了对某些PPL绕过方法的支持如mimidrv驱动但这需要管理员权限并加载驱动风险较高。直接内核对象操作这是一项高阶技术通过操作内核中的进程对象或内存管理结构来间接读取LSASS内存完全绕过用户态的API钩子和监控。这通常需要利用内核驱动或漏洞。第三层混淆行为与日志规避。在操作前后还需要清理痕迹。清除Windows事件日志提取凭证后相关操作可能会在安全日志Event ID 4688, 4663等中留下记录。可以使用wevtutil或PowerShell命令清除特定日志。使用定制化或开源的替代工具完全放弃Mimikatz使用其他特征更不明显的工具如Nanodump、PPLdump、SharpKatz、Dumpert等。这些工具可能只实现核心的转储功能代码更精简行为模式与Mimikatz不同可能绕过基于特征的检测。LSASS内存补丁在提取凭证后甚至可以尝试修补LSASS内存中某些敏感数据结构以隐藏被读取的痕迹但这极不稳定且危险可能导致系统崩溃。下面是一个结合了部分绕过思想的、相对隐蔽的操作示例思路非完整可执行代码仅为逻辑描述侦察首先检查Credential Guard是否启用reg query HKLM\System\CurrentControlSet\Control\LSA /v LsaCfgFlags检查LSASS是否为PPL进程通过Process Explorer或Get-Process lsass | fl *查看进程保护级别。选择方法如果防御较弱可尝试使用comsvcs.dll的rundll32方法转储。如果此方法被拦截则考虑使用经过混淆的PowerShell脚本反射加载一个轻量级的转储模块。执行转储在内存中执行转储逻辑将LSASS的进程内存写入到磁盘上一个看似正常的临时文件路径如C:\Windows\Temp\report.dat或者如果条件允许最好通过网络直接传输到攻击者服务器避免落地。离线分析在攻击者控制端使用Mimikatz读取转储文件mimikatz # sekurlsa::minidump lsass.dmp然后sekurlsa::logonPasswords。痕迹清理删除转储文件并视情况清理相关事件日志。5. 组合策略与深度利用从凭证到持久化与横向移动获取凭证不是终点而是新一轮攻击的起点。单一的提取方法可能受限于环境因此在实际的红队行动中组合使用多种技术并根据目标环境动态调整策略至关重要。场景一内网初始立足点。假设你通过一个Web漏洞获得了某个应用服务器上一个中等权限的Shell。直接运行Mimikatz失败。第一步尝试使用系统自带工具转储。运行procdump -accepteula -ma lsass.exe lsass.dmp。如果procdump.exe被禁用或不存在尝试使用comsvcs.dll的rundll32方法。第二步如果上述方法都被监控尝试使用PowerShell的Invoke-Mimikatz脚本需做混淆和分块加载或者上传一个自定义的、签名不常见的.NET程序集来执行内存读取。第三步从获取的哈希中优先寻找本地管理员账户的哈希。因为同一内网中本地管理员密码或对应的哈希可能在多台机器上复用。使用crackmapexec或Invoke-TheHash等工具进行哈希传递攻击尝试横向移动到其他主机。场景二已获得域用户权限目标是域管理员。重点此时sekurlsa::kerberos模块变得极其重要。提取当前登录用户的Kerberos票证TGT或加密密钥。如果当前用户有权限访问某台服务器并且域管理员曾登录过那台服务器那么在那台服务器的LSASS内存中就可能存在域管理员的凭据。组合技巧使用sekurlsa::tickets导出所有可用的Kerberos票证。你可能会发现可重用的服务票证ST。结合Rubeus这样的工具可以进行票证传递、票证续订或伪造黄金票证/银票证攻击直接提升到域控权限而无需破解哈希。深度持久化获取域管理员哈希或密钥后除了立即的横向移动应考虑持久化。例如使用域管理员哈希创建一个新的域管理员账户或者设置一个基于Silver Ticket的隐蔽后门用于长期访问特定服务。防御视角的思考了解这些攻击方法同样有助于蓝队构建更有效的防御策略。仅仅依赖杀毒软件拦截Mimikatz是远远不够的。一个纵深防御体系应该包括启用Credential Guard和LSA保护这是阻断大多数LSASS内存读取攻击的最有效手段。严格限制本地管理员权限避免哈希在多台机器间复用。部署具备行为检测能力的EDR监控对LSASS进程的异常句柄请求、使用非常规工具如procdump创建转储文件、以及rundll32调用comsvcs.dll等可疑行为序列。强制使用强认证如Windows Hello for Business、智能卡并逐步淘汰NTLM协议转向仅使用Kerberos并启用AES加密。实施网络分段和最小权限原则即使攻击者获取了某台主机的凭证其横向移动的能力也会受到极大限制。这场围绕Windows凭证的攻防博弈技术细节繁多且迭代迅速。从最基础的SAM提取到复杂的LSASS内存绕过从单一的哈希传递到基于Kerberos的票证攻击每一步都要求我们不仅要知道“怎么做”更要理解“为什么能这么做”以及“对方会怎么防”。真正的实战能力来源于对这些底层原理的清晰认知以及对各种工具和技术的灵活组合与创造性运用。记住没有一种方法是万能的最好的武器永远是适应战场变化的思想。