目標系統已經按照確認過的功能規則重新實作,仍然不能只根據程式可以執行就判斷安全性。相同的輸入方式、保存狀態或相依項目,在不同功能中可能造成完全不同的影響。通用安全清單可以提醒常見問題,卻無法代替對實際系統情境的確認。
安全風險分析要說明需要保護甚麼、可能發生甚麼問題、會造成甚麼影響,以及準備如何處理。這項工作也能把「系統要安全」轉換成可以實作與驗證的條件,避免安全要求停留在沒有完成標準的原則。
NIST SP 800-30 Rev. 1將風險評估視為風險管理的一部分,評估結果需要提供足以決定處理方式的資訊。OWASP 的威脅建模(Threat Modeling)說明則將工作整理為建立系統模型、找出可能問題、決定處理方式,以及檢查結果是否足夠。本章會沿用這個順序,但只分析目標系統已確認的構成,不預設所有系統都具有相同架構或威脅。
開始分析前,要先說明這次檢查哪個目標系統版本、哪些功能路徑,以及哪些組成項目。範圍過大時,風險描述容易只剩下「資料可能外洩」或「系統可能被破壞」等籠統句子。範圍過小時,則可能忽略一項功能跨越多個邊界後才出現的影響。
第一次分析可以選擇已經完成實作與功能驗證的代表性路徑,確認方法可以實際執行,再擴大到全部替換範圍。正式切換前,所有納入目標系統的功能、資料與相依項目都要有對應結果,不能只保護最先完成的功能。
每次分析至少要記錄下列範圍資訊:
範圍應該對應目前設計與實作。只使用早期架構圖或遺留系統的組成推測目標系統,可能會分析已經移除的路徑,也可能漏掉重新設計後新增的互動方式。
安全風險要先連回具體保護目標。依照NIST 對資訊安全的說明,可以從機密性(Confidentiality)、完整性(Integrity)與可用性(Availability)三個角度確認影響:
| 保護目標 | 需要確認的問題 |
|---|---|
| 機密性 | 哪些內容只能由經過允許的對象或流程取得,外洩後會造成甚麼影響? |
| 完整性 | 哪些內容、狀態或處理結果不能被未預期地建立、修改或刪除? |
| 可用性 | 哪些功能需要在指定條件與時間內完成,無法執行時會中斷哪些後續工作? |
三項目標的重要程度要按照實際用途判斷。公開輸出可能沒有機密性要求,內容遭修改仍會破壞完整性。偶爾執行的轉換功能也可能具有固定完成期限,因此仍要確認可用性。不能因為資料不敏感,就直接判定相關功能沒有安全風險。
可以從已確認的功能規格、資料流向與資料保留決定,列出下列內容:
這份清單只記錄類型、用途與保護需求,不放入密碼、權杖、憑證、私密金鑰或其他可直接使用的敏感內容。
知道需要保護的內容後,接著追查它如何進入系統、在哪裡改變,以及最後提供給誰。原有的系統環境圖、資料流向與功能流程可以直接作為起點,不必為安全分析重新建立一套互不相連的文件。
追查時要標示下列位置:
| 位置 | 需要確認的內容 |
|---|---|
| 輸入來源 | 內容由誰或哪個相依項目提供,系統目前依據甚麼條件接受? |
| 處理步驟 | 哪些判斷或轉換會影響功能結果,錯誤內容可能傳到哪裡? |
| 狀態變更 | 哪些內容會被建立、修改或刪除,失敗時是否留下部分結果? |
| 相依項目 | 目標系統信任哪些回傳內容、失敗訊號、版本或執行設定? |
| 輸出位置 | 結果會提供給哪些對象或後續處理,是否包含不需要的內容? |
內容跨越不同信任條件的位置可以標示為信任邊界(Trust Boundary)。例如,內容從外部檔案進入系統、原本只能讀取內容的流程要求修改保存狀態,或目標系統把資料傳給由其他責任範圍維護的相依項目,都需要重新確認輸入能否信任及輸出可以揭露到甚麼程度。
信任邊界不代表系統一定使用網路或分散式架構。同一執行環境中的檔案、不同功能模組、執行設定與人工匯入內容,也可能具有不同信任條件。判斷依據是內容來源、可修改對象與保護責任是否改變。
只記錄「輸入未驗證」、「缺少加密」或「相依項目不安全」,還無法判斷真正影響。這些描述指出可能的缺口,卻沒有說明缺口會在哪項功能中造成甚麼結果。
一項風險情境應該包含四個部分:
例如,目標系統確實具有檔案匯入功能時,可以記錄:「來源檔案在核准後、匯入前仍可被其他流程修改。目標系統如果直接按照修改後內容更新保存狀態,可能產生未經確認的結果,影響資料完整性與後續輸出。」這項描述包含具體時間點、變更方式與影響,後續才能決定要限制來源、核對內容、隔離處理,或採用其他符合需求的方式。
分析時可以從下列問題展開,但只保留符合實際系統構成的情境:
安全風險可能來自刻意行為,也可能來自設定錯誤、操作失誤或相依項目異常。記錄時要保留實際原因,不把所有失敗都描述成攻擊,也不要因為沒有觀察到攻擊就忽略可以預見的安全影響。
風險清單需要讓後續人員知道為甚麼要處理,以及如何確認處理結果。每一列應該對應一個條件、事件與影響相同的風險情境。如果同一個輸入缺口可能造成資料外洩與功能中斷,而且兩者的處理方式不同,就要拆成不同項目。
| 欄位 | 記錄內容 |
|---|---|
| 風險識別碼 | 使用固定且可引用的識別碼,例如 SEC-IMPORT-01。 |
| 適用範圍 | 對應的系統版本、功能、資料流向及邊界。 |
| 風險情境 | 成立條件、可能事件及受影響結果。 |
| 保護目標 | 受影響的機密性、完整性、可用性或其他已確認需求。 |
| 現有保護方式 | 目前已經存在的限制,以及仍然無法處理的部分。 |
| 優先度 | 發生可能性、影響程度、判斷依據及資訊不足之處。 |
| 處理決定 | 準備移除風險來源、降低風險、由其他已確認機制承擔特定保護責任,或接受剩餘風險的內容。 |
| 檢查方式 | 可以判斷處理結果是否成立的測試、審查或執行結果。 |
| 重新檢查條件 | 哪些功能、資料、相依項目或環境變更後要重新分析。 |
風險識別碼要能連回功能規格、實作與測試,不需要把所有資訊重複寫入同一份表格。相關文件只要保存識別碼及必要摘要,就能在需求或實作改變時找出需要一起更新的位置。
風險優先度用來決定先處理哪些問題,以及哪些項目會阻擋目標系統切換。它不能只沿用掃描工具的嚴重程度,也不能因為某個問題容易修正就自動列為最高優先。
評估發生可能性時,可以確認風險需要哪些前提、相關邊界會被接觸多少次、目前保護方式是否有效,以及過去是否出現相同情況。評估影響時,則要確認受影響的功能、內容、後續處理與恢復難度。影響範圍不同的情境應該分開記錄,避免使用單一分數掩蓋差異。
如果資訊不足,應該明確標示未知項目與補充方式。例如,尚未確認外部輸入是否具有來源核對機制時,可以先檢查實際交換流程,不能直接把可能性填成「低」。高影響且資訊不足的項目,通常要先取得更多資訊或採取暫時限制,再決定是否接受。
使用高、中、低等分級時,每一級都要有共同定義。相同情境在不同人員判斷下如果會得到完全不同的結果,表示分級條件仍不夠清楚。分數或矩陣可以協助排序,最後仍要保留成立條件、影響及判斷依據。
每項已確認風險都要有處理決定。可以按照需求與限制選擇下列方向:
把責任交給其他相依項目,不代表目標系統不再受影響。仍要確認該項目提供哪些保護、失效時如何處理,以及目標系統是否需要自行驗證結果。無法確認處理方式或影響的未知項目,也不能直接視為已接受風險。
保護方式要對應具體情境。輸入驗證無法解決執行設定遭非預期修改,執行紀錄也不能防止敏感內容被錯誤輸出。選擇方式時要說明它降低哪個成立條件或影響,並確認沒有產生新的功能錯誤或可用性問題。
「加強驗證」、「妥善保護資料」或「避免服務中斷」都無法直接判斷是否完成。處理決定需要改寫成具有前提、動作與預期結果的條件,再交由對應實作與後續測試確認。
例如,可以將風險轉換成下列條件:
| 風險情境 | 可檢查條件 |
|---|---|
| 輸入超出已確認範圍,可能耗盡處理能力 | 系統會在進入主要處理前拒絕超出限制的內容,並且不留下部分狀態。 |
| 錯誤輸出可能包含敏感內容 | 錯誤結果與執行紀錄只包含定位問題所需的欄位,不包含原始敏感內容。 |
| 相依項目失效可能造成不完整結果 | 失效案例具有已定義的回復或停止結果,重複執行不會產生未預期變更。 |
| 執行設定遭非預期修改可能改變功能結果 | 設定具有明確來源、可接受範圍與載入檢查,無效設定不會啟動相關功能。 |
每項條件要連回風險識別碼。後續章節設計輸入驗證、異常處理及測試時,就能從同一項風險確認正常、失敗與邊界案例。實作完成後也要保存檢查結果,不能只把風險項目改成完成狀態。
NIST Cybersecurity Framework 2.0提供用來理解、評估、安排優先度與溝通安全成果的共同分類,但不規定每個系統必須採用相同實作。目標系統仍要按照自身功能、限制與風險情境選擇保護方式。
採取保護方式後,風險可能降低,但不一定完全消失。剩餘風險(Residual Risk)要說明目前仍可能發生的情況、造成的影響,以及為甚麼現有結果可以接受。
例如,限制單次輸入大小可以降低處理能力被占滿的可能性,仍可能出現大量符合單次限制的重複輸入。是否需要再限制執行頻率、調整處理方式或接受目前結果,要按照功能用途與實際使用範圍決定。
接受剩餘風險時,至少要記錄下列資訊:
接受決定只適用於記錄中的版本與範圍。需求、資料敏感程度或系統邊界改變後,原有決定不能自動沿用。
安全風險分析需要和目標系統一起維護。OWASP 的威脅建模說明強調,模型要隨系統持續更新,不能在設計階段完成一次後就停止維護。
出現下列變更時,應該重新檢查相關風險:
更新時要保留風險識別碼與修訂紀錄,讓需求、實作及測試可以追蹤同一項問題。如果情境已經不存在,可以記錄關閉原因與確認結果,不必讓失效項目永久留在目前清單中。
完成一輪分析後,可以使用下列問題確認結果: