0x01 从战场说起
想象一下,在一次激烈的红队演习中,你的任务是对一家大型金融公司的内部网络进行渗透测试。由于目标环境对PowerShell脚本的依赖程度很高,我们决定利用这一点进行攻击。然而,Windows Defender的高级恶意软件扫描接口(AMSI)似乎是一个不可逾越的障碍。为了成功渗透,我们需要找到一种方法来绕过AMSI的检测。这篇文章将详细讲述如何在这次任务中成功绕过AMSI,并且分享一些关键的技术细节。
0x02 揭秘AMSI的真相
AMSI的本质是一个接口,旨在帮助防御程序检测运行时的恶意内容。它主要被用来扫描脚本语言,比如PowerShell、VBScript、JScript等的内容。当这些脚本被执行时,AMSI会分析其行为,将可疑内容交给反病毒软件进行分析。
AMSI的运作机制
- 拦截与扫描:当脚本执行时,AMSI会截获并扫描其内容。
- 合作防御:AMSI只是一个接口,它的强大能力依赖于集成它的安全软件。
- 实时分析:不同于传统的静态分析,AMSI可以实时检测脚本的运行行为。
在这种机制下,AMSI成为很多攻击者的绊脚石。然而,正如我们将在本文中展示的那样,它并非无法攻破。

0x03 AMSI绕过:实战演示
为了在我们的演习中有效地绕过AMSI,我们选择了一种被动的方式,利用脚本内容的动态修改。下面我们将展示如何在实验环境中重现这一技术:
实验环境搭建
- 操作系统:Windows 10(带有最新的安全补丁)
- Ruby环境:用于编写和执行绕过代码
- PowerShell:用来执行恶意负载
- 目标工具:Windows Defender(启用了AMSI功能)
实战步骤
我们采用了一种简单却非常有效的技术:通过修改内存中的AMSI DLL来绕过检测。这种方法的优点在于不需要修改磁盘文件,从而减少被检测的风险。
<pre><code class="language-ruby"># Ruby代码 - 伪造AMSI返回值
require 'fiddle' require 'fiddle/import'
module AmsiBypass extend Fiddle::Importer
定义目标DLL和函数
dlload 'amsi.dll' extern 'int AmsiScanBuffer(void, void, int, void, void)'
我们要修改的目标函数的地址
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('C') # 修改返回值以假装一切正常 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绕过的技术,同时也提升他们的防御意识。