-
-
[翻译]反恶意软件扫描接口(AMSI)如何帮助您防御恶意软件
-
发表于: 2023-8-29 19:35 8650
-
原文标题:How the Antimalware Scan Interface (AMSI) helps you defend against malware
原文地址:bb2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9k6h3q4J5L8W2)9J5k6h3#2A6j5%4u0G2M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8X3g2F1i4K6u0V1N6i4y4Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0r3N6$3W2F1x3K6u0Q4x3V1k6S2L8i4y4A6i4K6u0r3K9r3!0%4i4K6u0V1j5h3#2K6K9g2)9J5k6r3S2W2L8s2m8K6
有关Windows防恶意软件扫描接口(Antimalware Scan Interface,AMSI)的介绍,请参阅Antimalware Scan Interface (AMSI)。
作为应用程序开发人员,您可以积极参与恶意软件防御。具体而言,您可以帮助保护您的客户免受基于动态脚本的恶意软件和非传统网络攻击的威胁。
举个例子,假设您的应用程序支持脚本化:它接受任意脚本,并通过脚本引擎执行。在准备将脚本提供给脚本引擎执行时,您的应用程序可以调用Windows AMSI API来请求对内容进行扫描。这样,您可以在决定是否执行脚本之前,安全地确定脚本是否是恶意的。
即使脚本是在运行时生成的,这一点仍然适用。脚本(无论是恶意的还是其他类型的)可能经过多次解混淆的过程。但最终,您需要向脚本引擎提供明文、未混淆的代码。这就是您调用AMSI API的时机。
下面是AMSI架构的示例,其中您自己的应用程序被表示为其中一个“Other Application”框。
Windows的AMSI接口是开放的,这意味着任何应用程序都可以调用它,任何注册的防恶意软件引擎都可以处理提交给它的内容。
我们不需要将讨论局限于脚本引擎。也许您的应用程序是一款通信应用程序,在向客户显示即时消息之前会对其进行病毒扫描。或者您的软件是一款游戏,在安装插件之前会对其进行验证。使用AMSI有很多机会和场景可供使用。
AMSI应用
让我们来看看AMSI的实际运行情况。在这个例子中,Windows Defender是调用AMSI API的应用程序。但您也可以从自己的应用程序中调用相同的API。
下面是一个使用异或编码技术隐藏意图的脚本示例(无论这个意图是良性的还是恶意的)。为了说明,我们可以假设这个脚本是从互联网上下载的。
为了增加趣味性,我们可以在命令行中手动输入这个脚本,这样就没有实际的文件可供监视。这反映了所谓的“无文件威胁”。这不像简单地扫描磁盘上的文件那样简单。这种威胁可能是一种仅存在于计算机内存中的后门。
下面是在Windows PowerShell中运行该脚本的结果。您将看到,仅通过使用标准的AMSI测试样本签名,Windows Defender就能够在这种复杂的情况下检测到AMSI测试样本。
AMSI 与 JavaScript/VBA 集成
下面的示例描述了另一个示例的端到端流程,其中我们展示了AMSI与Microsoft Office中宏执行的集成。
- 用户收到一个包含(恶意)宏的文档,该宏通过使用混淆、密码保护文件或其他技术来规避静态防病毒软件的扫描。
- 然后,用户打开包含(恶意)宏的文档。如果文档在受保护视图中打开,则用户点击“启用编辑”以退出受保护视图。
- 用户点击“启用宏”以允许宏运行。
- 当宏运行时,VBA运行时使用循环缓冲区来记录与调用Win32、COM和VBA API相关的数据和参数。
- 当观察到特定的被认为是高风险的Win32或COM API(也称为触发器)[2]时,宏执行被停止,并且循环缓冲区的内容被传递给AMSI。
- 注册的AMSI反恶意软件服务提供商会回复一个判决,以指示宏行为是否恶意。
- 如果行为是非恶意的,则宏继续执行。
- 否则,如果行为是恶意的,则Microsoft Office会响应警报[3]并关闭会话,而防病毒软件可以对文件进行隔离处理。
这对你来说意味着什么?
对于Windows用户来说,任何使用混淆和规避技术的恶意软件都会在Windows 10内置的脚本宿主中被自动进行比以往更深入的检查,提供额外的保护层级。
作为应用程序开发人员,如果您希望从(并保护您的客户免受)潜在恶意内容的额外扫描和分析中受益,请考虑让您的应用程序调用Windows AMSI接口。
赞赏
- Android主流的污点分析工具 1664
- [翻译]“过滤-静音”操作:调查EDR内部通信 12573
- [翻译]Windows授权指南 6294
- [翻译]利用Android WebView漏洞 8309
- [翻译]伪造调用堆栈以混淆EDR 12335