【SDL最初實踐】安全設計

  • 2019 年 11 月 8 日
  • 筆記

「為了減少產品設計帶來的安全隱患,避免後續發現問題時,對功能實現流程甚至程式架構大刀闊斧改動帶來高昂代價。在產品設計階段,需要加入必要的安全活動,減少並消除產品安全隱患,縱深提升業務安全能力。」

01

—

安全目標

安全團隊可以通過引導相關責任人進行自檢,要求輸出安全檢查結果,並推動落實安全整改項來開展安全活動。在此過程中,需關注以下四個基本要素:

  • 安全介入時間:產品設計階段。
  • 推薦執行角色:產品設計人員或技術架構師(一般而言技術架構師,即開發總負責人。產品中會涉及不同功能模組,若是不同的開發獨立負責,則需要開發總負責人組織各開發進行安全自查、統一回饋)。
  • 安全自檢產物:安全設計checklist自檢報告。
  • 安全驗收標準:自檢報告中不存在不符合項;對於不符合項需制定相應解決方案並落地解決。

02

—

安全活動

在產品設計階段,安全活動主要圍繞設計要求、減小攻擊面和威脅建模展開。

1)確定設計要求

從隱私和安全形度兩方面進行考慮:

  • 基本隱私設計:明確國家法律法規,對獲取、記錄用戶隱私的相關產品做出設計要求。(在告知用戶並徵得同意的情況下,僅收集程式必須用到的隱私數據。)
  • 基本安全設計:分為默認安全(在程式的默認配置中,需進行安全配置,確保程式初始狀態是安全的)和最低加密(在程式處理之前,對所有數據進行嚴格驗證或通過加密方式進行可靠地傳輸)。

2)減少攻擊面

盡量減少暴露給惡意用戶可能訪問到的程式相關資源,包括但不僅限於埠、介面、服務、協議。

  • 系統服務最小原則:可以是安全域劃分、測試域名內網化,也可以是同一個應用(war包)僅允許發布在一個域名等運維安全相關舉措。
  • 應用最小許可權原則:評估實現程式功能所需的網路訪問最小許可權、程式運行的最小訪問級別、邊界防火牆埠最小化,從而建立按最小需求分配相應的許可權機制。
  • 分層防禦原則:在程式的不同層面實施安全方案,不同方案間需要相互配合構成一個整體,在解決根本性問題時需要實施針對性的安全方案。

3)威脅建模

威脅建模是一種分析應用程式威脅的方法,可識別潛在的安全問題並實施相應解決或緩解措施。通常使用微軟提出的STRIDE威脅等級分類法,將威脅分為:Spoofing(仿冒)、Tampering(篡改)、Repudiation(否認)、Information Disclosure(資訊泄漏)、Denial ofService(拒絕服務)和 Elevation ofPrivilege(許可權提升)六部分。

上述六大威脅所表示的定義、安全屬性、消減措施可參照下表:

此外微軟官方還提供了免費的威脅建模工具,可作為平時研究使用。

03

—

安全實踐

在實際的安全活動中,一般採用安全設計checklist + 威脅建模的模式。

  • 針對一般業務系統功能的新增、迭代等變更,可降低安全要求暫不做威脅建模,重點圍繞安全設計checklist展開;
  • 針對存在重大安全風險的環境、核心業務系統、業務系統通用功能等業務場景,可按需進行威脅分析與建模(威脅建模存在厚重、耗時長、技術門檻高等難題,不太適合企業所有的業務場景)。

由此,安全設計checklist便是安全設計階段的重中之重。一套好的安全檢查項,並不是大而全,而是小而精且有效、業務方好理解。關於安全設計checklist的設計與內容,除了緊貼設計要求、安全編碼規範、安全測試等後續安全活動反哺外,還可以參照一些互聯網上的優秀案例。比如,美的金融SDL安全設計checklist:

又如,VIPKID產品設計與開發安全紅線:

此外,還可以針對角色的不同,製作內容一致表現形式不同的安全檢查項。比如從業務方視角:

又如,從安全形度出發:

04

—

持續優化

安全設計需要一定的積累和嘗試,才能總結出一套可落地、有效的安全流程與解決方案。在實踐過程中,發現一些比較行之有效的做法:

1)宣貫會上搜集業務方切身需求與體會

通過定期召開「安全評估流程」宣貫,不斷搜集來自前端開發、後端開發、產品設計人員等不同參與人員的建議,持續優化現有安全設計checklist。

  • 前端程式碼和後端程式碼需要精細優化,分別制定安全設計checklist或在現有表格中做明顯區分;
  • 針對企業系統的特點,對於統一功能單獨制定安全設計要求,不需要在每個系統中都要求開發來填寫相關設計項,比如:單點登錄、會員修改/重置密碼;
  • 針對性對產品設計人員進行專業培訓,選取一些常見的、工作中發現的案例進行分享,可以是某一功能實現的流程分析強調發現的安全問題;
  • 推行產品設計安全規範,類似於開發安全規範,從安全設計階段進行取材,制定公司(業務)特有的「安全紅線」。

2)從後續安全活動中吸取經驗,反哺安全設計檢查項

在其後的環節,特別是程式碼審計和安全測試發現的漏洞與安全缺陷,可以反推到安全設計階段,不斷優化、持續補強針對某一重要系統或某一通用功能的專屬安全設計checklist。

3)擴大相關責任人範圍,銜接安全開發

如果僅聚焦於產品設計師可能帶來的安全問題,往往難以滿足在該階段的期望(產品設計師輸出產品功能原型圖、業務流程圖,具體功能實現便交由開發)。從降低安全活動帶來的成本與打通SDL流程的角度考慮,需要將安全編碼的理念提前一部分加入到安全設計階段,因此該階段關注的人物對象便是產品設計人員、開發人員。

Tags: