[資安小常識] 如何安全地開發軟體及應用程式
作者:Cho-Han Wu
圖一、 使用微軟SDL的比例統計 (圖片來源)
根據最新的 Trust in Computing 報告 (註1)指出, 42% 的開發者在開發軟體或是應用程式時並非把資訊安全當成最優先考慮的因素。且雖然使用安全的軟體發展過程被視為是減少軟體遭受攻擊的有效方法,仍有 44% 的開發者並不使用。不使用的原因包括了:1) 花費 (34%)。 2)缺乏技術資源 (33%)。 3) 缺乏主管的同意 (24%) 等等。
在安全的軟體開發過程的使用者中,又以使用安全性開發生命週期(Security Development Lifecycle, SDL) 的比例最多(47%),故本期資安小常識將針對微軟的 SDL 做一個統整性的介紹。
圖二、微軟安全性開發生命週期(SDL) (圖片來源)
微軟提出的安全性開發生命週期 (SDL)主要分成七個階段:
1. 訓練階段
在這個階段需要建立一些基礎的概念,微軟建議相關的開發人員每一年都應接受一次的資安訓練課程。以下提供了一些各階段的相關參考資料:包括了SDL 模式的緒論(英文)、軟體的安全性設計(英文)、將可能的威脅模式化(英文)、撰寫及測試安全的程式碼(英文)、並找出維護隱私的實作方法(英文)。
2. 建立需求階段
在執行計畫之前需要先定義並整合此應用程式的資安和隱私最基本的需求,確立一個清楚的目標或里程碑,以減少執行計畫時的可能被分散的風險。並且建立一套資安漏洞的追蹤系統,並指派專門的資安專員來處理。
針對需求的建立方法,可以參考以下資料:資安需求問卷(英文)、Visual Studio Team System的SDL模版、如何區分資安漏洞的強度(英文)、資安風險評估(英文)。
3. 設計階段
確認需求之後,必須要設計一套完整且結構性的途徑,此設計必須避免系統潛在的資安漏洞暴露於攻擊者之中,或是將可能的危害減為最低。完成此階段的設計之後,可使得往後的開發更有效率並減少不必要的花費。針對此階段的建立方法,可以參考以下資料:避免將程式碼暴露於不信任的使用者中(英文)、減少可能的攻擊(英文)、利用STRIDE方法設計更好的資安模組(英文)、防火牆的設定及需求(英文)。
4. 實行階段
此階段主要的目的是讓開發者可以在安全的環境下開發應用程式,避免資安漏洞的產生。透過限制並篩選開發者使用的工具、編譯器、及API等,可以用較少的成本塑造安全的開發環境。另外,定期的分析、檢查原始碼中是否有不安全的片段,也可達到開發環境安全的目的。以下是實行本階段可參考的資料:安全的編譯器及開發工具(英文)、SDL禁止使用的函式(英文)、介紹Strsafe.h(英文)、C/C++的程式碼品質分析器(英文)、.NET程式碼分析工具(英文)。
5. 確認階段
此階段主要是確認完成的程式碼是否符合先前訂定的需求,並利用一些工具來進行執行階段 (run-time) 的分析及模糊測試(Fuzz testing)來確保程式在使用時不會出現重大資安問題。另外,使用微軟提供的弱點分析軟體 (Attack Surface Analyzer) (英文) 也可減少系統可能遭受到的威脅。以下工具可以協助您完成此階段的目的:微軟應用程式驗證工具(英文)、Visual Studio Team System 測試介面提供者、規則運算式拒絕服務攻擊與防禦。
6. 發行階段
此階段主要是進行發行前的最後準備。其中又包括了研擬資安事件回應計畫(Incident response plan),如建立資安的緊急聯絡窗口以及提供資安維修服務等。此外,還需進行最終的資安回顧Final Security Review (FSR) 來檢查先前在需求階段定義的工具及威脅模組表現得如何。最後,必須確認資安及隱私的需求皆有達成。同時,發行的檔案必須包含規範和說明書、原始碼、特殊符號、威脅模組、緊急反應計畫和授權等。
此階段可以參考的文件如下:SDL 隱私問卷(英文)、SDL隱私提升回應框架範例(英文)、SDL資安分級(英文)
7. 回應階段
發行之後的回應階段主要是回應任何有關軟體威脅和漏洞的回報,並且執行在發行階段策畫的資安事件回應計畫(Incident response plan)。同時在此階段還須定期發布資安更新以及官方授權的資安指導文件等。關於此階段的範例可以參考微軟資安應對中心Microsoft Security Response Center(MSRC) ,此中心即是以此模式營運來監控並解決資安事件。
圖三、(圖片來源)
使用安全性開發生命週期(SDL)可以讓您用更少的成本和時間,有效率地開發出更安全的軟體或應用程式,想要了解更多的SDL資訊以及取得免費的資安監測工具,歡迎前往微軟Security Development Lifecycle (SDL) 網站,或是微軟SDL的官方部落格(英文)。
註一、 Trust in Computing是由微軟委託 comScore 公司訪問了九個國家超過 4,500 位消費者,IT 專業人員以及開發者後,針對受測者對於科技產品、服務、資安以及隱私的信任程度的分析報告。
參考資料
Trust in Computing調查 (英文)
https://download.microsoft.com/download/5/B/B/5BB044A3-897B-4FDA-A827-69240B9E1837/TiC-Dev-July-2013.pdf低於一半以下的開發者使用安全開發過程 (英文)
https://blogs.technet.com/b/security/archive/2013/07/12/trust-in-computing-survey-part-2-less-than-half-of-developers-use-a-security-development-process.aspx微軟軟體開發生命週期如何幫助重大產業確保資訊安全 (英文)
https://aka.ms/a6offt
- 微軟的安全性開發生命週期 (SDL) (英文)
https://www.microsoft.com/security/sdl/default.aspx