可以通过注册表开启LSA Protection,注册表位置:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa新建-DWORD(32)值,名称为 RunAsPPL,数值为 00000001,然后重启系统生效。
或者使用命令来完成
REG ADD "HKLMSYSTEMCurrentControlSetControlLsa" /v "RunAsPPL" /t REG_DWORD /d "00000001" /f
重启后再执行mimikatz.exe,发现已经无法获取密码。
此时其实可以从磁盘上的SAM读取凭据,执行
mimikatz # privilege::debug mimikatz # token::whoami mimikatz # token::elevate mimikatz # lsadump::sam
方法4-受限制的管理模式
对于 Windows 2012 R2 和 Windows 8.1 之前的旧操作系统,需要先安装补丁KB2871997。
先在 HKEY_LOCAL_MACHINESystemCurrentControlSetControlLsa 设置RunAsPPL为1然后在 HKEY_LOCAL_MACHINESystemCurrentControlSetControlLsa 设置 DisableRestrictedAdmin为0 , DisableRestrictedAdminOutboundCreds为1。
然后需要在域中强制执行“对远程服务器的凭据限制委派”策略,以确保所有出站RDP会话都使用“RestrictedAdmin”模式,因此才不会泄露凭据。
具体位置是组策略:计算机配置–管理模板–系统–凭据分配–限制向远程服务器分配凭据,选择已启用,但是我的环境里选项一栏中没有看到Require Restricted Admin。
在执行 lsadump::cache时报错,ERROR kuhl_m_lsadump_secrets0rCache:kull_m_registry_RegOpenKeyEx (SECURITY) 0×00000005该错误,是注册表增加了LSA保护所起到的。
方法5-禁用凭证缓存
Domain Cached Credentials 简称 DDC,也叫 mscache。有两个版本,XP/2003 年代的叫第一代,Vasta/2008 之后的是第二代。如果域控制器不可用,那么windows将检查缓存的最后一个密码hash值,这样为以后系统对用户进行身份验证。缓存位置如下:
HKEY_LOCAL_MACHINESECURITYCache在组策略中设置禁用缓存
计算机配置--windows设置--安全设置--本地策略--安全选项 交互式登录:之前登录到缓存的次数(域控制器不可用时) 默认是10,设置为0
注销后再次执行mimikatz,没有读取到任何用户数据。
方法6-受保护的用户组
WindowsServer 2012及更高版本使用了引入了一个名为“Protected Users”的新安全组,其他系统需要安装 KB2871997 补丁才会有。
此组使域管理员能够保护本地管理员等有权限的用户,因为属于该组的任何帐户只能通过Kerberos对域进行身份验证。
这将有助于防止NTLS密码哈希值或LSAS中的纯文本凭据泄露给敏感帐户,这些帐户通常是攻击者的目标。
可以在“Active Directory用户和计算机”中找到“Protected Users”安全组。
在配置之前,使用mimikatz可读取明文密码。
可以通过执行以下PowerShell命令将帐户添加到“受保护的用户”组中:
Add-ADGroupMember –Identity 'Protected Users' –Members administrator