Antirus 文件扫描实时检查和 AMSI 验证

问题描述

我想直接在内存文件中扫描恶意软件内容,我想知道哪种方法最好。

我负责改进我们在 .net core 和 Angular 中开发的 Web 应用程序的网站安全策略

我阅读了 Owasp 建议,其中之一是扫描文件中的恶意软件 我确定了两种扫描文件方法:从云端调用第三方 API 或调用 AMSI 接口。我不建议通过互联网致电第三方,因为客户希望在本地进行验证。

什么是 AMSI:

Windows 反恶意软件扫描接口 (AMSI) 是一种通用接口标准,可让您的应用程序和服务与机器上的任何反恶意软件产品集成。 AMSI 为您的最终用户及其数据、应用程序和工作负载提供增强的恶意软件保护。 Windows AMSI 界面已打开。这意味着任何应用程序都可以调用它;任何注册的反恶意软件引擎都可以处理提交给它的内容

我选择从 .net core 调用 AMSI 接口来分析恶意软件内容的 http 请求,但我的测试在某些安装了赛门铁克端点保护作为 AMSI 的防病毒提供商和订阅者的服务器上不起作用。 AMSI 似乎被绕过了。

当我使用 eicar 标准内容测试对 AMSI 的调用时,即使我发布了包含恶意软件内容的帖子,AMSI 也会返回结果,就好像没有检测到恶意软件一样。这就是 AMSI 似乎被绕过的原因。

你知道我能做些什么来修复它吗?为什么会绕过 AMSI?我应该检查或考虑什么?

开发一个 Windows 服务来扫描队列中的文件并运行 .bat 以便向防病毒程序发出扫描文件的命令会更好吗?有没有可以本地安装的第三方web api?

解决方法

我也一直在研究用于 .NET 的 AV 扫描 API,但似乎没有太多可用的 API。 AMSI 是一个新标准(从 Win10 开始),但似乎仅适用于“无文件扫描”(即字符串和 blob)。这是一篇带有 .NET 库的不错的文章: Using Windows Antimalware Scan Interface in .NET

我还发现了一个相当活跃的开源扫描器: ClamAV 和 .NET 中的一个库来扫描内存(虽然从 2017 年开始已经很老了): ClamAV.Managed

每个商业企业级 AV 都有某种 Web API,但没有标准 - 所以每个人都需要单独开发...

我已经尝试了排队和手动运行 CLI AV 的方法——在我的例子中是 Windows Defender——但扫描一个文件平均需要 2 分钟以上(可能对你的用例来说已经足够了)。主要的好处是它可以是通用的并且支持任何具有 CLI 的 AV - 但在控制台中排队和运行也是一个主要的安全(和内存泄漏)风险(更不用说运行起来会很棘手/昂贵在像 Azure AppService 这样的云托管实例中)。

令人惊讶的是,到 2021 年,我们仍然没有 AV 扫描的标准......

,

看看发布的新更新:

https://techdocs.broadcom.com/us/en/symantec-security-software/endpoint-security-and-management/endpoint-protection/all/release-notes/Whats-new-for-Symantec-Endpoint-Protection-14_3-.html