绕过AMSI实现免杀的研究和思路

本文介绍了AMSI(反恶意软件扫描接口)的工作原理及其在Windows中的应用,探讨了几种绕过AMSI检测的方法,包括dll劫持、降低powershell版本、混淆、利用反射修改内存中AmsiScanBuffer方法的检测长度以及内存补丁技术。每种方法都有其优缺点和实施细节,展示了黑客与安全防护之间的猫鼠游戏。
摘要由CSDN通过智能技术生成

何为AMSI

Antimalware Scan Interface(AMSI)为反恶意软件扫描接口。

微软对他产生的目的做出来描述:

Windows 反恶意软件扫描接口 (AMSI) 是一种通用接口标准,允许您的应用程序和服务与机器上存在的任何反恶意软件产品集成。AMSI 为您的最终用户及其数据、应用程序和工作负载提供增强的恶意软件保护。AMSI 与反恶意软件供应商无关;它旨在支持当今可以集成到应用程序中的反恶意软件产品提供的最常见的恶意软件扫描和保护技术。它支持允许文件和内存或流扫描、内容源 URL/IP 信誉检查和其他技术的调用结构。AMSI 还支持会话的概念,以便反恶意软件供应商可以关联不同的扫描请求。例如,可以将恶意负载的不同片段关联起来做出更明智的决定,广州房评而仅通过孤立地查看这些片段就很难做出决定。

在Windows Server 2016和Win10上已经默认安装并启用。他的本体是一个DLL文件,存在于 c:\windows\system32\amsi.dll。

图片

它提供了通用的标准接口(COM接口、Win32 API)其中的COM接口,是为杀软供应商提供的,方便杀软厂商接入自身针对恶意软件的识别能力。有不少安全厂商已经接入了AMSI的接口。

官方架构图:

图片

目前AMSI功能已集成到Windows 10的这些组件中

•用户帐户控制或 UAC(EXE、COM、MSI 或 ActiveX 安装的提升)•PowerShell(脚本、交互使用和动态代码评估)•Windows 脚本宿主(wscript.exe 和 cscript.exe)•JavaScript 和 VBScript•Office VBA 宏

既然本质上是一个dll,那么就可以看下他的导出函数。

图片

当执行一些敏感字符串时,会发现powershell拒绝执行并报毒。

图片

查看powershell模块会发现加载了amsi.dll

图片

几种绕过的方式

dll劫持

再打开powershell进程时,会加载amsi进程,那么自然的就想到可以通过dll劫持,或者替换等方式来bypass。

dll加载的顺序:

•进程对应的应用程序所在目录•系统目录(通过 GetSystemDirectory 获取)•16位系统目录•Windows目录(通过 GetWindowsDirectory 获取)•当前目录•PATH环境变量中的各个目录

powershell.exe的路径为C:\Windows\System32\WindowsPowerShell\v1.0,百晓生只需要在同目录下置放一个名为amsi.dll的模块。

但是并不是随便一个模块都行,由于已经开启了amsi,如果错误加载会引起powershell崩溃,那么我们也无法执行命令。这里就要导出本来amsi.dll有的导出函数。

比如这里导出函数有个AmsiScanBuffer

图片

然后去msdn去找,文档里面有相关的函数说明并且有参数等等。

图片

#include "pch.h"#include <iostream> extern "C" __declspec(dllexport) void AmsiScanBuffer(HAMSICONTEXT amsiContext,    PVOID buffer, ULONG length, LPCWSTR contentName, HAMSISESSION amsiSession,    AMSI_RESULT * result); void AmsiScanBuffer(HAMSICONTEXT amsiContext, PVOID buffer, ULONG length,    LPCWSTR contentName, HAMSISESSION amsiSession, AMSI_RESULT* result) {
   }

这样一个一个去把导出函数写出。不要去直接include系统文件amsi,这样他那个文件里本来就有相关函数,这样会起冲突,直接把有些结构体粘过来就好了。

typedef struct HAMSICONTEXT {
      DWORD       Signature;          // "AMSI" or 0x49534D41    PWCHAR      AppName;           // set by AmsiInitialize    DWORD       Antimalware;       // set by AmsiInitialize    DWORD       SessionCount;      // increased by AmsiOpenSession} HAMSICONTEXT; typedef struct HAMSISESSION {
  <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值