前几天看到了老外一篇讲 mimikatz 防护的文章,感受行文思路还不错,可是内容稍有不足,国内也有一篇翻译,可是只是照着错误翻译的,因此就萌生了把那篇优秀文章,翻译复现,并加入其它一些内容,本文只是抛砖引玉,文中有错误的话,欢迎吐槽。程序员
mimikatz 在内网渗透中是个颇有用的工具。它可能让攻击者从内存中抓到明文密码。你们都知道这个工具很厉害,微软确定也知道了,因此就搞了一些安全防御机制让 mimikatz 抓不到密码。可是在 win2008 以前的系统上仍是能抓到密码的。通常状况下,只要有本地管理员权限就能从内存中抓出密码。一般抓到密码以后就能够进行横向移动和提权。windows
在 windows 里,调试权限能够用来调试进程,甚至是调试内核。对于 mimikatz 来讲,一般套路来讲,他想去读取内存就得获取调试权限,而后去打开进程。默认状况下,本地管理员组是由这个权限的。可是,除非管理员是个程序员,通常他应该用不到这种权限。缓存
本地安全策略是默认给管理员组权限的。sass
然而,域的默认组策略在这一项是没有定义的。
安全
按照 windows 策略的效力位阶,最终是管理员组拥有该权限。
dom
补充下效力位阶:ide
默认状况下,多条策略不冲突的状况下,多条策略是合并的关系;若是冲突的话,优先级高的适用,优先级从低到高为local policy(本地)->site policy(站点)->domain policy(域)->ou policy(组织单元)
默认状况下,成功取得调试权限。工具
把拥有调试权限的组设置为空。注销再次登录。
url
运行 mimikatz,获取调试权限失败。
spa
WDigest 协议早在 xp 时代就已经引入了。当时这个协议设计出来是把明文密码存在 lsass 里为了 http 认证的。默认在 win2008 以前是默认启用的。那么攻击者就能从中获取到明文。
可是在 win2008 以后的系统上,默认是关闭的。若是在 win2008 以前的系统上打了 KB2871997 补丁,那么就能够去启用或者禁用 WDigest,配置以下键值:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest
UseLogonCredential 值设置为 0, WDigest 不把凭证缓存在内存;UseLogonCredential 值设置为 1, WDigest 就把凭证缓存在内存。
启用缓存,直接抓明文,很舒服。
关了缓存以后,重启再抓,什么东西也没抓到。
Domain Cached Credentials 简称 DDC,也叫 mscache。有两个版本,XP/2003 年代的叫第一代,Vasta/2008 以后的是第二代。
计算机在加入域以后就得经过 kerberos 进行认证,经过 kerberos 认证就得有域控的参与,可是若是域成员暂时没法访问到域控的话,岂不是没法认证了?域凭证缓存就是为了解决这个问题的。若是暂时访问不到域控,windows 就尝试使用本机缓存的凭证进行认证,默认缓存十条。
缓存位置(默认本地管理员也没有权限访问):
HKEY_LOCAL_MACHINE\SECURITY\Cache
修改组策略缓存条数为0,即为不缓存。
默认配置缓存 10 条。登录本地管理员,提权到 system 权限,而后运行 mimikatz,成功抓到 mscachev2。
设置缓存数为 0,停掉域控,而后再登录域帐号。域成员发现没法登录了。
登录本地管理员帐号,提取到 system,而后什么也没抓到。
受保护的用户组,能够用来让像本地管理员这样的高权限用户只能经过 kerberos 来认 证(真是六的一比)。这是在 win2012 以后引入的一个新的安全组(win2008 以前的系统打了 KB2871997 补丁也会增长这个安全组)。来防止明文存储在内存中和 ntlm hash 泄露(由于是经过 kerberos 认证因此也就不会泄露 net ntlm hash 了)。这个配置起来比较简单。把想要保护的用户加入这个组就好了(因为本机硬件限制,无法复现了,跑一个 win2016,再跑一个 win10 就已经卡的不行了)。
受限管理员模式,反正就是一种安全措施,让你的帐户不暴露在目标系统里。在 win8.1/win2012r2(切记是 R2)引入。win7/win2008 想用这个功能就得打 KB287199七、KB2973351。这项功能的使用须要客户端和服务端相互配合。在服务端开启的方法是在注册表添加以下键值。
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
右键->关于,查看下客户端的版本是否是 rdp8.1 版本。
受限管理员模式能够直接用当前登陆凭据进行登陆,因此这“始终要求凭据”的勾确定不能勾。
sekurlsa::pth /user:<username> /domain:<comptername or ip> /ntlm:<ntlm hash> "/run:mstsc.exe /restrictedadmin"
domain 位置用计算机名或者ip皆可。(须要管理员权限来获取 debug 权限)
一路肯定下去就 OK 了。
成功把域控上的管理员顶了。
顺道抓包看一下貌似只有RDP的流量。
一、禁止调试权限对获取 system 的攻击者来讲没有任何做用。
二、WDigest 默认是禁用的,可是咱们手动打开,挖个坑等人跳。
三、mscache 目前貌似只能用 hashcat 来破解,破出明文再利用。
四、Protected Users Group 须要再研究研究,等电脑配置好了再说 23333。
五、Restricted Admin Mode下pth 攻击只能适用于特定版本,限制仍是比较多的,若是限制比较狠的内网(把135和445的流量都禁了),这个算是个突破手法吧。
https://labs.portcullis.co.uk/tools/freerdp-pth/
https://blogs.technet.microsoft.com/kfalde/2013/08/14/restricted-admin-mode-for-rdp-in-windows-8-1-2012-r2/
http://wwwtt0401.blog.163.com/blog/static/361493062012010114020272/
https://medium.com/blue-team/preventing-mimikatz-attacks-ed283e7ebdd5