【資安工具專欄】選擇靜態分析工具(SAST) 的 6 大評估項目
該如何挑選擇靜態分析工具(SAST, static application security testing) 是安全專家、 稽核人員、開發人員都會面臨的問題。選擇一 個好的工具需要考量不同的層面,以下為挑選 工具時的需求:
- 支援語言 確認SAST 工具支援所使用的語言。
- 存取原始碼及binary code 部份SAST 工具只會檢測原始碼,但有 些會連同binary 一同處處理。相較於原始碼檢測,binary 檢測需連同建置環境一併提供,以便進行檢測。
- 部署 確認SAST 工具作業方式:於單位內部或是採用雲端架構。
- 對於組織內部程式碼安全訂定責任歸屬 定義在組織中如何管控程式碼的安全性。如有個團隊〈審核團隊、資訊安全團隊〉專職負責組織內的安全事務。另一方面也有組織認為每個開發團隊都需要專人負責安全。這些管理政策將影響SAST工具的部屬架構、授權與工具的用法。
階段1:安裝
簡易安裝,應包含以下步驟。
- 資源:工具安裝為自動安裝還是手動安裝。 若手動安裝,需考量所需的技能以及安裝 工時。
- 彈性:若為用戶端軟體,需安裝在每個終 端的設備中,並要求每位開發團隊暫時無法作業,以便進行安裝。另一種集中管理 的安裝只需進行一次。
- 授權:有些軟體授權是各終端設備皆需計 算license 授權。有些則是集中管理,如此 可減少購買大量授權的需求。
階段2:設定
需考量以下2 個因素。
- 困難度及複雜度:
- 單純:檢測工作需越簡單越好,不應加重使用者的工作量。
- 語言的擴展性:是否可不需修改設定即可支援新的語言。
- 檢測時間:無論任何的工具,皆須花費時間檢測。建議考量工具的特性或不同的檢測方法,讓花費的時間有機會加速,如對於開發團隊來說,大型專案中會需要只先 針對專案中部份程式檢測。
階段3:檢測能力
檢測功能包含。
- 語言支援範圍:工具應不只包含現有的語言,應考量未來新語言的擴充。像是行動 裝置或是發展中的語言(Android, Objective C, Ruby on Rails)
- Framework的支援範圍:支援framework 讓SAST 工具更能識別原始碼的弱點以及減少因為不認得framework 造成的誤判。
- 多個檢測:同時運行數個掃描或是支援多工處理。
- 弱點涵蓋率:SAST 工具應包含以下類型的弱點:
- 技術安全弱點:偵測已定義常見弱點如 OWASP TOP 10, SANS, CWE。由於每種工具的分類方式不同,因此可以符合上述常見弱點分類來做為弱點涵蓋率比較。
- 商業邏輯缺陷:包含應用系統中的驗證方式或是後門程式。 最佳撰寫實務:例如錯誤處理與資源競爭。
- 最佳撰寫實務:例如錯誤處理與資源競爭。
- 結果的準確性:為確保結果的精準性, 工具應將檢測結果與已知驗證案例比對。 通常會使用OWASP WebGoat 專案做為驗 證案例。然而,真正困難的是針對一個未 知的應用系統來進行檢測,並能主動調整 測試環境以防止發生以下情況:
- True Positives (TPs) 的數量:事實為真,猜測也為真,則為正確猜對
- False Positives (FPs) 的數量:事實為假,猜 測為真,則為誤報。現今沒有一個工具能 輸出完全無 FP 的檢測,但仍會以最少數 量的FP 為目標。
- 客製化能力:能適應不同程式frameworks 與商業邏輯產生檢測結果。每個組織內採 用的framework、資料庫與驗證涵式都不 盡相同,工具必須能客製調整檢測規則, 以減少誤報(FPs)。
階段4:結果管理
檢測結果需要清楚且能快速解決問題。
- 結果分析與管理工具:結果分析應即時 提供使用者相關安全情報與工具來修復問題。
- 報表:應提供多層次的報告。
階段5:與SDLC 的整合
在軟體開發生命周期(SDLC) 中進行程式碼邏輯與技術分析。
- SDLC 模型—應包含:
- SDLC 整合—SAST 工具應要能無痛併入作 業流程中。不僅節省開發人員時間,使安全變成開發流程的一部份。建議整合的部份包含:
階段6:供應商的支援
工具購買後並不是結束。而是一個持續的過程。如同任何的工具,購買後可能會 有使用上的問題、最佳的做法或客製化 的部份。皆需考量到供應商提供的服務。
- 匯整檢測結果:將同一專案的所有檢測 結果匯總在一起的能力。
- 弱點流程:提供弱點的程式碼流程,幫助開發人員了解弱點的流程及其意義。
- 最佳修復位置:提供文字或圖像的最佳弱 點描述。如精準的說明有相依性的問題,修復某特定位置即能同時處理多個弱點。
- 標記與過濾能力:可以依據政策對結果分群,並排列出優先順序。此外也提供篩選 的功能輔助結果閱讀。
- 專案結果追蹤:工具需能持續追蹤專案中 每次檢測的弱點狀態。
- 檢測比較:工具應可比較不同的檢測結果,以便監控弱點狀態。
- 儀表板:提供執行摘要等概觀資訊。
- 報表內容:提供檢測配置資訊與結果。
- 早期檢測:盡早在開發過程中進行安全漏洞程式修補。工具應能提供無論程式是否 已編譯,皆可進行檢測的能力。
- 支援敏捷式開發與持續發展環境:敏捷與持續發展( 又名為DevOps) 要求短時間內 需完成掃描並無法忍受任何的延遲 ( 檢測花費的時間及修復時間)。因此工具需整合至開發環境中以便開發人員可執行檢測。
- 再次檢測:可只針對異動部份的程式碼進行檢測,無須再次檢測已分析過的檔案。
- 開發環境:SAST 工具要能無縫融入開發環 境中如Visual Studio、Eclipse 或IntelliJ。
- 建置管理工具:如Bamboo, Jenkins, Maven 及Ant。
- 版本控管工具: 如GIT, SVN, TFS, Mercurial, ClearCase。部份的SAST 工具不 需透過建置管理工具,即可直接整合版本 控管工具。
- Bug 追蹤系統:工具應要能將檢測結果匯入 Bug 追蹤系統,可依據弱點的嚴重性及其他 工作項目安排修復進度。
- 檢測規則及政策可否依客戶企業調整設定。
- 技術人員的支援及教育訓練。
- 在導入及使用 SAST 工具的整個期間,應能回覆客戶的詢問。
- 組織中軟體開發生命周期與 SAST 工具的整合。