0x01 破解架构的秘密
AMSI(Antimalware Scan Interface)是微软在Windows 10中引入的一项安全机制,它的主要目的是提供一个通用的、轻量级的接口,让应用程序能够将脚本和代码片段传送给反恶意软件扫描引擎进行检测。简单来说,它充当了恶意软件检测的“防火墙”,但任何防御机制都有其薄弱环节。对于攻击者而言,了解AMSI的工作原理是绕过它的第一步。
AMSI如何运作?

AMSI在应用程序和反恶意软件之间创建了一个桥梁。它允许应用程序在执行脚本之前,将这些脚本发送给注册的反恶意软件产品进行扫描。此过程主要通过以下几个步骤:
- 脚本拦截:应用程序会截获即将执行的脚本。
- 接口调用:应用程序调用AMSI API,将脚本内容传递给AMSI。
- 扫描和返回:AMSI将内容提交给注册的反恶意软件引擎进行扫描,然后返回结果。
这种设计使得AMSI能够检测到常见的恶意脚本,例如PowerShell和VBScript。但是,这也成为攻击者的目标,正是因为它的普遍性和对脚本的全权扫描。
攻击模拟环境搭建
为了在实验室环境中深入研究AMSI绕过技术,首先需要搭建一个易于控制的测试环境。这里推荐使用VirtualBox或VMware Workstation来部署一个Windows 10虚拟机,确保系统中安装有最新版本的PowerShell和Windows Defender。
环境准备步骤:
- 虚拟机创建:在VirtualBox或VMware中创建Windows 10虚拟机。
- 系统更新:确保虚拟机上的操作系统和所有安全软件均为最新版本。
- 工具安装:安装PowerShell、Metasploit等常用测试工具,以便进行攻击模拟。
- 网络配置:将虚拟机连接到隔离网络,以确保测试过程中不会影响其他设备。

通过这种方式设置的环境,可以帮助我们在一个可控的环境中测试AMSI的绕过方法,并确保实验的安全性。
Payload构造的艺术
为了绕过AMSI,我们需要构造一个能躲过其检测的Payload。这里介绍一种使用Go语言编写的简单Payload,它能够利用内存操作来规避AMSI的扫描。
POC代码实现
下面是一段使用Go语言编写的内存操作代码,通过修改内存中的AMSI相关标志来绕过检测:
<pre><code class="language-go">package main
import ( "fmt" "syscall" "unsafe" )
func main() { // 获取kernel32.dll模块句柄 kernel32 := syscall.MustLoadDLL("kernel32.dll") // 获取GetProcAddress函数 procAddress := kernel32.MustFindProc("GetProcAddress")

// 获取AMSI的句柄 amsiHandle, _, _ := procAddress.Call(uintptr(syscall.MustLoadDLL("amsi.dll").Handle), uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("AMSIInitialize")))) fmt.Printf("AMSI Handle: %x\n", amsiHandle)
// 伪造的绕过步骤,正式场合请勿应用 if amsiHandle != 0 { // 在这里模拟修改内存标志来绕过AMSI fmt.Println("AMSI bypass achieved!") } else { fmt.Println("Could not bypass AMSI.") } }</code></pre>
代码解析:
- 这里我们通过
syscall包获取了相关DLL和函数的地址。 AMSIInitialize函数的地址被获取并输出,这在真实的攻击环境中可用于修改AMSI的内存标志。- 实际的绕过步骤需要更复杂的内存操作,这只是一个概念样例。
实战中的绕过技巧
在攻击中,绕过AMSI的方法多种多样。以下是几种常见的技巧:
内存标志修改
通过修改内存中的AMSI相关标志,可以使其对特定的代码和脚本失去检测能力。这通常需要深入的内存调试技巧,以及对Windows内存管理的深入理解。
动态代码生成
利用PowerShell或其他脚本语言动态生成代码,使AMSI难以对其进行静态分析和检测。这种方法通常结合字符串混淆和代码加壳技术使用。
AMSI Hooking
通过挂钩AMSI的函数调用,可以在脚本被提交给AMSI前对其进行拦截和修改。这种方法需要对Windows API有深入的了解,并且需要使用诸如Metasploit等工具来实现。
混合攻击技术
结合社会工程学攻击,使用诱饵文件、钓鱼邮件等方式让目标执行经过精心设计的脚本。这种攻击通常与其他绕过方法结合使用,以提高成功率。
防御与检测策略
虽然AMSI是一项强大的安全特性,但针对其绕过攻击,安全人员可以采取以下举措进行防御:
加强内存监控
利用内存监控工具来检测异常的内存修改行为。通过启用高级的EDR(Endpoint Detection and Response)解决方案,可以对系统内存的变化进行实时监控。
策略更新
及时更新安全策略,并确保所有反恶意软件引擎都具有最新的签名库和扫描规则。通过定期的安全策略审核,可以发现是否有新的绕过方法出现。
行为分析
引入行为分析技术,通过检测异常行为来补充静态扫描的不足。行为分析可以识别出攻击者的意图,并在攻击发生时及时响应。
用户教育
提高用户安全意识,通过定期的安全培训和模拟攻击演练,让用户了解攻击者的常见手法,从而避免成为攻击目标。
经验与总结
作为一名安全技术爱好者,参加CTF比赛使我深刻认识到AMSI绕过技术的复杂性和多样性。在比赛中,我学会了如何结合不同的技术来实现目标,并认识到攻击与防御之间的永恒斗争。在未来的研究中,我会继续探索更高效的绕过方法,并帮助开发更强大的检测机制,以更好地保护我们的数字世界。
通过这篇文章,我希望能为安全研究人员提供一个深入了解AMSI绕过技术的视角,同时提醒大家在进行安全测试时一定要在合法授权的环境下进行。
