在 macOS 上为Microsoft Defender for Endpoint配置脱机安全智能更新

本文档介绍 macOS 上Microsoft Defender for Endpoint的脱机安全智能更新功能。

借助此功能,组织可以使用本地托管服务器 (本文档中称为镜像服务器,) 更新本文档中称为定义签名的安全智能 (,这些智能) 在 macOS 终结点上具有有限或没有 Internet 公开。

镜像服务器是客户环境中可以连接到 Microsoft 云以下载签名的任何服务器。 其他 macOS 终结点以预定义的间隔从 镜像 服务器拉取签名。

主要优势

  • 安全团队可以控制和管理将签名下载到本地服务器的频率以及终结点从本地服务器拉取签名的频率。

  • 你有额外的保护和控制层,因为下载的签名可以在测试设备上进行测试,然后再将其传播到整个队列。

  • 网络带宽更少,因为只有一个本地服务器轮询Microsoft云,以代表整个机群获取最新签名。

  • 镜像服务器可以运行 Windows、Mac 或 Linux,无需在该服务器上安装 Defender for Endpoint。

  • 你将获得最新的防病毒保护,因为签名始终随最新的兼容防病毒引擎一起下载。

  • 在每次迭代中, (n-1) 的旧版签名将移动到 镜像 服务器上的备份文件夹。 如果最新更新出现问题,可以将 n-1 签名版本从备份文件夹拉取到设备。

  • 在极少数情况下脱机更新失败,可以配置回退选项,从Microsoft云获取联机更新。

脱机安全智能更新的工作原理

组织需要设置镜像服务器,该服务器是可由Microsoft云访问的本地 Web/NFS 服务器。

通过使用本地服务器上的 cron 作业/任务计划程序执行脚本,将签名从 Microsoft 云下载到此镜像服务器。

运行 Defender for Endpoint 的 macOS 终结点按用户定义的时间间隔从此镜像服务器拉取下载的签名。

从本地服务器拉取到 macOS 终结点的签名在加载到防病毒引擎之前先进行验证。

若要触发和配置更新过程,请更新 macOS 终结点上的托管配置文件 json 文件。

可以在 mdatp CLI 上查看更新的状态。

下图演示了将安全智能更新下载到 镜像 服务器的过程流。

用于下载安全智能更新的镜像服务器上的流程图

下图演示了 macOS 终结点上安全智能更新的过程流。

用于安全智能更新的 macOS 终结点上的流程图

镜像服务器可以运行以下任何操作系统:

  • Linux (任何口味)
  • Windows (任何版本)
  • Mac (任何版本)

先决条件

  • 必须在 macOS 终结点上安装 Defender for Endpoint 版本 101.25012.0003 或更高版本。

  • macOS 终结点需要连接到 镜像 服务器。

  • macOS 终结点必须运行任何 Defender for Endpoint 支持的分发版。

  • 镜像服务器可以是 HTTP/HTTPS 服务器或网络共享服务器,例如 NFS 服务器。

  • 镜像服务器需要有权访问以下 URL:

    • https://github.com/microsoft/mdatp-xplat.git
    • https://go.microsoft.com/fwlink/?linkid=2144709
  • 镜像服务器应支持 bash 或 PowerShell。

  • 镜像服务器需要以下最低系统规范:

    CPU 核心 RAM 可用磁盘 交换
    2 核 (首选 4 核) 最小 1 GB (首选 4 GB) 2 GB 系统依赖

    注意

    此配置可能因所处理的请求数和每个服务器必须处理的负载而异。

配置镜像服务器

注意

镜像服务器的管理和所有权完全由客户拥有,因为它驻留在客户的专用环境中。

任何 HTTP 服务器都可以用作镜像服务器。 镜像服务器不需要安装 Defender for Endpoint。

虽然镜像服务器的管理和所有权完全由客户拥有,但本节提供了两个示例 Bash 脚本,演示如何使用 Python 3 和 Caddy 在 macOS 上设置基本的 HTTP 文件服务器。 这些脚本仅用于说明目的,应根据自己的特定需求和环境进行调整。

  • python_http_server.sh:使用 Python 3 的内置 HTTP 服务器模块提供来自指定目录的文件。
  • caddy_http_server.sh:安装和配置 Caddy Web 服务器,以处理指定目录中的文件。

若要在设置服务器后检查服务已正确设置,请导航到“https://localhost:8080"”。

对于生产或高级用例,请参阅每个服务器的官方文档:

始终根据环境和安全要求查看和调整脚本。

示例脚本:使用 Python 3 在 macOS 上设置基本 HTTP 文件服务器

#!/bin/bash
# python_http_server.sh
# Starts a simple HTTP server using Python 3

# Check for Python 3
if ! command -v python3 &> /dev/null; then
  echo "Python 3 is not installed. Please install it first."
  exit 1
fi

PORT=8080
FOLDER="."

if [ ! -z "$1" ]; then
  PORT=$1
fi
if [ ! -z "$2" ]; then
  FOLDER=$2
fi

echo "Starting Python HTTP server on port $PORT (localhost only), serving folder: $FOLDER..."
python3 -m http.server "$PORT" --bind 127.0.0.1 --directory "$FOLDER"

示例脚本:使用 Caddy 在 macOS 上设置基本 HTTP 文件服务器

#!/bin/bash
# caddy_http_server.sh
# Installs and configures Caddy HTTP server on macOS

PORT=8080
FOLDER="."

if [ ! -z "$1" ]; then
  PORT=$1
fi
if [ ! -z "$2" ]; then
  FOLDER=$2
fi

check_homebrew() {
  if ! command -v brew &> /dev/null; then
    echo "Homebrew is required to install Caddy."
    read -p "Would you like to install Homebrew? (y/n): " install_brew
    if [[ "$install_brew" =~ ^[Yy]$ ]]; then
      echo "Installing Homebrew..."
      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
      export PATH="/opt/homebrew/bin:$PATH"
    else
      echo "Please install Caddy manually and restart this script."
      exit 1
    fi
  fi
}

install_caddy() {
  if ! brew list caddy &> /dev/null; then
    echo "Installing Caddy via Homebrew..."
    brew install caddy
  else
    echo "Caddy is already installed."
  fi
}

# Check for Caddy
if ! command -v caddy &> /dev/null; then
  echo "Caddy is not installed."
  check_homebrew
  install_caddy
else
  echo "Caddy is already installed."
fi

# Create a simple Caddyfile
cat <<EOL > Caddyfile
localhost:${PORT} {
  root * ${FOLDER}
  file_server browse
}
EOL

echo "Caddyfile created. Starting Caddy server on port $PORT..."
caddy run --config ./Caddyfile

获取脱机安全智能下载器脚本

Microsoft在以下 GitHub 存储库中托管脱机安全智能下载器脚本: https://github.com/microsoft/mdatp-xplat

执行以下步骤获取下载器脚本:

选项 1:克隆存储库 (首选)

在 镜像 服务器上安装 git

导航到要克隆存储库的目录。

运行 命令: git clone https://github.com/microsoft/mdatp-xplat.git

选项 2:下载 zip 文件

下载存储库的 zip 文件: https://github.com/microsoft/mdatp-xplat/archive/refs/heads/master.zip

将 zip 文件复制到要保留脚本的文件夹。

提取压缩的文件夹。

注意

计划 cron 作业启动的作业 ,以定期将存储库/下载的 zip 文件更新到最新版本。

克隆存储库或下载压缩文件后,本地目录结构应如下所示:

user@vm:~/mdatp-xplat$ tree linux/definition_downloader/
linux/definition_downloader/
├── README.md
├── settings.json
├── settings.ps1
├── xplat_offline_updates_download.ps1
└── xplat_offline_updates_download.sh

0 directories, 5 files

注意

浏览 README.md 文件,详细了解如何使用脚本。

settings.json 文件包含一些变量,用户可以配置这些变量来确定脚本执行的输出。

字段名称 Description
downloadFolder string 映射到脚本将文件下载到的位置。
downloadLinuxUpdates 布尔值 true设置为 时,脚本会将Linux特定更新下载到 downloadFolder
logFilePath string 在给定文件夹中设置诊断日志。 如果遇到任何问题,可以与 Microsoft 共享此文件,以便调试脚本。
downloadMacUpdates 布尔值 该脚本会将特定于 Mac 的更新下载到 downloadFolder
downloadPreviewUpdates 布尔值 下载可用于特定 OS 的更新的预览版本。
backupPreviousUpdates 布尔值 允许脚本在 文件夹中复制以前的更新 _back ,并将新更新下载到 downloadFolder

执行脱机安全智能下载器脚本

若要手动执行下载器脚本,请根据上一部分中的说明在 settings.json 文件中配置参数,并根据镜像服务器的 OS 使用以下命令之一:

Bash:

./xplat_offline_updates_download.sh

PowerShell:

./xplat_offline_updates_download.ps1

注意

计划 cron 作业启动的作业以执行此脚本,以定期将最新的安全智能更新下载到 镜像 服务器。

在 镜像 服务器上托管脱机安全智能更新

执行脚本后,最新的签名将下载到 settings.json 文件 (updates.zip) 中配置的文件夹。

下载签名 zip 后,可以使用 镜像 服务器来托管它。 可以使用任何 HTTP/HTTPS/网络共享服务器来托管镜像服务器。

托管后,将托管服务器的绝对路径复制到 (,但不包括 arch_* 目录) 。

例如,如果使用 执行 downloadFolder=/tmp/wdav-update脚本,并且 HTTP 服务器 (www.example.server.com:8000) 承载 /tmp/wdav-update 路径,则相应的 URI 为: www.example.server.com:8000/mac/production/

我们还可以使用目录的绝对路径 (本地/远程装入点) ,例如 /tmp/wdav-update/mac/production。

设置镜像服务器后,需要将此 URL 作为托管配置中的 传播到 Mac 终结点offlineDefinitionUpdateUrl,如下一部分所述。

配置终结点

使用以下示例mdatp_managed.json文件,根据配置更新参数,然后将文件复制到位置 /etc/opt/microsoft/mdatp/managed/mdatp_managed.json。

{
  "cloudService": {
    "automaticDefinitionUpdateEnabled": true,
    "definitionUpdatesInterval": 1202
  },
  "antivirusEngine": {
    "offlineDefinitionUpdateUrl": "http://172.22.199.67:8000/mac/production/",
    "offlineDefintionUpdateFallbackToCloud":false,
    "offlineDefinitionUpdate": "enabled"
  },
  "features": {
    "offlineDefinitionUpdateVerifySig": "enabled"
  }
}
字段名称 注释
automaticDefinitionUpdateEnabled true/false 确定 Defender for Endpoint 尝试自动执行更新的行为,是否分别处于打开或关闭状态。
definitionUpdatesInterval 数字 每次自动更新签名的间隔时间 (秒) 。
offlineDefinitionUpdateUrl string 作为镜像服务器设置的一部分生成的 URL 值。 这可以是远程服务器 URL 或目录 (本地/远程装载点) 。
offlineDefinitionUpdate enabled/disabled 设置为 enabled时,将启用“脱机安全智能更新”功能,反之亦然。
offlineDefinitionUpdateFallbackToCloud true/false 确定“脱机镜像服务器”无法为更新请求提供服务时的 Defender for Endpoint 安全智能更新方法。 如果设置为 true,则当“脱机安全智能更新”失败时,将通过Microsoft云重试更新;否则,反之亦然。
offlineDefinitionUpdateVerifySig enabled/disabled 如果设置为 enabled,则会在终结点上验证下载的定义;否则,反之亦然。

验证配置

若要测试设置是否在 macOS 终结点上正确应用,请运行以下命令:

mdatp health --details definitions

示例输出类似于以下代码片段:

user@vm:~$ mdatp health --details definitions
automatic_definition_update_enabled         : true [managed]
definitions_updated                         : Mar 14, 2024 at 12:13:17 PM
definitions_updated_minutes_ago             : 2
definitions_version                         : "1.407.417.0"
definitions_status                          : "up_to_date"
definitions_update_source_uri               : "https://go.microsoft.com/fwlink/?linkid=2144709"
definitions_update_fail_reason              : ""
offline_definition_url_configured           : "http://172.XX.XXX.XX:8000/mac/production/" [managed]
offline_definition_update                   : "enabled" [managed]
offline_definition_update_verify_sig        : "enabled"
offline_definition_update_fallback_to_cloud : false[managed]

触发脱机安全智能更新

  • 自动更新

    如果托管 json 中的字段 automaticDefinitionUpdateEnabledoffline_definition_update 设置为 true,则定期自动触发“脱机安全智能更新”。

    默认情况下,此定期间隔为 8 小时。 可以通过在托管 json 中设置 definitionUpdatesInterval 参数来配置它。

  • 手动更新

    若要手动触发“脱机安全智能更新”以从 Mac 终结点上的 镜像 服务器下载签名,请运行以下命令:

    mdatp definitions update
    

检查更新状态

通过自动或手动方法触发“脱机安全智能更新”后,请运行 命令验证更新是否成功: mdatp health --details --definitions

验证以下字段:

user@vm:~$ mdatp health --details definitions
...
definitions_status                          : "up_to_date"
...
definitions_update_fail_reason              : ""
...

常见故障排除步骤

  • 使用以下命令检查“脱机安全智能更新”功能的状态:

    mdatp health --details definitions
    

    此命令在 “definitions_update_fail_reason ”部分提供用户友好的消息。

  • 检查是否 offline_definition_update 已启用 和 offline_definition_update_verify_sig

  • 检查 是否 definitions_update_source_uri 等于 offline_definition_url_configured

    • definitions_update_source_uri 是从中下载签名的源。
    • offline_definition_url_configured 是应从中下载签名的源,在托管配置文件中提到签名。
  • 如果可从主机访问镜像服务器,请尝试执行连接测试以检查:

    mdatp connectivity test
    
  • 尝试使用以下命令触发手动更新:

    mdatp definitions update
    

另请参阅