绕过Windows Defender的PowerShell Empire
作者:Carrie Roberts (2020年2月12日更新)
注意: 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运行以下命令:
|
|
默认情况下,SharpGen会将PowerKatz捆绑到最终可执行文件中,这仍会被Windows Defender拦截。由于我们的目标不是运行Mimikatz,因此需要编辑SharpGen/Resources中的resources.yml文件,将所有与PowerKatz相关的条目的"enabled"字段设置为false:
确保resources.yml文件中每个"Enabled"字段都设置为false后,即可构建SharpGen DLL。
|
|
上述命令将生成一个bin/Release/netcoreapp2.1目录,其中包含下一步所需的SharpGen.dll文件。
作为一个简单示例,我们先构建一个使用"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字符串复制并粘贴到以下命令中:
|
|
将<BASE64_LAUNCHER>替换为Empire的multi/launcher生成的base64字符串输出(即"powershell -noP -sta -w 1 -enc"之后的内容,包括末尾的任何等号)。
Launcher.exe将位于Output目录中。将其移动到受害系统上,即可成功绕过Windows Defender!
然而,在企业环境中,这可能不是唯一需要绕过的防御措施。例如,可能存在检查网络流量并中断通信的网络防御。以下是一些成功技巧:
- 使用HTTPS通信通过端口443,并采用有效(非自签名)证书。有关如何在Empire中设置此功能的更多信息在此处。
- 启动Empire侦听器时更改任何默认值(如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 提供实时/虚拟和点播课程!