筆記: 初探 Security Development Lifecycle (SDL)

Swagger
10 min readJan 10, 2024

--

最近客人想要瞭解公司SDL實施的程度.因此接觸了相關的資料,才發覺許多公司都揭露相當多且完整的作法.不過,如果不是經常有接觸相關資訊或公司已有相當完善的程序.我以粗淺的認知,寫下心得. 如果有興趣更深入,可以點擊Mircosoft 官網.

安全開發生命週期(SDL)是一個幫助軟體開發相關人員在專案執行過程中, 從一開始就將安全考量在程式設計時, 符合設計規範和應該注意細節的部分。目的在最小化漏洞並將安全措施作為軟體開發的基本部分而不是事後patch的框架。通過整合 SDL,開發人員可以確保他們的軟體從第一行代碼開始就對威脅具有基本的防禦,從而為用戶和企業創造更安全的服務.

要實施SDL流程,有幾個重要的階段.這些階段就是在為你所寫的代碼過程一步步建立起安全機制.

SDL實施階段:

  1. 需求階段: 在這個階段,是學習如何識別和防範安全威脅, 研發團隊會根據客戶及產品需求, 依照下列所涵蓋主要法規及標準將所需處理的資料類型、已知的威脅、最佳做法來定義這些需求

. NIST網絡安全框架( NIST Cybersecurity Framework): 由美國國家標準技研究院所頒布, 是一套用於企業網絡安全的指南, 包含識別(Identify)、防護(Protect)、偵測(Detect)、回應(Response)與復原(Recover)五個功能,已正式將此5個功能之防禦概念,放入ISO/IEC 27002:2022資訊安全、網路安全及隱私保護的控制措施中. 期望幫助更多不同企業、類型與規模的組織應對網路安全挑戰.

. 產品資安事件應變小組(PSIRT): PSIRT這份文件目的是,指導企業內如何建立一個組織,管理產品、解決方案、零組件,以及服務,所面臨的資安漏洞和引發的相關資安風險,內容涵蓋了利益參與者管理、漏洞發現、分類、分析、補救、披露和培訓等方面.

. 卓越代碼軟體保障論壇(SAFECode): 是一個非營利性、全球性、行業主導的組織,SAFECode組織發佈了「安全軟體開發的基本實踐:安全開發生命周期計劃的基本要素」指南, 它涵蓋了識別和管理應用程序安全控制、安全設計原則、威脅建模、安全編碼實踐以及處理第三方組件風險等主題。文件強調了在整個軟件開發生命週期(SDL)的所有階段採取綜合方法的重要性,包括設計、編碼、測試和管理漏洞.

. 美國商務部國家電信資訊管理局 (NITA): 美國國家電信暨資訊管理局從2019年開始起草並核定了一系列的文件,提供SBOM (Software Bill of Material)相關資訊與指引. SBOM用來描述軟體的組成架構、內容、生產與整合軌跡,以提供軟體組成透明性. 其中一個最常被採用的關鍵技術即是韌體掃描與分析。

. 開放網路軟體安全計畫,簡稱OWASP (Open Web Application Security Project)是一個開放社群、非營利性組織,其主要目標是研議協助解決網路軟體安全之標準、工具與技術文件,長期致力於協助政府或企業瞭解並改善應用程式的安全性. 其中最知名的 OWASP Top 10(OWASP十大網路應用系統安全弱點), OWASP TOP 10 平均 3–5 年會更新一次. OWASP Top10之主要目的,是將最常見的網路應用系統安全弱點歸納, 排名並提供基本方法讓開發者(Developers)、設計者(Designers)、架構師(Architects)和組織(Organizations) 保護防止這些弱點. OWASP Top 10 2021 包括 Broken Access Control, Cryptographic Failures, Injection, Insecure Design, Security Misconfiguration, Vulnerable and Outdated Components, Identification and Authentication Failures, Software and Data Integrity Failures, Security Logging and Monitoring Failures, Server-Side Request Forgery.

l. ISO/IEC 27001 它是一套完整的資訊安全管理國際標準, 也是目前國際上最廣泛使用, 簡單來說,ISO/IEC 27001可協助企業機構建立起資訊安全管理系統的機密性、完整性與可用性,以確保資訊資產的安全、降低未來資料外洩的損失.

2. 開發階段: 一旦定義了安全性、隱私性和功能性要求,確定安全目標並進行風險評估。為產品制定包含威脅模型的安全計劃及檢查清單. 創建威脅模型是為了幫助根據風險識別、分類和評估潛在威脅。當軟體發生變化時,必須在每個產品的整個生命週期中維護和更新威脅模型。接下來, 就可以開始軟體的開發, 而在開發過程中需要注意下列事項在編碼過程中. Note: 評估威脅模型可使用 Microsoft Threat Modeling Tool

. 使用安全編碼標準,進行靜態和動態代碼分析,確保安全性融入軟體架構.並使用類似Microsoft Visual Studio等工具進行代碼分析。

. 安全的代碼儲存:將代碼儲存在安全、受限的代碼庫中並建立創建軟件物料清單 (SBOM)

. Web design: 不使用deprecated/vulnerable protocols, 使用HTTPS, 使用推薦的密鑰和協議(例如TLS)

. 編碼:對所有代碼進行威脅建模, 在代碼執行中應用最小權限原則, 預防常見的網絡漏洞 (e.g., XSS, CSRF, clickjacking), sudo in Linux 在開發時.

. 認證:確保身份存儲庫安全,適當管理權限和訪問控制, 結合使用多因素認證(如結合密碼和手機短信驗證碼), 定期審核和更新認證方式,確保符合最新安全標準.

. 日誌 (Audit logging): 實施全面的日誌策略,涵蓋所有安全相關事件,包括登入嘗試、訪問控制事件、系統警告和錯誤, 確保日誌包含詳細信息,如用戶ID、事件時間(UTC)、操作類型、影響的系統或資源, 實施日誌的完整性和保密性保護措施以防止未授權訪問和篡改, 定期檢查日誌並利用自動化工具進行異常行為分析和報告.

. 密碼算法(Cryptography): 如果需要開發加密算法時使用至少128位強度的演算法, 使用強隨機數生成器.

3. 第三方軟體的風險評估階段: 評估每個使用到的第三方軟體的安全風險,包括其漏洞歷史和供應商的安全實踐是否一樣具合規性和遵循標準和法規.以下為需注意的地方.

. 定期安全更新和補丁(patch)管理:實施定期更新第三方軟體和應用安全補丁的流程。

. Code review: 對第三方代碼進行全面審查,以尋找潛在的安全漏洞.

. 處理敏感數據:確保處理敏感數據的第三方組件安全且符合數據保護法規.

. 依賴性跟踪:持有對所有第三方軟體其使用的軟件元件的清單,以有效管理潛在漏洞.

4. 驗證階段: 在正式發行任何程式碼之前,必須先進行數次檢查和核准,以確認程式碼符合 SDL、符合設計需求,而且沒有程式碼撰寫錯誤.

. 手動檢閱: 檢閱者與開發程式碼工程師是不同的,可確保同一個人無法撰寫和釋放任何程式碼,而導致潛在的意外或惡意傷害.

. 自動化檢查: 自動化檢查會內建在認可之pipeline,在編譯時分析程式碼時或是以自動化方式來測試產品功能以驗證安全特性.

. 其他的檢查方式有靜態程式碼分析, 二進位分析, 模糊測試, 漏洞掃描, 網絡安全測試, 惡意軟件掃描, 獨立滲透測試等.

如果手動檢查或自動化檢查在程式碼中發現任何問題,提交者將會收到通知,而且必須先進行必要的變更,才能再次提交以供檢查.

5. 發布階段:

. 在通過所有必需的安全測試和審查後, 並總結其安全狀態. 並解決已知嚴重的安全漏洞. 如果風險不能完全修復,則可能需要額外的緩解措施. 除此之外, 應進行根本原因分析。這可能是開發、培訓或工具中的不足所引起的. 並紀錄在文件中.

6. 維護階段:

. 在發布後, 跟蹤並修復或緩解與已識別漏洞相關的風險, 以便進行漏洞修復活動 (例如應用安全更新和補丁), 一旦所有修復措施到位,通過安全通告和公告等向客戶傳達.

. SDL計劃應包括一個持續改進的反饋循環,使用從根本原因分析和修復過程中獲得的信息來防止新產品或更新產品中出現類似漏洞.

實施SDL面臨的挑戰

  1. 複雜性和資源分配:實施SDL會增加開發過程的複雜性。這需要額外的時間、人員和預算資源,對於資源有限的小型組織或團隊來說尤其具有挑戰性。

2. 跟上不斷變化的威脅: 網絡安全環境不斷變化,新威脅不斷出現。持續更新SDL實踐以應對這些變化需要不斷學習、適應性和警惕性。

3. 將SDL整合到現有工作流程中:將SDL實踐整合到現有開發工作流程中可能很有挑戰性,特別是在有固定流程的組織中。這通常需要在文化、心態和日常操作上進行重大變革。

4. 培訓和技能發展:確保所有團隊成員都具備實施SDL實踐所需的技能和知識是一個挑戰。持續的培訓和意識提升計劃是必需的,但可能需要大量資源。

5. 管理第三方組件:隨著軟件越來越依賴第三方組件,管理這些組件的安全成為一項關鍵挑戰。這包括監控漏洞、確保遵守安全政策和管理更新。

6. 有效的漏洞響應和披露:發展和維護有效的漏洞響應和披露流程是一項挑戰。這需要明確的溝通渠道、及時的反應和與包括客戶在內的各方利益相關者的協調。

7. 衡量SDL效果:量化SDL實踐的有效性是困難的。減少漏洞或通過早期檢測節省的成本等指標並不總是容易計算,使得證明投資SDL實踐的價值變得具有挑戰性。

8. 平衡安全性和開發目標:在堅固的安全措施和開發速度及敏捷性之間取得平衡是一個持續的挑戰。在不妨礙開發過程的情況下,在安全性和功能性之間找到合適的平衡至關重要。

9. 全球和法規合規:確保遵守各種全球和地區法規(如GDPR、CCPA或特定行業標準)為SDL實施增加了另一層複雜性。

10. 技術和工具整合:選擇和整合支持SDL實踐的正確工具(如靜態和動態分析工具)可能具有挑戰性。工具必須與現有系統兼容,並能有效識別潛在的安全問題。

解決這些挑戰需要一個完整的策略、高層支持、跨功能合作,以及將安全作為軟體開發的基本方面的文化。

案例研究

  1. 微軟的SDL:
    微軟通常被引用為成功實施SDL的典範。微軟的 SDL 分為五個階段:需求、設計、實作、驗證和發行。微軟在找出相關的安全性需求後, 會做風險評估, 為開發人員提供的安全培訓, 依威脅建模, 工程師會在程式碼中實作 SDL 和靜態代碼分析、和在發布前進行的強制性安全審查。
  2. 思科的安全開發生命周期:
    思科實施SDL,以確保其產品安全可靠。思科的SDL流程包括嚴格的安全測試、自動化和手動代碼審查、漏洞測試和持續的威脅監控。思科還設有專門的產品安全事件響應團隊(PSIRT)來管理發布後的漏洞和事件。

總結

  1. 主動性風險管理:強調SDL在早期開發過程中識別和緩解風險的作用,導致更安全的結果,並減少昂貴的發布後修補的可能性。
  2. 遵守法規:確保符合各種安全標準和法規,這對於企業避免法律和財務懲罰至關重要.
  3. 品牌聲譽:實施SDL有助於建立客戶信任並保護企業的聲譽.
  4. 成本效益:通過預防安全漏洞並減少廣泛修復工作的需求,從而節省成本.
  5. 培訓和意識:投資於開發人員、測試人員和相關利益相關者的培訓和意識計劃,以確保他們理解SDL實施及其重要性.
  6. 制定SDL指南和政策:創建適合組織特定需求和工作流程的全面SDL指南和政策。
  7. 定期審查和更新SDL實踐:建立一個流程,定期審查和更新SDL實施方式,以適應安全威脅和技術變化.

--

--