你当前正在访问 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 分析师)有权访问此专用容器或存储帐户。

设置自动化

选项 1:基于 Microsoft Defender for Cloud 安全警报的逻辑应用

基于逻辑应用的响应是一种用于设置响应的方法,该方法简单且无需代码。 但响应时间比基于代码的事件驱动型方法要慢。

  1. 使用 Azure 门户部署 DeleteBlobLogicApp Azure 资源管理器 (ARM) 模板。

  2. 选择已部署的逻辑应用。

  3. 将角色分配添加到逻辑应用,以允许它从存储帐户中删除 Blob:

    1. 转到边栏菜单中的“标识”,然后选择“Azure 角色分配”。

      Screenshot that shows how to set up a role assignment for workflow automation to respond to scan results.

    2. 使用“存储 Blob 数据参与者”角色在订阅级别添加角色分配。

    3. 为 Microsoft Defender for Cloud 警报创建工作流自动化:

      1. 转到 Azure 门户中的 Microsoft Defender for Cloud。
      2. 转到边栏菜单中的“工作流自动化”。
      3. 添加新工作流:在“警报名称包含”字段中,填写上传到存储帐户的恶意文件,然后在“操作”部分选择逻辑应用。
      4. 选择创建

      Screenshot that shows how to set up workflow automation to respond to scan results.

选项 2:基于事件网格事件的函数应用

函数应用以低延迟响应时间提供高性能。

  1. 在受保护存储帐户所在的同一资源组中创建函数应用

  2. 为函数应用标识添加角色分配。

    1. 转到边栏菜单中的“标识”,确保“系统分配”标识状态为“启用”,然后选择“Azure 角色分配”。

    2. 使用“存储 Blob 数据参与者”角色在订阅或存储帐户级别添加角色分配。

  3. 使用事件网格事件并连接 Azure 函数作为终结点类型。

  4. 编写 Azure 函数代码时,可以使用我们预制的函数示例 MoveMaliciousBlobEventTrigger,也可以编写自己的代码,将 blob 复制到其他位置,然后将其从源中删除。

针对每个扫描结果,会根据以下架构发送一个事件。

事件消息结构

事件消息是 JSON 对象,其中包含提供恶意软件扫描结果详细信息的键值对。 下面细分了事件消息中的每个键:

  • id:事件的唯一标识符。

  • subject:一个字符串,用于描述存储帐户中已扫描的 blob(文件)的资源路径。

  • data:包含事件详细信息的 JSON 对象:

    • correlationId:一个唯一标识符,可用于关联与同一扫描相关的多个事件。

    • blobUri:存储帐户中已扫描的 blob(文件)的 URI。

    • eTag:已扫描的 blob(文件)的 ETag。

      • scanFinishedTimeUtc:扫描完成时的 UTC 时间戳。

      • scanResultType:扫描的结果,例如“恶意”或“未发现威胁”。

      • scanResultDetails:包含扫描结果详细信息的 JSON 对象:

        1. malwareNamesFound:在已扫描的文件中发现的一组恶意软件名称。

        2. sha256:已扫描的文件的 SHA-256 哈希。

  • eventType:指示事件类型的字符串,在本例中为“Microsoft.Security.MalwareScanningResult”。

  • dataVersion:数据架构的版本号。

  • metadataVersion:元数据架构的版本号。

  • eventTime:生成事件时的 UTC 时间戳。

  • topic:事件所属的事件网格主题的资源路径。

下面是一个事件消息示例:

{
  "id": "52d00da0-8f1a-4c3c-aa2c-24831967356b",
  "subject": "storageAccounts/<storage_account_name>/containers/app-logs-storage/blobs/EICAR - simulating malware.txt",
  "data": {
    "correlationId": "52d00da0-8f1a-4c3c-aa2c-24831967356b",
    "blobUri": "https://<storage_account_name>.blob.core.windows.net/app-logs-storage/EICAR - simulating malware.txt",
    "eTag": "0x8DB4C9327B08CBF",
    "scanFinishedTimeUtc": "2023-05-04T11:31:54.0481279Z",
    "scanResultType": "Malicious",
    "scanResultDetails": {
      "malwareNamesFound": [
        "DOS/EICAR_Test_File"
      ],
      "sha256": "275A021BBFB6489E54D471899F7DB9D1663FC695EC2FE2A2C4538AABF651FD0F"
    }
  },
  "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 移动到目标存储帐户。

Diagram that shows how to set up an intermediary storage account as a DMZ.

后续步骤

了解如何理解 Microsoft Defender for Storage 中恶意软件扫描的结果