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 脚本的环境。

环境配置步骤

  1. 安装 Windows Subsystem for Linux (WSL)
  • 打开 PowerShell 以管理员身份运行,执行以下命令:
  • <pre><code class="language-shell"> wsl --install `

  • 安装完成后,重启系统。
  1. 配置 Ruby 环境
  • 在 WSL 中安装 Ruby:
  • `shell sudo apt update sudo apt install ruby-full `

  • 确保 Ruby 安装成功:
  • `shell ruby -v `

  1. 准备 Shell 环境
  • 在 WSL 中可以直接使用 Shell 环境。
  • 安装基本的工具:
  • `shell sudo apt install build-essential `

  1. 安装并配置 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 之后,防御者需要采取相应的措施来检测和防御这类攻击。在这一节中,我们将探讨一些实用的检测和防御策略。

检测策略

  1. 启用高级日志记录
  • 确保在系统上启用了详细的 PowerShell 日志记录,特别是模块加载和脚本阻止事件。
  • 使用以下命令启用详细日志记录:
  • `shell Set-PSDebug -Trace 2 `

  1. 监控内存修改行为
  • 使用系统监视工具,如 Sysinternals 的 Process Monitor,检测对内存的可疑写入操作。
  • 针对 AMSI 内存地址的修改行为进行特别关注。

防御措施

  1. 保持系统及安全软件的最新状态
  • 确保 Windows 系统和所有安全软件始终保持最新,防止已知漏洞被利用。
  1. 使用应用程序白名单
  • 通过配置应用程序白名单,限制未授权的应用程序和脚本执行。
  1. 教育和培训
  • 定期对员工进行安全意识培训,识别和防范社会工程攻击。

0x05 红队经验之谈

作为一名经验丰富的红队成员,我深知攻防双方的博弈永无止境。在面对 AMSI 这样的防御机制时,攻击者必须不断创新,而防御者则需要提高检测和响应能力。

个人建议

  • 多平台测试:在不同版本的 Windows 环境中测试你的绕过技术,了解其局限性。
  • 持续学习:保持对新漏洞和技术的敏感性,从开源社区和安全会议中获取新知。
  • 道德操守:始终在合法授权的范围内进行测试,以提升整体网络安全水平。

通过本文的分享,我希望能帮助你更好地理解 AMSI 及其绕过技术,提升攻防对抗的实战水平。愿我们共同成长,在安全的征途上不断前行。