0x01 AMSI的架构解密
在我们深入研究绕过AMSI(Anti-Malware Scan Interface)的方法之前,有必要了解其工作原理和系统架构。AMSI 是微软在 Windows 10 中引入的一个强大的防御机制,旨在提供对内存中可疑脚本的实时扫描能力。它允许应用程序和服务请求安全产品扫描内容,以检测和防止恶意软件执行。

AMSI 的工作机制
AMSI 是一个通用接口,能够与任何支持它的反恶意软件产品进行交互。它的设计是为了检测和拦截在PowerShell、VBScript和JavaScript脚本中执行的恶意代码。AMSI 通过对脚本内容进行实时分析,将其传递给反恶意软件引擎,以进行详细的扫描和评估。
- 脚本拦截:当脚本执行时,AMSI 会捕获该脚本的内容。
- 调用扫描:AMSI 将捕获的脚本内容发送到安全程序进行扫描。
- 结果处理:根据反恶意软件的扫描结果,AMSI 可以阻止脚本的执行,或者允许其继续运行。
了解了以上架构,让我们进入这个机制的弱点,看看攻击者如何利用这些漏洞来实现绕过。
0x02 实战环境搭建指南
要想有效地进行AMSI绕过研究,你需要一个能够进行脚本执行和调试的实验环境。在本节中,我们将创建一个基本的测试环境,帮助你进行实战演练。
所需工具和软件
- Windows 10 环境:确保系统已更新到最新补丁。
- Ruby 和 Shell 环境:用于编写和测试绕过脚本。
- PowerShell 5.1 或更高版本:AMSI 集成于 PowerShell 5.0 及以上版本。
- Visual Studio Code:用于代码编写和调试。
- Cygwin 或 WSL:在 Windows 下运行 Shell 脚本的环境。
环境配置步骤
- 安装 Windows Subsystem for Linux (WSL):
- 打开 PowerShell 以管理员身份运行,执行以下命令:
- 安装完成后,重启系统。
<pre><code class="language-shell"> wsl --install `
- 配置 Ruby 环境:
- 在 WSL 中安装 Ruby:
- 确保 Ruby 安装成功:
`shell sudo apt update sudo apt install ruby-full `
`shell ruby -v `
- 准备 Shell 环境:
- 在 WSL 中可以直接使用 Shell 环境。
- 安装基本的工具:
`shell sudo apt install build-essential `
- 安装并配置 Visual Studio Code:
- 下载并安装 Visual Studio Code。
- 在 VS Code 中安装 PowerShell 和 Ruby 插件,便于代码编写和调试。
配置完成后,我们便可以利用这个环境进行 AMSI 绕过的实战操作。
0x03 绕过 AM之术:技术揭秘
绕过 AMSI 的技术多种多样,攻击者通常通过操控脚本内容或修改内存中的 AMSI 行为来实现。以下将介绍几种常见的绕过技巧,并附上相关的代码示例。
方法一:字符串混淆
通过对恶意脚本进行字符串混淆,可以在不改变执行结果的情况下避开 AMSI 的检测。
</code></pre>ruby
Ruby 示例:简单的字符串混淆
payload = "calc.exe" obfuscated_payload = payload.bytes.map { |b| (b + 1).chr }.join
执行时再解密
exec(obfuscated_payload.bytes.map { |b| (b - 1).chr }.join) <pre><code> 分析:通过对字符串进行简单的字节偏移,避免了 AMSI 对明文字符串的检测。
方法二:通过内存修改实现绕过
直接修改内存中 AMSI 的行为,这种方式虽然激进,但在某些场景下非常有效。
</code></pre>ruby
示例:通过 FFI 调用修改内存
require 'ffi'
module AMSIBypass extend FFI::Library ffi_lib FFI::Library::LIBC
attach_function :memcpy, [:pointer, :pointer, :size_t], :void
def self.bypass
伪代码示例,实际实现需要特定的系统调用
amsi_addr = FFI::Pointer.new(:char, 0xINSERT_AMSI_ADDRESS_HERE) patch = FFI::MemoryPointer.from_string("\xC3") # Patch with 'ret' instruction memcpy(amsi_addr, patch, patch.size) end end
AMSIBypass.bypass `
分析:通过 Ruby FFI(Foreign Function Interface)调用系统底层函数,直接修改内存中函数的返回值。
这两种方法只是众多绕过技术中的冰山一角,要想彻底理解其原理,深入的逆向工程能力是不可或缺的。
0x04 检测与防御的智慧
理解攻击者如何绕过 AMSI 之后,防御者需要采取相应的措施来检测和防御这类攻击。在这一节中,我们将探讨一些实用的检测和防御策略。
检测策略
- 启用高级日志记录:
- 确保在系统上启用了详细的 PowerShell 日志记录,特别是模块加载和脚本阻止事件。
- 使用以下命令启用详细日志记录:
`shell Set-PSDebug -Trace 2 `
- 监控内存修改行为:
- 使用系统监视工具,如 Sysinternals 的 Process Monitor,检测对内存的可疑写入操作。
- 针对 AMSI 内存地址的修改行为进行特别关注。
防御措施
- 保持系统及安全软件的最新状态:
- 确保 Windows 系统和所有安全软件始终保持最新,防止已知漏洞被利用。
- 使用应用程序白名单:
- 通过配置应用程序白名单,限制未授权的应用程序和脚本执行。
- 教育和培训:
- 定期对员工进行安全意识培训,识别和防范社会工程攻击。
0x05 红队经验之谈
作为一名经验丰富的红队成员,我深知攻防双方的博弈永无止境。在面对 AMSI 这样的防御机制时,攻击者必须不断创新,而防御者则需要提高检测和响应能力。
个人建议:
- 多平台测试:在不同版本的 Windows 环境中测试你的绕过技术,了解其局限性。
- 持续学习:保持对新漏洞和技术的敏感性,从开源社区和安全会议中获取新知。
- 道德操守:始终在合法授权的范围内进行测试,以提升整体网络安全水平。
通过本文的分享,我希望能帮助你更好地理解 AMSI 及其绕过技术,提升攻防对抗的实战水平。愿我们共同成长,在安全的征途上不断前行。