AMSI(Antivirus Malware Scan Interface)是 Windows 的恶意脚本扫描接口,覆盖 PowerShell 5.0+、VBScript、JScript、Office 宏、.NET 程序集和 WMI。传统杀软只扫磁盘文件,脚本直接在内存执行时看不到;AMSI 在脚本执行前拦截并交给杀软扫描,再决定放行或阻断。
核心链路是应用调用 amsi.dll 的 AmsiScanBuffer(),再转给 Windows Defender 做特征匹配和行为分析。只要 AmsiScanBuffer() 被篡改,整条链就失效。返回码中 0 和 1 表示无威胁,32768 表示检出恶意。
指南给出 7 种绕过手法:内存补丁(改写 AmsiScanBuffer 直接返回成功)、混淆(字符串拼接、Base64、反引号、格式串、字符数组)、反射(把 amsiInitFailed 字段设为 true 或清空 amsiContext)、降级攻击(用 PowerShell 2.0,该版本早于 AMSI)、DLL 劫持(伪造 amsi.dll 让扫描恒返回 clean)、COM 劫持(改注册表 CLSID 指向伪造 DLL)、ETW 补丁(清空 etwProvider 阻止日志)。
防御侧建议分层:移除 PowerShell 2.0、开启约束语言模式、用 AppLocker/WDAC 做白名单;开启 Script Block Logging(EventID 4104),配合 Sysmon 监控 amsi.dll 的异常加载与内存访问,再用 SIEM 关联告警。检测优先级最高的是 PowerShell 2.0 执行、脚本中出现 AmsiUtils 与 amsiInitFailed、以及 amsi.dll 从非 System32 路径加载。
文中还附了动手实验:用 AMSI 测试样本验证基线拦截,执行反射绕过后再测同一段样本,并通过事件日志确认绕过是否留下痕迹。作者强调日志是关键,即使绕过成功也会留痕,防御应以行为而非特征为主。
