在渗透过程中,获得一台windows机器权限之后,很重要一个环节就是抓密码。 但是在使用mimikatz抓取系统账号密码时,有时运维人员会开启一些防护措施,导致mimikatz抓取失败或异常。 本文主要几种mimikatz运行方式,来bypass LSA Protection 和Credential Guard获取密码。
自Windows 8.1 开始为LSA提供了额外的保护(LSA Protection),以防止读取内存和不受保护的进程注入代码。保护模式要求所有加载到LSA的插件都必须使用Microsoft签名进行数字签名。 在LSA Protection保护模式下,mimikatz运行 sekurlsa::logonpasswords抓取密码会报错。
测试环境:Windows 10 X64
可以通过注册表开启LSA Protection,注册表位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
新建-DWORD(32)值,名称为 RunAsPPL,数值为 00000001,然后重启系统生效。
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "RunAsPPL" /t REG_DWORD /d "00000001" /f
验证LSA是否以保护模式启动,查看系统日志,事件id为12-LSASS.exe作为受保护的进程启动:
在开启LSA Protection时,mimikatz运行 sekurlsa::logonpasswords会报错 “ERROR kuhl_m_sekurlsa_acquireLSA;Handle on memery”
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords
mimikatz 运行 lsadump :: sam 从磁盘上的SAM读取凭据,可成功pypass LSA Protection,读取到用户哈希
mimikatz # privilege::debug
mimikatz # token::whoami
mimikatz # token::elevate
mimikatz # lsadump::sam
mimikatz其中的mimidrv.sys驱动程序,可从lsass.exe进程中删除LSA保护,成功pypass LSA Protection。
mimikatz # privilege::debug
mimikatz # !+
mimikatz # !processprotect /process:lsass.exe /remove
在Windows 10和Windows Server 2016中,Microsoft启用Credential Guard(凭据防护),使用基于虚拟化技术来保护和隔离lsass进程,以保护凭证。启用Credential Guard后,lsass包含2个进程:正常LSA进程和隔离LSA进程(在VSM中运行)。
测试环境:Windows 10 X64
可以使用组策略启用Windows Defender凭据保护:
在组策略管理控制台中,在”计算机配置” -> “管理模板” -> “系统” -> “Device Guard”,打开”打开基于虚拟化的安全”,选择”已启用”;
在”选择平台安全级别”框中,选择”安全启动”或”安全启动和DMA保护”;
在”凭据保护配置”框中,选择”使用UEFI锁启用”。如果希望能够远程关闭Windows Defender Credential Guard,选择”无锁启用”。
运行gpupdate /force 强制执行组策略
验证Windows Defender Credential Guard是否运行:
输入msinfo32.exe,在 ”系统摘要”-> ”已配置基于虚拟化的安全服务”处,可看到显示”Credential Guard”
在开启Credential Guard时 mimikatz运行 sekurlsa::logonpasswords,经测试,可以抓到部分用户哈希,但是存在缺陷:1)抓取到的用户不全,有遗漏 2)抓不到密码明文
mimikatz # privilege::debug
mimikatz # sekurlsa::logonpasswords
只抓取其中一个用户lltest的哈希,缺失了用户lltest2,并且没有了之前的明文:
mimikatz 运行 lsadump :: sam 从磁盘上的SAM读取凭据,可成功bypass Credential Guard,读取到全部的用户哈希
mimikatz # privilege::debug
mimikatz # token::whoami
mimikatz # token::elevate
mimikatz # lsadump::sam
新增抓到了用户lltest2的哈希:
SSP是参与用户身份验证的Microsoft软件包,如在用户登录时被调用,并接收该用户的凭据。在系统启动时SSP会被加载到进程lsass.exe中。
Mimikatz可通过内存安装自定义的ssp,修改lsass进程的内存,实现从lsass进程中提取凭据,mimikatz执行misc::memssp后,如果再输入了新的凭据(如用户锁屏后重新登录),将会在c:\windows\system32下生成文件mimilsa.log,其中保存有用户明文密码。
mimikatz # privilege::debug
mimikatz # misc::memssp
锁屏后,重新登陆,成功记录到用户密码明文:
补充:此外 还可以尝试mimikatz的 lsadump::secrets 从注册表中获取syskey信息来解密、以及PwDump7 、QuarksPwDump等工具来bypass LSA Protection和Credential Guard。
https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/configuring-additional-lsa-protection
https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage
https://blog.nviso.be/2018/01/09/windows-credential-guard-mimikatz/
https://medium.com/red-teaming-with-a-blue-team-mentaility/poking-around-with-2-lsass-protection-options-880590a72b1a
https://blogs.jpcert.or.jp/en/2016/10/verification-of-ad9d.html