病毒扫描从 Azure Web/Worker 上传的文件角色

Virus Scanning Uploaded files from Azure Web/Worker Role

我们正在设计一个 Azure 网站,允许用户上传内容(MP4、Docx...MSOffice 文件),然后可以访问这些内容。

我们将对某些视频内容进行编码以提供多种不同质量的格式,然后再进行流式传输(使用 Azure Media Services)。

我们需要添加一个中间步骤,以便我们可以扫描上传的文件以查找潜在的病毒风险。 azure(或第三方)是否内置了允许我们在处理内容之前调用 API 来扫描内容的功能?理想情况下,我们正在寻找 API 而不仅仅是 VM 上的后台服务,因此我们可以获得可能用于 Web 或辅助角色的反馈。

快速查看了 Symantec Endpoint 和 Windows Defender,但不确定它们是否提供 API

我已经使用开源 ClamAV 成功完成了这项工作。你没有指定你使用的是什么语言,但因为它是 Azure,我假设是 .Net。

有一个 .Net 包装器应该提供您正在寻找的 API:

https://github.com/tekmaven/nClam

这是一些示例代码(注意: 这是直接从 nClam GitHub 存储库页面复制并在此处复制只是为了防止 link rot )

using System;
using System.Linq;
using nClam;

class Program
{
    static void Main(string[] args)
    {

        var clam = new ClamClient("localhost", 3310);
        var scanResult = clam.ScanFileOnServer("C:\test.txt");  //any file you would like!

        switch(scanResult.Result)
        {
            case ClamScanResults.Clean:
                Console.WriteLine("The file is clean!");
                break;
            case ClamScanResults.VirusDetected:
                Console.WriteLine("Virus Found!");
                Console.WriteLine("Virus name: {0}", scanResult.InfectedFiles.First().VirusName);
                break;
            case ClamScanResults.Error:
                Console.WriteLine("Woah an error occured! Error: {0}", scanResult.RawResult);
                break;
        }
    }
}

还有 API 可用于刷新病毒定义数据库。所有必要的ClamAV文件都可以包含在部署包中,任何配置都可以放入服务启动代码中。

ClamAV 是个好主意,特别是现在 0.99 is about to be released with YARA 规则支持 - 它将使您真正轻松地编写自定义规则并允许 clamav 在今天公开使用大量优秀的 YARA 规则。

另一条途径,有点无耻的堵塞,是查看 scanii.com,它是用于 malware/virus 检测的 SaaS,它与 AWS 和 Azures 集成得很好。

有多种选择可以实现这一点:

首先你可以使用已经提到的ClamAV。 ClamAV 的病毒库并不总是获得最好的报道,但正如其他人指出的那样,它易于使用且可扩展。

您还可以安装商业扫描仪,例如 avg、kaspersky 等。其中许多都带有一个 C API,您可以直接与之对话,尽管从许可观点。

或者,您可以直接调用可执行文件,使用如下方式捕获输出:

var proc = new Process {
    StartInfo = new ProcessStartInfo {
        FileName = "scanner.exe",
        Arguments = "arguments needed",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    }
};
proc.Start();
while (!proc.StandardOutput.EndOfStream) {
    string line = proc.StandardOutput.ReadLine();
}

然后您需要解析输出以获得结果并在您的应用程序中使用它。

最后,现在有一些商业 API 可以用来做这种事情,例如 attachmentscanner (disclaimer I'm related to this product) or scanii。这些将为您提供一个 API 和一个更具扩展性的选项来扫描特定文件并从至少一个病毒检查引擎接收响应。

新事物即将到来 Spring/2020 年夏季。Azure 存储的高级威胁保护包括恶意软件信誉筛选,它利用 Microsoft 威胁情报的强大功能使用哈希信誉分析检测恶意软件上传,其中包括病毒哈希、特洛伊木马、间谍软件和勒索软件。注意:不能保证使用哈希信誉分析技术会检测到所有恶意软件。

https://techcommunity.microsoft.com/t5/Azure-Security-Center/Validating-ATP-for-Azure-Storage-Detections-in-Azure-Security/ba-p/1068131

我们有同样的问题和同样的用例。最终客户将多个文件上传到我们的网站,常规扩展名 - 图片、doc/docx、xls/xlsx、pdf - 他们需要即时扫描,然后用户付款,我们寄出整个包裹的信息。我们需要扫描并展平它们以删除宏之类的东西。

我们正在积极寻找解决方案。

您是如何解决您的用例的?

此外,除了扫描之外,我们还需要压平文件、CDR - 深度内容解除和重建,正如他们在 OPSWAT 中所说的那样。

意味着上传到云端的 excel 中的宏可以 运行 一条 cmd 行破坏服务器,因此需要在将文件插入存储 blob 之前将其删除。

我们找到了 Metadefender,但它不适合。补充一下让别人知道。 - 云 API 扫描速度似乎很快,但 CDR 大约需要一分钟,而且每天上传的文件数量有限,因此不适合。

根据 Metadefender Core,它似乎非常昂贵,因为 8 个引擎每年大约 3000 美元,病毒发现率为 83%,它需要至少额外花费 160 美元的 Azure VM(检查 4 CPU 核心而不是 8)

我只是希望有一个用于存储 blob 的插件可以轻松地做到这一点,以及 return 如果检测到任何威胁返回到我们的应用程序服务,为什么会删除该文件。