問題
資安工具只能保護它「知道」的資產,而 CMDB 理應列出所有該被保護的資產。實務上兩邊常常對不起來:有些 CMDB 裡的資產從來沒裝 agent、沒被掃描;有些工具看得到的資產卻不在 CMDB,通常代表影子 IT 或過期的紀錄。每套工具對同一台主機的命名與格式也不一樣。
做法
把 CMDB 當作主清單,每套資安工具當作比對來源。對每一套工具問兩個問題:CMDB 裡有哪些資產不在這套工具裡?這套工具裡有哪些資產 CMDB 不認得?答案用 Sankey 圖呈現缺口的全貌,再配上可點開的主機名稱清單,讓人有事可做。
真實的資產清單不能公開,所以公開示範只使用合成資料,由專案內建的產生器產生。
運作方式
- Connector 每個來源讀一份 CSV 匯出檔:CMDB、EDR、弱點掃描工具與微分段工具。每個 connector 會指定哪一欄是資產識別碼,因為每套工具的欄位名稱都不同。
- 比對引擎把識別碼轉成小寫,再做集合比對:相符(matched)、工具缺少(只在 CMDB)、多出來(只在工具)。
- 某套工具的覆蓋率是相符資產數除以 CMDB 資產數,工具依覆蓋率由高到低排序。專案的使用指南把 80% 以上視為缺口輕微、50% 到 80% 視為缺口明顯、50% 以下視為嚴重。
- 本機網頁用 D3 畫出資料流:從 CMDB 經過每套工具流向 matched、missing、extra 的覆蓋率視圖;並排視圖;以及三方視圖,CMDB 在中間,EDR 在一側,弱點掃描工具在另一側。
- 點選任一條流,就會列出背後的資產,可依主機名稱或位址搜尋,也能匯出 CSV。頁面會標明目前顯示的是不是測試資料。
成果
以下數字全部來自合成資料集(共 50 筆產生的資產):
- 20 筆資產同時出現在 CMDB、EDR 與掃描工具。
- 10 筆兩套工具都看得到,但 CMDB 沒有。
- 8 筆在 EDR 缺漏、7 筆在掃描工具缺漏。在產生的資料裡,前者是較舊的 legacy 主機,後者是較新的雲端主機,所以修法不同:前者要補 agent 部署,後者要調整掃描範圍。
- 5 筆是刻意設計的邊界案例:空白主機名稱、兩筆共用同一主機名稱、一筆過期紀錄,以及一個含非 ASCII 字元的主機名稱。
三方覆蓋率是 38 個不重複的 CMDB 主機名稱中有 20 個,也就是 52.6%,落在指南所說的「缺口明顯」區間。程式會讀取任何給它的匯出檔;本文不呈現任何真實資產清單的結果。
學到的事
- 身分比對才是難處。各工具的欄位名稱、大小寫都不同,空白、重複、過期與非 ASCII 的紀錄會悄悄扭曲數字。這些案例要從一開始就放進測試資料。
- 先定義分母。覆蓋率是以 CMDB 為基準,所以過期的 CMDB 看起來會像覆蓋問題,而「多出來」的清單和「缺漏」的清單一樣重要。
- 圖負責吸引注意,主機清單才能推動行動。每條流都應該連到擁有者能處理的東西。
- 專案筆記裡的下一步:改從工具 API 取資料而不是檔案,並保留歷史紀錄以呈現趨勢。