高危漏洞被公開披露後,管理多個雲帳號的企業需要快速評估所有帳號的受影響情況。本文介紹如何通過 Python 指令碼調用Security Center ModifyEmgVulSubmit API,結合資來源目錄(RD)自動擷取成員帳號列表,實現跨帳號批量掃描應急漏洞。
背景
假設某互連網企業在資來源目錄(RD)中管理著 150 個成員帳號。Linux 系統組件 polkit pkexec 被曝出本地提權漏洞(CVE-2021-4034),安全團隊需立即評估全集團的受影響狀況。
傳統營運模式面臨以下難題:
手動響應滯後:逐一登入 150 個帳號發起掃描,耗時數小時甚至數天,極易錯失漏洞收斂的最佳視窗期。
掃描覆蓋死角:依靠人工登記帳號列表,難以確保新加入 RD 的成員帳號被納入掃描範圍。
自動化設計門檻:簡單的並髮腳本若缺乏 API 節流機制,會因觸發雲端流控導致任務批量失敗。
風險視角孤島:掃描結果分散,安全主管無法在一個介面查看全集團的漏洞概覽及處置進度。
方案概述
本方案在本地運行 Python 指令碼,通過資來源目錄自動擷取所有成員帳號,調用Security Center API 批量下發應急漏洞掃描任務。掃描完成後,通過 Agentic SOC 的Log Service集中查看全部帳號的漏洞掃描結果。整體流程如下:
營運人員在本地通過專用 RAM 使用者的 AccessKey 運行 Python 指令碼。指令碼首先調用 DescribeEmgVulItem API 驗證配置中的漏洞名稱是否有效,然後調用資來源目錄 ListAccounts API 自動擷取所有成員帳號,最後逐一調用Security Center ModifyEmgVulSubmit API 下發掃描任務。掃描結果通過 Agentic SOC 匯聚到Log Service(SLS),營運人員在一個介面即可查看全部帳號的漏洞狀態。
實施步驟
步驟一:配置環境與許可權
準備環境:
使用阿里雲帳號建立RAM使用者(例如
VulnScanner),並為其授予以下許可權:AliyunYundunSASFullAccess(必需):用於調用Security Center API 下發掃描任務。本文使用系統策略以快速驗證,生產環境建議建立自訂策略僅授予ModifyEmgVulSubmit 和 DescribeEmgVulItem 的調用許可權。AliyunResourceDirectoryReadOnlyAccess(推薦):用於自動擷取資來源目錄下的所有成員帳號。若不授予此許可權,需要在設定檔中手動維護帳號列表。
啟用OpenAPI調用並妥善儲存AccessKey(在步驟三:執行掃描時使用)。
重要嚴禁使用阿里雲主帳號的 AccessKey 執行指令碼。請務必使用上述專用 RAM 使用者的 AccessKey,並定期輪轉以降低泄露風險。
步驟二:下載指令碼並配置掃描參數
下載以下三個檔案至本地工作目錄:
scan_manager.py:主程式,負責遍曆帳號並調用掃描 API。config.ini:設定檔,定義服務地址、掃描目標漏洞等參數。requirements.txt:Python 依賴庫列表。
開啟
config.ini,根據實際需求配置以下參數:endpoint:根據資產所在地區,修改為對應的Security Center服務存取點。指令碼每次運行針對單個地區,若資產分布在多個地區,需為每個地區分別配置並執行。scan_targets:填入需要掃描的應急漏洞名稱,多個漏洞用英文逗號分隔。名稱可從Security Center控制台的應急漏洞頁面直接複製。指令碼啟動時會通過 DescribeEmgVulItem API 自動解析為 API 所需的漏洞名稱。max_qps:API 請求速率上限,預設為 6 次/秒,適用於大多數情境。若帳號規模較大且需要更高速率,可在配額中心申請提升Security Center相關 API 的頻率配額。member_uids:待掃描的成員帳號 ID 列表。若 RAM 使用者已有資來源目錄讀取許可權,留空即可,指令碼會自動擷取所有成員帳號。
步驟三:執行掃描
配置身份憑證。將步驟一建立的 RAM 使用者 AccessKey 配置為環境變數。
export ALIBABA_CLOUD_ACCESS_KEY_ID="YOUR_ACCESSKEY_ID" export ALIBABA_CLOUD_ACCESS_KEY_SECRET="YOUR_ACCESSKEY_SECRET"安裝依賴。
pip3 install -r requirements.txt執行掃描指令碼。
python3 scan_manager.py指令碼即時列印進度。輸出樣本:
正在查詢應急漏洞列表... ✅ 'polkit pkexec 本地提權漏洞(CVE-2021-4034)' → emg_cve-2021-4034:EMG:AVD-2021-4034 ✅ 成功匹配 1 個漏洞 ℹ️ 'member_uids' 為空白,嘗試從資來源目錄自動探索成員帳號... ✅ 成功從資來源目錄發現 150 個成員帳號。 開始處理 1 個漏洞 × 150 個帳號 = 150 個掃描任務 QPS控製為 6,預計完成時間: 25.0 秒 ✅ [1/150] 成功: 漏洞='polkit pkexec 本地提權漏洞(CVE-2021-4034)', 帳號ID=198XXXXXXXXXXX13 (當前平均QPS: 5.8) ✅ [2/150] 成功: 漏洞='polkit pkexec 本地提權漏洞(CVE-2021-4034)', 帳號ID=142XXXXXXXXXXX84 (當前平均QPS: 5.9) ✅ [3/150] 成功: 漏洞='polkit pkexec 本地提權漏洞(CVE-2021-4034)', 帳號ID=188XXXXXXXXXXX97 (當前平均QPS: 5.7) ... ✅ [150/150] 成功: 漏洞='polkit pkexec 本地提權漏洞(CVE-2021-4034)', 帳號ID=156XXXXXXXXXXX62 (當前平均QPS: 5.9) ================================================== 處理完成! 總耗時: 25.8 秒 成功: 150, 失敗: 0, 總計: 150 實際平均QPS: 5.8 (目標QPS: 6) ==================================================
步驟四:查看掃描結果
使用 RAM 帳號登入Security Center控制台,在左側導覽列選擇 Agentic SOC > 日誌。在日誌庫列表中,選擇標準化日誌 > 漏洞日誌,選擇掃描時間範圍後,單擊查詢/分析,查看漏洞掃描結果。
查詢結果將展示漏洞活動紀錄,日誌表名為 vulnerability_activity。每條記錄包含 vul_name(漏洞名稱,如 polkit pkexec 本地提權漏洞 CVE-2021-4034)和 instance_id(受影響執行個體 ID)等欄位。
應急漏洞僅支援掃描,不支援修複。應急漏洞是針對您伺服器上安裝的軟體進行掃描後發現的風險,需要您根據漏洞詳情中的修複建議,手動對軟體應用升級或進行配置修改,排除安全隱患。
生產環境實踐建議
建立常態化掃描機制
應急漏洞的披露不可預測,建議將指令碼納入定期執行計畫,而非僅在漏洞爆發時臨時運行。可通過以下方式實現自動化:
使用 Linux crontab 或 Windows 工作排程器定時執行指令碼(例如每天一次),持續監控新披露的應急漏洞。
結合阿里雲Function Compute(FC)部署為 Serverless 函數,通過定時觸發器調度,無需維護常駐伺服器。
強化 AccessKey 安全管理
定期輪轉:每 90 天輪換一次 RAM 使用者的 AccessKey,降低密鑰泄露風險。
使用執行個體角色:若指令碼運行在 ECS 執行個體上,推薦通過執行個體RAM角色授權,避免在環境變數中暴露 AccessKey。
限制來源 IP:在 RAM 策略中添加 IP 條件,僅允許從營運專用網段調用 API。
常見問題
掃描提交成功,但在 Agentic SOC 的漏洞日誌中看不到記錄
日誌採集未開啟:在 Agentic SOC 的日誌中,確認漏洞日誌的採集開關已開啟。
掃描尚未完成:ModifyEmgVulSubmit 僅提交掃描任務,實際掃描是非同步執行的。根據資產規模,掃描可能需要數分鐘到數十分鐘才能完成。
未檢測到漏洞:漏洞日誌僅記錄實際檢測到的漏洞。如果成員帳號的資產上不存在該應急漏洞,掃描完成後不會產生漏洞日誌記錄。可先登入成員帳號,在漏洞管理 > 應急漏洞頁面確認單個帳號是否有掃描結果。
多帳號日誌未匯聚:成員帳號的日誌需通過 Agentic SOC 匯聚到管理帳號。確認成員帳號已開通Security Center並完成多帳號統一接入配置。
漏洞名稱解析失敗,提示"未找到匹配的應急漏洞"
請確認 config.ini 中 scan_targets 填寫的名稱與Security Center控制台應急漏洞頁面顯示的名稱完全一致(包括括弧和空格)。建議直接從控制台複製漏洞名稱,避免手動輸入導致的字元差異。
如果確認名稱無誤仍然解析失敗,可能該漏洞已過應急響應周期,不再支援通過 DescribeEmgVulItem API 查詢和主動掃描。