本文件說明 macOS 上 適用於端點的 Microsoft Defender 的離線安全智慧更新功能。
此功能使組織能使用本文件中稱為鏡像伺服器的本地主機伺服器 () 更新本文件中所提及的安全智慧 (定義或簽章,) 於有限或完全未接觸網際網路的 macOS 端點上。
鏡像伺服器是指客戶環境中任何能連接到 Microsoft 雲端以下載簽名的伺服器。 其他 macOS 端點則會依照預先設定的間隔從鏡像伺服器拉取簽名。
主要權益
你的資安團隊可以控制並管理向本地伺服器下載簽章的頻率,以及端點從本地伺服器拉取簽章的頻率。
你多了一層保護與控制,因為下載的簽名可以在測試裝置上測試,然後再傳播到整個車隊。
你需要的網路頻寬較少,因為只有一台本地伺服器會代表整個車隊輪詢 Microsoft 雲端,取得最新的簽名。
你的鏡像伺服器可以執行 Windows、Mac 或 Linux,且不必在該伺服器上安裝 Defender for Endpoint。
你會獲得最新的防毒防護,因為簽名會隨最新相容的防毒引擎一起下載。
舊版簽章 (n-1) ,每次迭代都會移到鏡像伺服器的備份資料夾。 如果最新更新有問題,你可以從備份資料夾拉取 N-1 的簽名版本到你的裝置。
如果離線更新極為罕見地失敗,你可以設定備援選項,從 Microsoft 雲端取得線上更新。
離線安全情報更新的運作方式
組織需要設置鏡像伺服器,這是一種可透過 Microsoft 雲端存取的本地 Web/NFS 伺服器。
簽章是透過在本地伺服器上使用 cron job/task scheduler 執行腳本,從 Microsoft 雲端下載到這個鏡像伺服器。
運行 Defender for Endpoint 的 macOS 端點會在使用者自訂的時間點從此鏡像伺服器擷取下載的簽章。
從本地伺服器拉到macOS端點的簽章會先驗證,然後才會載入防毒引擎。
要觸發並設定更新流程,請在 macOS 端點更新受管理的 config json 檔案。
更新狀態可在 mdatp CLI 中查看。
下圖展示了將安全智慧更新下載至鏡像伺服器的流程。
macOS 端點安全智慧更新的流程如下圖所示。
鏡像伺服器可執行以下任一作業系統:
- Linux (任何風格)
- Windows (任何版本)
- Mac (任何版本)
必要條件
必須在 macOS 端點安裝 Defender for Endpoint 版本 101.25012.0003 或更新版本。
macOS 端點必須能連接到鏡像伺服器。
macOS 端點必須運行任何 Defender for Endpoint 支援的發行版。
鏡像伺服器可以是 HTTP/HTTPS 伺服器,也可以是網路共享伺服器,例如 NFS 伺服器。
鏡像伺服器需要存取以下網址:
https://github.com/microsoft/mdatp-xplat.githttps://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 網頁伺服器以提供指定目錄中的檔案。
在伺服器設置完成後,要檢查服務是否正確,請前往「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。
請執行以下步驟以取得下載腳本:
選項一:將儲存庫複製 (偏好)
在鏡像伺服器上安裝 git。
導航到你想要複製該倉庫的目錄。
執行以下指令: git clone https://github.com/microsoft/mdatp-xplat.git
選項二:下載壓縮檔
下載該倉庫的壓縮檔: https://github.com/microsoft/mdatp-xplat/archive/refs/heads/master.zip。
把壓縮檔複製到你想存放腳本的資料夾。
解壓壓縮資料夾。
注意事項
排程一個 cron 工作 或 啟動工作 ,定期保持 repo 或下載的壓縮檔更新到最新版本。
複製倉庫或下載壓縮檔後,本地目錄結構應為以下:
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 檔案由幾個變數組成,使用者可以設定用來決定腳本執行的輸出。
| 場地名稱 | 值 | 描述 |
|---|---|---|
downloadFolder |
字串 | 指向腳本下載檔案的位置。 |
downloadLinuxUpdates |
bool | 當設定為 true時,腳本會下載 Linux 專屬的更新到 downloadFolder。 |
logFilePath |
字串 | 在指定的資料夾建立診斷日誌。 如果腳本有任何問題,這個檔案可以分享給 Microsoft 用來除錯。 |
downloadMacUpdates |
bool | 腳本會下載針對 Mac 的更新到 downloadFolder. |
downloadPreviewUpdates |
bool | 下載該作業系統可預覽的更新版本。 |
backupPreviousUpdates |
bool | 允許腳本複製資料夾中 _back 先前的更新,並將新的更新下載到 downloadFolder。 |
執行離線安全情報下載腳本
若要手動執行下載器腳本,請依前一節描述在settings.json檔案中設定參數,並根據鏡像伺服器的作業系統使用以下指令之一:
Bash:
./xplat_offline_updates_download.sh
PowerShell:
./xplat_offline_updates_download.ps1
注意事項
排程一個 cron 工作 或 啟動工作 執行此腳本,定期下載最新的安全情報更新到鏡像伺服器。
將離線安全情報更新託管在鏡像伺服器上
腳本執行後,最新的簽章會下載到settings.json檔案 (updates.zip) 中設定的資料夾。
一旦簽章壓縮檔下載完成,鏡像伺服器就可以用來架設它。 鏡像伺服器可透過任何 HTTP/HTTPS/網路共享伺服器來架設。
一旦託管完成,複製託管伺服器的絕對路徑, (但不包含 arch_* 目錄) 。
例如,若腳本以 downloadFolder=/tmp/wdav-update執行,且) (www.example.server.com:8000 HTTP 伺服器承載 /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"
}
}
| 場地名稱 | 值 | Comments |
|---|---|---|
automaticDefinitionUpdateEnabled |
true/false |
決定 Defender for Endpoint 嘗試自動執行更新的行為,分別是開啟或關閉。 |
definitionUpdatesInterval |
數字 | 每次自動更新簽名的時間間隔 (秒) 。 |
offlineDefinitionUpdateUrl |
字串 | URL 值是鏡像伺服器設定的一部分。 這可以是遠端伺服器的 URL 或本地/遠端掛載點 (目錄) 。 |
offlineDefinitionUpdate |
enabled/disabled |
當設定為 enabled時,「離線安全情報更新」功能會啟用,反之亦然。 |
offlineDefinitionUpdateFallbackToCloud |
true/false |
當「離線鏡像伺服器」未能提供更新請求時,請確定 Defender for Endpoint Security 智慧的更新方法。 若設定為 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]
觸發離線安全情報更新
自動更新
如果 Managed JSON 中的欄位
automaticDefinitionUpdateEnabled和offline_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_verify_sig是否offline_definition_update已啟用。檢查是否
definitions_update_source_uri等於offline_definition_url_configured。-
definitions_update_source_uri是簽章下載來源。 -
offline_definition_url_configured是應該下載簽章的來源,也就是受管理設定檔中提到的那個。
-
試著執行連線測試,確認主機是否能連上鏡像伺服器:
mdatp connectivity test請嘗試使用以下指令觸發手動更新:
mdatp definitions update