我想跟大家分享,我在做這個專案時遇到的另一個大坑。
我在設計整個 Claude Skill 掃描軟體(SDK)的時候,設計了各種防禦方式,也測試了許許多多次的防禦,但我卻漏掉了:我做的軟體本身,對使用者來說可能就是一個最大的漏洞。
像是我的掃描器會讀取 Skill 檔案的內容,也有權限移除 Skill。如果駭客駭進來,他就可能隨意刪掉使用者的 Skill。
所以等到某一天我忽然意識到這件事情的時候,我把整個架構打掉重來,照著安全軟體開發週期(SSDLC)的流程重寫。
因此,我想跟大家介紹安全軟體開發週期的第一個步驟「威脅模型」。
沒寫威脅模型就開工的話,如果你的系統上線了,可能要重做或是上線後去補各種資安漏洞。
所以威脅模型到底是什麼?
就是將你目前對於系統的風險,清楚地描述出來,包括這個系統目前最脆弱的是哪裡、你選擇用什麼樣的方式去防禦這些弱點,以及哪些風險你明確選擇接受。
它的核心是知道自己有哪些攻擊面,以及你打算怎麼回應;它不求涵蓋所有威脅,而是把已知的威脅和你的應對方式講清楚。
以我寫的第一份威脅模型為例,主要包含這五個部分:
系統描述:這個 SDK 保護了什麼、運行在什麼環境,以及有哪些外部依賴。
資料流程圖(DFD):資料從使用者輸入、LLM 呼叫、外部工具呼叫,一路流到外部的完整路徑。流程圖可以用 Mermaid 的方式畫出來。
信任邊界標記:在資料流程圖上明確標出哪些是可信任與不可信任的分界,可以透過顏色或線條來標記。
STRIDE 威脅清單:STRIDE 是六種常見威脅類型的縮寫,為每個模組列出主要的威脅。分析這個模組可能會有什麼樣的脆弱點、駭客如果想駭進來可能會從哪裡著手,以及你該如何對應。
接受的風險(Accepted Risks):明確記錄哪些威脅你選擇不防禦,以及你的原因。
第五點有時候容易被忽略,但因為我自己是做資安相關的,我很清楚很多攻擊在特定情境下完全無法避免、一定會被攻破。重要的是你怎麼透過一層一層的防禦,去釐清哪一層選擇防禦、哪一層選擇不防禦。
把「接受的風險」寫出來,你才會知道遇到哪些資安問題時要特別小心,使用者也才知道你的工具不保護什麼。
下一篇,我會介紹什麼是 STRIDE 威脅清單。