辅助角色进程能否以编程方式为 Azure 云服务调用反恶意软件?

Can a Worker Role process call Antimalware for Azure Cloud Services programmatically?

我正在尝试找到一种解决方案,我可以使用它对已上传到 Azure blob 存储的文件执行病毒扫描。我想知道是否可以将文件复制到 Worker Role 实例上的本地存储,调用 Azure 云服务的反恶意软件对该特定文件执行扫描,然后根据文件是否干净,相应地处理文件.

如果 Worker Role 无法以编程方式调用扫描,是否有确定的方法来检查文件是否已被扫描以及在将文件复制到本地存储后是否干净(我不知道是否该服务会在添加新文件时进行实时扫描,还是仅按计划运行)?

我认为让您了解的最佳方式是使用 Azure VM (IaaS) 并激活 Microsoft Antimalware 扩展。然后您可以登录它并对服务进行所有必要的检查和测试。 稍后,您将把所有这些应用到工作者角色中(有一个类似的 PaaS 扩展可用于此,称为 PaaSAntimalware)。

请参阅 https://msdn.microsoft.com/en-us/library/azure/dn832621.aspx 的下一段摘录:

"在 PaaS 中,VM 代理称为 GuestAgent,在 Web 和辅助角色 VM 上始终可用。(有关详细信息,请参阅 Azure 角色架构。)角色 VM 的 VM 代理现在可以添加扩展到云服务 VM 的方式与持久虚拟机相同。 角色 VM 上的 VM 扩展和持久性 VM 之间的最大区别在于,对于角色 VM,扩展首先添加到云服务,然后再添加到该云服务中的部署。

使用 Get-AzureServiceAvailableExtension cmdlet 列出所有可用的角色 VM 扩展。

我们没有找到直接的 API,但反恶意软件服务符合 Windows 桌面病毒检查程序使用的标准,因为它们实现了 IAttachmentExecute COM API.

所以我们最终实现了一个文件上传服务,将上传的文件写入隔离区本地资源,然后调用 IAttachmentExecute API。如果文件被感染,则根据所使用的反恶意软件服务,它会抛出异常、静默删除文件或将其标记为不可访问。因此,通过尝试读取文件的第一个字节,我们可以测试文件是否仍然可以访问。

var type = Type.GetTypeFromCLSID(new Guid("4125DD96-E03A-4103-8F70-E0597D803B9C"));
var svc = (IAttachmentExecute)Activator.CreateInstance(type);
try {
    svc.SetClientGuid(ref clientGuid);
    svc.SetLocalPath(path);
    svc.Save();
}
finally
{
    svc.ClearClientState();
}

using (var fileStream = File.OpenRead(path))
{
    fileStream.ReadByte();
}

[Guid("73DB1241-1E85-4581-8E4F-A81E1D0F8C57")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IAttachmentExecute
{
    void SetClientGuid(ref Guid guid);

    void SetLocalPath(string pszLocalPath);

    void Save();

    void ClearClientState();
}