0x01 从战场说起

想象一下,在一次激烈的红队演习中,你的任务是对一家大型金融公司的内部网络进行渗透测试。由于目标环境对PowerShell脚本的依赖程度很高,我们决定利用这一点进行攻击。然而,Windows Defender的高级恶意软件扫描接口(AMSI)似乎是一个不可逾越的障碍。为了成功渗透,我们需要找到一种方法来绕过AMSI的检测。这篇文章将详细讲述如何在这次任务中成功绕过AMSI,并且分享一些关键的技术细节。

0x02 揭秘AMSI的真相

AMSI的本质是一个接口,旨在帮助防御程序检测运行时的恶意内容。它主要被用来扫描脚本语言,比如PowerShell、VBScript、JScript等的内容。当这些脚本被执行时,AMSI会分析其行为,将可疑内容交给反病毒软件进行分析。

AMSI的运作机制

  • 拦截与扫描:当脚本执行时,AMSI会截获并扫描其内容。
  • 合作防御:AMSI只是一个接口,它的强大能力依赖于集成它的安全软件。
  • 实时分析:不同于传统的静态分析,AMSI可以实时检测脚本的运行行为。

在这种机制下,AMSI成为很多攻击者的绊脚石。然而,正如我们将在本文中展示的那样,它并非无法攻破。

黑客示意图

0x03 AMSI绕过:实战演示

为了在我们的演习中有效地绕过AMSI,我们选择了一种被动的方式,利用脚本内容的动态修改。下面我们将展示如何在实验环境中重现这一技术:

实验环境搭建

  1. 操作系统:Windows 10(带有最新的安全补丁)
  2. Ruby环境:用于编写和执行绕过代码
  3. PowerShell:用来执行恶意负载
  4. 目标工具:Windows Defender(启用了AMSI功能)

实战步骤

我们采用了一种简单却非常有效的技术:通过修改内存中的AMSI DLL来绕过检测。这种方法的优点在于不需要修改磁盘文件,从而减少被检测的风险。

<pre><code class="language-ruby"># Ruby代码 - 伪造AMSI返回值

require &#039;fiddle&#039; require &#039;fiddle/import&#039;

module AmsiBypass extend Fiddle::Importer

定义目标DLL和函数

dlload &#039;amsi.dll&#039; extern &#039;int AmsiScanBuffer(void, void, int, void, void)&#039;

我们要修改的目标函数的地址

AMSI_RETURN_VALUE_ADDRESS = 0xXXXXXXXX # 通过调试器获取

修改返回值以绕过AMSI

def self.bypass_amsi write_address = AMSI_RETURN_VALUE_ADDRESS Fiddle::Pointer.new(write_address)[0, 1] = [0x00].pack(&#039;C&#039;) # 修改返回值以假装一切正常 end end

执行绕过

AmsiBypass.bypass_amsi</code></pre>

代码解释

  • 动态链接:我们使用Fiddle模块动态加载amsi.dll,通过导入AmsiScanBuffer函数进行操作。
  • 内存修改:通过修改内存中AmsiScanBuffer函数的返回值,将其设置为0,从而绕过AMSI的检测。
  • 实战效果:在我们的演习中,这种方法有效地避开了Windows Defender的检测。

0x04 绕过的艺术:深入技术细节

内存操作的艺术是这种绕过技术的精髓。通过对目标进程内存的精准控制,我们可以实现以下几种绕过方法:

内存注入技术

  • 内存注入:将恶意代码注入到目标进程的内存空间中,避免磁盘操作。
  • API Hooking:通过Hook关键API函数,修改其执行行为。

代码混淆与加密

  • 混淆技术:对脚本进行混淆,使其特征不容易被AMSI识别。
  • 加密解密:通过加密脚本内容,运行时再解密执行。

每一种技术都有其独特的应用场景和优缺点,根据目标环境的特点选择合适的方法是关键。

0x05 侦测与防御的智慧

尽管我们成功地绕过了AMSI,侦测与防御仍然是不可或缺的部分。了解攻击者的思维有助于加强防御。

黑客示意图

检测技术

  • 行为分析:通过检测脚本的执行行为,而非静态内容,来捕捉异常。
  • 内存监控:实时监控进程的内存操作,识别异常的内存修改行为。

防御建议

  • 定期更新:保持安全软件和操作系统的及时更新,以防御已知的绕过方法。
  • 最小权限原则:减少可执行PowerShell脚本的权限,降低攻击面。
  • 多层防护:结合多种检测技术,形成全方位的防御体系。

0x06 终极思考:从攻到守

黑客示意图

在这场演习中,我们通过绕过AMSI成功地完成了任务。然而,作为一名渗透测试工程师,我深知攻防的动态平衡。每一次成功的攻击都提醒我们,没有绝对的安全,只有不断提高的防御水平。

个人经验分享

  • 多思维视角:从攻击者的角度看问题能帮助我们发现防御的弱点。
  • 技术与工具:掌握多种技术和工具,让我们在实战中更加游刃有余。
  • 持续学习:安全领域的发展迅速,持续的学习和实践是保持竞争力的关键。

每一次成功绕过防御的经历,不仅是一次技术的检验,更是对防御机制的挑战和反思。希望通过这篇文章,能够帮助更多的安全研究人员和渗透测试工程师理解和应用AMSI绕过的技术,同时也提升他们的防御意识。