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

11

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

一些视频内容将通过编码提供几种不同的质量格式,然后将流式传输(使用Azure Media Services)。

我们需要添加一个中间步骤,以便扫描上传的文件以检测潜在的病毒风险。 Azure中是否内置了功能(或第三方)可允许我们在处理文件之前调用API扫描内容?我们理想地寻找一个API而不仅仅是VM上的后台服务,这样我们可以得到反馈,并可能在Web或工作角色中使用。

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


1
请查看Microsoft Antimalware服务:https://azure.microsoft.com/zh-cn/blog/microsoft-antimalware-for-azure-cloud-services-and-virtual-machines/。 - Gaurav Mantri
@GauravMantri 那里有可用的API吗?我们需要能够确定性地传入一个文件并获得响应,而不是上传并等待看它是否被隔离。 - Tim
4个回答

3
我已经成功地使用开源的ClamAV完成了这个任务。您没有说明您使用的是哪种语言,但因为是Azure,我会假设是.Net。
有一个.Net封装程序应该提供您正在寻找的API:

https://github.com/tekmaven/nClam

这里是一些示例代码(注意:这是直接从nClam GitHub repo页面复制并在此处再现,以防链接失效)

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文件都可以包含在部署包中,任何配置都可以放入服务启动代码中。


0
2020年春夏季即将推出新功能。Azure存储的高级威胁保护包括恶意软件声誉筛选,利用Microsoft威胁情报的强大力量进行哈希声誉分析来检测恶意软件上传,其中包括病毒、木马、间谍软件和勒索软件的哈希值。请注意:无法保证使用哈希声誉分析技术能够检测到每一种恶意软件。

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


1
很不幸,它在用户上传文件后检查blob上的文件,而完成时间是未知的。 - zolty13

0

ClamAV是一个不错的选择,特别是现在0.99即将发布,支持YARA规则 - 这将使您编写自定义规则变得非常容易,并允许clamav使用今天公开的大量优秀的YARA规则。

另一种选择,有点厚颜无耻地推销一下scanii.com,它是一个用于恶意软件/病毒检测的SaaS,与AWS和Azures集成得非常好。


我一直在尝试通过Scanii.com获取演示账户,但是虽然我知道我的电子邮件地址是正确的,但我从网站上没有收到验证电子邮件,因此我无法真正测试该产品。 :-( - PoorInRichfield
很抱歉听到这个消息,您可以发送电子邮件至support@uvasoftware.com,我们会立即为您解决问题! - Rafael Ferreira

0

有多种选项可以实现这个目标:

首先,您可以使用已经提到的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(免责声明:我与此产品有关)或scanii。这些将为您提供API和更可扩展的选项,以扫描特定文件并从至少一个病毒检查引擎接收响应。


我已经使用一个已知病毒文件测试了AttachmentScanner,但是我得到的响应是“status”:“ok”,这并不好。虽然API易于使用,但如果它无法正常工作,则没有用处。 - PoorInRichfield

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接