使用AMSI监控powershell

一、AMSI原理

amsi(Windows Antimalware Scan Interface )是win10上微软引入的针对脚本检测的能力,可以检测阻断恶意powershell、js、vbs、vba等脚本

https://learn.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-portal

https://learn.microsoft.com/en-us/windows/win32/amsi/how-amsi-helps

安全开发者可以注册amsi来对脚本内容进行监控

https://github.com/microsoft/Windows-classic-samples/tree/main/Samples/AmsiProvider 

比如我们可以看一个office宏上的amsi回调例子,VBE7.dll通过amsi!AmsiScanString进行宏脚本扫描,最后可以调用到我们的AmsiProvider脚本中

二、AMSI绕过

AMSI绕过的代码网上非常多,这里简单列举一下:

2.1 常见的就是powershell降级,powershell在低版本上不支持amsi,所以常见的使用powershell 2.0版本来执行脚本,amsi就无法获取到脚本内容

powershell -version 2

2.2 AMSI patch,对于AMSI的扫描函数AmsiScanBuffer进行patch,绕过AMSI的扫描

2.3 删除 HKLM\Software\Microsoft\AMSI 中的 AMSI Provider 注册表项禁用AMSI

2.4 禁用amsi 将HKCU\Software\Microsoft\Windows Script\Settings\AmsiEnable的表项值置为0

2.5 amsi.dll劫持,C:\Windows\System32\WindowsPowerShell\v1.0目录下放一个amsi.dll文件

 

三、powershell中AMSI反绕过

对于amsi比较常见的绕过方式,我们可以手动hook powershell中的函数来获取脚本内容

对于powershell 2.0,我们可以hook System.Management.Automationh.CommandProcessorBase:DoCoplete()方法

通过ScriptBlock.Token.Script和ScriptBlock.Token.File可以拿到脚本内容(命令)和脚本路径

 对于高版本powershell,可以hook System.Management.Automation.AmsiUtils::ScanContent,该API可以直接拿到等同于amsi::AmsiScanBuffer回调的结果

hook System.Management.Automation.CompiledScriptBlockData::Compile(),拿到编译的脚本

 hook Microsoft.PowerShell.Commands.InvokeExpressionCommand::ProcessRecord() 来记录混淆的脚本

 

 通过我们自己的注入模块,可以直接挂钩系统.NET模块拿到powershell数据,不需要依赖系统的amsi.dll进行回调,避免了大众低成本的绕过方式,提高对抗成本。

 

 

C:\Windows\System32\WindowsPowerShell\v1.0

posted on   ciyze0101  阅读(85)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示