你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
设置对恶意软件扫描的响应
设置自动响应以移动或删除恶意文件,或将干净文件移动/引入到其他目标。 选择适合你的方案体系结构的首选响应选项。
使用恶意软件扫描时,通过以下扫描结果选项可以生成自动化响应:
- Defender for Cloud 安全警报
- 事件网格事件
- Blob 索引标记
提示
我们邀请你通过我们的动手实验室探索 Defender for Storage 中的恶意软件扫描功能。 按照 Ninja 培训 说明,获取有关如何设置和测试恶意软件扫描端到端的详细分步指南,包括配置扫描结果的响应。 这是“实验室”项目的一部分,可帮助客户掌握 Microsoft Defender for Cloud,并提供有关其功能的实际操作体验。
下面是一些可用于自动执行响应的响应选项:
使用 ABAC(基于属性的访问控制)阻止访问未扫描文件或恶意文件
可以使用 Microsoft Entra 基于属性的访问控制 (ABAC) 授权来阻止对恶意文件和未扫描文件的访问。 它允许基于扫描结果设置对 Blob 的条件访问,并允许应用程序和用户仅访问干净扫描的文件。
要进行设置,请按照以下视频中的说明操作。
删除或移动恶意 blob
可以使用代码或工作流自动化来删除恶意文件或将其移动到隔离区。
准备用于删除或移动操作的环境
删除恶意文件 - 在设置自动删除之前,建议在存储帐户上启用软删除。 如果存在误报或安全专业人员想要调查恶意文件,还可以“取消删除”文件。
将恶意文件移动到隔离区 - 可以将文件移动到被视为“隔离区”的专用存储容器或存储帐户。 你可能只希望某些用户(例如安全管理员或 SOC 分析师)有权访问此专用容器或存储帐户。
- 最佳做法是使用 Microsoft Entra ID 来控制对 blob 存储的访问。 若要控制对专用隔离存储容器的访问,可以利用使用 Microsoft Entra 基于角色的访问控制 (RBAC) 的容器级角色分配。 具有存储帐户级权限的用户可能仍可以访问“隔离”容器。 可以将权限编辑为容器级,也可以选择其他方法,并将恶意文件移动到专用存储帐户。
- 如果必须对受保护的存储帐户使用 SAS(共享访问签名)令牌等其他方法,则最佳做法是将恶意文件移到其他存储帐户(隔离区)。 然后,最好仅授予 Microsoft Entra 访问隔离存储帐户的权限。
设置自动化
选项 1:基于 Microsoft Defender for Cloud 安全警报的逻辑应用
基于逻辑应用的响应是一种用于设置响应的方法,该方法简单且无需代码。 但响应时间比基于代码的事件驱动型方法要慢。
使用 Azure 门户部署 DeleteBlobLogicApp Azure 资源管理器 (ARM) 模板。
选择已部署的逻辑应用。
要允许逻辑应用从存储帐户中删除 Blob,请添加角色分配:
选项 2:基于事件网格事件的函数应用
函数应用以低延迟响应时间提供高性能。
在受保护存储帐户所在的同一资源组中创建函数应用。
为函数应用标识添加角色分配。
转到边栏菜单中的“标识”,确保“系统分配”标识状态为“启用”,然后选择“Azure 角色分配”。
使用“存储 Blob 数据参与者”角色在订阅或存储帐户级别添加角色分配。
使用事件网格事件并连接 Azure 函数作为终结点类型。
编写 Azure 函数代码时,可以使用我们预制的函数示例 MoveMaliciousBlobEventTrigger,也可以编写自己的代码,将 blob 复制到其他位置,然后将其从源中删除。
针对每个扫描结果,会根据以下架构发送一个事件。
事件消息结构
事件消息是 JSON 对象,其中包含提供恶意软件扫描结果详细信息的键值对。 下面细分了事件消息中的每个键:
id:事件的唯一标识符。
subject:一个字符串,用于描述存储帐户中已扫描的 blob(文件)的资源路径。
data:包含事件详细信息的 JSON 对象:
correlationId:一个唯一标识符,可用于关联与同一扫描相关的多个事件。
blobUri:存储帐户中已扫描的 blob(文件)的 URI。
eTag:已扫描的 blob(文件)的 ETag。
scanFinishedTimeUtc:扫描完成时的 UTC 时间戳。
scanResultType:扫描的结果,例如“恶意”或“未发现威胁”。
scanResultDetails:包含扫描结果详细信息的 JSON 对象:
malwareNamesFound:在已扫描的文件中发现的一组恶意软件名称。
sha256:已扫描的文件的 SHA-256 哈希。
eventType:指示事件类型的字符串,在本例中为“Microsoft.Security.MalwareScanningResult”。
dataVersion:数据架构的版本号。
metadataVersion:元数据架构的版本号。
eventTime:生成事件时的 UTC 时间戳。
topic:事件所属的事件网格主题的资源路径。
下面是一个事件消息示例:
{
"id": "aaaa0000-bb11-2222-33cc-444444dddddd",
"subject": "storageAccounts/<storage_account_name>/containers/app-logs-storage/blobs/EICAR - simulating malware.txt",
"data": {
"correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
"blobUri": "https://<storage_account_name>.blob.core.windows.net/app-logs-storage/EICAR - simulating malware.txt",
"eTag": "0x000000000000000",
"scanFinishedTimeUtc": "2023-05-04T11:31:54.0481279Z",
"scanResultType": "Malicious",
"scanResultDetails": {
"malwareNamesFound": [
"DOS/EICAR_Test_File"
],
"sha256": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
}
},
"eventType": "Microsoft.Security.MalwareScanningResult",
"dataVersion": "1.0",
"metadataVersion": "1",
"eventTime": "2023-05-04T11:31:54.048375Z",
"topic": "/subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.EventGrid/topics/<event_grid_topic_name>"
}
通过了解事件消息的结构,可以提取有关恶意软件扫描结果的相关信息并进行相应的处理。
使应用程序和数据流能够识别恶意软件扫描的扫描结果
恶意软件扫描几乎是实时的,上传时间和扫描时间之间的时间窗口通常很小。 由于存储并非计算,因此不存在执行存储中的恶意文件的风险。 风险是用户或应用程序访问恶意文件并将其传播到整个组织。
有一些方法使应用程序和数据流能够识别恶意软件扫描的扫描结果。 这些方法可确保在扫描完成、扫描结果被使用并根据这些结果采取适当的操作之前,无法访问或处理文件。
应用程序根据扫描结果引入数据
选项 1:应用先检查“索引标记”再进行处理
获取引入数据的一种方法是更新可访问存储帐户的所有应用程序。 每个应用程序都会检查每个文件的扫描结果,如果 blob 索引标记的扫描结果是“未发现威胁”,则应用程序将读取 blob。
选项 2:将应用程序连接到事件网格事件中的 Webhook
可以将应用程序连接到事件网格事件中的 Webhook,并使用这些事件对扫描结果为“未发现威胁”的文件触发相关处理。 详细了解如何使用 Webhook 事件传递和验证终结点。
使用中间存储帐户作为 DMZ
可以为不受信任的内容设置中间存储帐户 (DMZ),并将上传流量定向到 DMZ。 在不受信任的存储帐户上,启用“恶意软件扫描”并连接事件网格和函数应用,以仅将扫描结果为“未发现威胁”的 blob 移动到目标存储帐户。