mimikatz防御方式

  1. 限制使用Debug权限
  2. 限制使用WDigest协议
  3. LSASS进程保护
  4. 清除凭据缓存
  5. Protected Users 安全组

限制使用Debug权限

当我们限制了Debug之后,就没有权限与lsass.exe进程进行交互读取其中存储的明文密码和hash。

正常情况下,使用mimikatz进行提权:

1
2
MIMIKATZ # privilege::debug
Privilege '20' OK

配置如下:
本地安全策略–>本地策略–>用户权限分配–>调试程序

域内可以将不需要执行debug的权限删除掉,这里我将本地administrator用户权限删除,并重新启动计算机。

利用mimikatz执行提权,权限提升失败

使用procdump离线读取,失败

lsass进程转储文件,提示无权限

限制使用WDigest协议

mimikatz可以通过wdigest协议读取存储在lsass进程中的明文密码:

Windows 8.1/Windows 10/Windows Server 2012 R2和Windows Server 2016已经默认禁用此协议,但是早期的操作系统如Windows 7和Windows Server 2008等需要安装补丁 KB2871997,安装完补丁后需确认 WDigest已经在注册表中被禁用,注册表项的位置为:

1
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest

将Negotiate和UseLogonCredential的值都设置成0,若没有需要创建,重启计算机之后再次尝试读取密码,发现无法抓取到hash。

批处理命令为:

1
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f

LSASS进程保护

windows server 2012 / Windows 8.1及以后的版本操作系统已经升级了额外的LSA防护措施,来阻止不信任的进程读取LSASS进程内存或注入代码。

首先,攻击者可通过一下mimikatz命令抓取主机密码:

1
sekurlsa::logonpasswords

为了避免密码被抓取,我们可以启用LSA进程守护,具体操作如下:

1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA

将runasppl值设置为1,重启计算机

清除凭据缓存

默认情况下,用户登录系统需要使用最近几次的凭证缓存进行身份验证,存放路径如下:

1
HKEY_LOCAL_MACHINE\SECURITY\Cache

我们可以使用mimikatz抓取缓存凭证:

1
2
3
privilege::debug
token::elevate
lsadump::cache

会列出最近几次缓存用户的mscache hash,这样我们可以使用mimikatz更改该hash或者爆破。

1
2
#更改密码为123456
lsadump::cache /user:jack ntlm:32ed87bdb5fdc5e9cba88547376818d4

修改他后,在域控制器不可用时,我们可以哟弄jack/123456进行登陆,估计实战意义不大。

默认情况下,windows会保存进10次认证的密码,配置如下:

1
本地安全策略-->本地策略-->安全选项-->交互式登陆:之前登陆到缓存的次数(域控制器不可用时)

我们将缓存此时修改成0,可以避免缓存被抓取

Protected Users 安全组

限制该组用户只能使用kerberos进行认证,可防止hash和明文被抓取。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 sher10cksec@foxmail.com

文章标题:mimikatz防御方式

本文作者:sher10ck

发布时间:2021-01-06, 16:02:31

最后更新:2021-01-07, 14:53:26

原始链接:http://sherlocz.github.io/2021/01/06/how-to-prevent-mimikatz-attack/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录