AMSI 绕过
AMSI 绕过 是什么?
AMSI 绕过禁用、修补或规避 Windows AMSI(反恶意软件扫描接口)的一类技术,使脚本和内存载荷不被杀毒引擎扫描。
AMSI(Antimalware Scan Interface,反恶意软件扫描接口)于 2015 年随 Windows 10 引入,允许 PowerShell、JScript、VBScript、.NET 与 Office VBA 将缓冲区提交给已注册的杀毒软件(通过 AmsiScanBuffer/AmsiScanString),在反混淆之后、执行之前进行扫描。由于 AMSI 在进程内运行并与攻击者共享同一地址空间,已经获得代码执行能力的攻击者可以直接对其进行篡改。
常见手法可分为三类。内存打补丁覆盖 amsi.dll!AmsiScanBuffer(或 AmsiOpenSession)的开头字节,使其在不扫描的情况下返回 AMSI_RESULT_CLEAN 或诸如 E_INVALIDARG 的错误。反射将 PowerShell 私有字段 AmsiUtils.amsiInitFailed 翻转为 true——这是 Matt Graeber 在 2016 年的经典单行命令——使会话不再重新初始化 AMSI。混淆/降级将被标记的字符串拆分、用 Base64 编码,或强制使用不存在 AMSI 的 powershell -version 2。其目的是让 Mimikatz、Invoke-Mimikatz 或 Cobalt Strike beacon 等工具在受信任的宿主进程内不被检测地运行。
MITRE ATT&CK 将其归类为 T1562.001(Impair Defenses: Disable or Modify Tools)。Microsoft Defender 自 2017 年起已为字面字符串 amsiInitFailed 建立特征签名,因此攻击者会在运行时对其进行混淆。防御措施:与现代 EDR 联动的 AMSI 提供方、Attack Surface Reduction 规则、PowerShell Constrained Language Mode、AppLocker/WDAC、ScriptBlock 日志,以及对新生成进程中 amsi.dll 的可写+可执行补丁进行告警。
flowchart TD
S[Malicious script / macro] --> H[Host process: PowerShell, WScript, Office]
H --> Q{AMSI tampered?}
Q -->|"Patch AmsiScanBuffer"| C[Force AMSI_RESULT_CLEAN]
Q -->|"Set amsiInitFailed = true"| C
Q -->|"No"| AV[AV/EDR scans deobfuscated buffer]
AV -->|Malicious| B[Blocked + alert]
AV -->|Clean| X[Execute]
C --> X[Payload executes unscanned]● 示例
- 01
在内存中给 AmsiScanBuffer 的开头字节打补丁,使其始终返回 AMSI_RESULT_CLEAN。
- 02
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)。
● 常见问题
AMSI 绕过 是什么?
禁用、修补或规避 Windows AMSI(反恶意软件扫描接口)的一类技术,使脚本和内存载荷不被杀毒引擎扫描。 它属于网络安全的 攻击与威胁 分类。
AMSI 绕过 是什么意思?
禁用、修补或规避 Windows AMSI(反恶意软件扫描接口)的一类技术,使脚本和内存载荷不被杀毒引擎扫描。
如何防御 AMSI 绕过?
针对 AMSI 绕过 的防御通常结合技术控制与运营实践,详见上方完整定义。
AMSI 绕过 还有哪些其他名称?
常见的别称包括: AMSI 规避。