資料整理來源:

CSSLP證照:針對參與軟體開發生命週期(SDLC)所有人員量身訂作的資安證照

背景

  • 弱點來源
    • 網路層:佔7成,有2%是高風險弱點
    • 應用層:佔3成,有20%是高風險弱點
  • 軟體開發的困境
    • 功能需求第一
    • 專案時程趕工
    • 基於以上,安全性需求往往會被犧牲(無視)
  • 軟體開發基礎

SSDLC方法論

軟體安全成熟度

  • 新思科技(Synopsys) - Building Security In Maturity Model(BSIMM)
  • OWASP - Security Assurance Maturity Model(SAMM)

(1)需求分析:發展及萃取安全需求

可直接套規範要求:附表十、資通系統防護基準(七大構面)

  • 外部需求
    • 法規遵循:國內外相關安全標準或法規
    • 業界標準:業界遵循之標準或Best Practice
      • OWASP
      • NIST
      • CWE
  • 內部需求
    • 資安政策
    • 業務需求
    • 事件案例
    • 營運衝擊分析(BIA):識別RTO/RPO。
    • 一般性安全需求(軟體安全特性):機密性、完整性、可用性、身分認證(鑑別)、授權、稽核、會話管理、錯誤及例外處理、組態管理。
  • 需求追蹤管理:需求追溯矩陣(Requirements Traceability Matrix, RTM)

(2)設計階段:設定安全控制項 (風險控管)

  • 資產盤點:了解你要保護什麼 (系統分級評估)
  • 風險分析及處理
    • 整理Attack Surfaces
      • API介面安全
  • 方法論:威脅模型(Threat Modeling)分析
    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More →
  • 安全設計準則
    • External Systems are Insecure (零信任,系統外部不安全)

      對於任何使用者的輸入都要先白名單過濾後,再過濾黑名單。
      所以檢查都要在伺服器端做,JavaScript的過濾會被Bypass掉。

      Image Not Showing Possible Reasons
      • The image was uploaded to a note which you don't have access to
      • The note which the image was originally uploaded to has been deleted
      Learn More →

    • Minimize Attack Surface Area (縮小可攻擊的面)
      • 增加暴力破解(字典檔攻擊)的難度
        • 帳號鎖定機制
        • 密碼強度檢查
        • 圖形驗證碼
        • 多因子認證
      • 密碼定期更換政策實作
        Image Not Showing Possible Reasons
        • The image was uploaded to a note which you don't have access to
        • The note which the image was originally uploaded to has been deleted
        Learn More →
      • 密碼重設機制
        Image Not Showing Possible Reasons
        • The image was uploaded to a note which you don't have access to
        • The note which the image was originally uploaded to has been deleted
        Learn More →
    • Secure Defaults (初始狀態是安全的)
      • 登出實作
        • 清除所有存放於後端的session 資料
        • 讓session token 失效
    • Least Privilege (最小權限)
    • Separation of Duties (權限分離)

      將一件機敏的動作權限分散給多人

    • Defense in Depth (縱深防禦)

      逐層防範

    • Fail Securely (安全故障)

      使用Exception handling blocks (try-catch)
      只呈現簡易的錯誤資訊
      詳細技術資訊寫入後端日誌

    • Do not trust Security through Obscurity
    • Simplicity (程式碼簡單易懂)
  • 安全軟體設計參考指引

(3)實作階段:撰寫安全的原始碼、弱點檢核與消弭

  • 開發者和攻擊者思維落差,開發者以為很安全,其實不是。
  • 語言的選擇
    • Type-safe languages會比較安全
  • 防護建議
    • 程式原始碼採用版本控制管理
    • 權限控制失效(Broken Access Control)
      • 防止重要網頁被直接存取
        • 限制存取身份和權限
        • 限制存取的IP
      • 不安全的物件參考(Insecure Direct Object Reference, IDOR)
        Image Not Showing Possible Reasons
        • The image was uploaded to a note which you don't have access to
        • The note which the image was originally uploaded to has been deleted
        Learn More →
        • OWASP TOP 10
          • 2010-A4-不安全的物件參考
          • 2013-A4-不安全的物件參考
          • 2017-A5-無效的存取控管
          • 2021-A1-權限控制失效
        • 不是技術性漏洞、是邏輯性漏洞,WAF無法有效防範
        • 最佳解法:index value or a reference map
        • 確認輸的檔案路徑位在所允許的合理範圍內
        • Insecure Direct Object Reference Prevention Cheat Sheet
    • 身份認證
      • Authentication Cheat Sheet
      • 密碼不要存明文到資料庫裡,要變形後再儲存,建議採用==雜湊(Hash)==的方式
        • 雜湊的結果是固定長度的字串
        • 單向(One-way)推導
        • Collision-free:沒有人能找出hash collision的可能
        • Hash演算法,請使用通過過際標準的演算法:Sha512、…
        • 為避免Rainbow Table Attack,建議加入亂數字串(Salt)再雜湊(Hashing)
    • 第三方軟體元件
      • 儘量用最新的的,避免已知漏洞
      • 常檢視相關最新資安訊息
        • Exploit DB
        • CVE/NVD/SNYK
        • 官方Release Note
      • 弱點掃描工具
        • OWASP Dependency-Check
        • Retrie.js
        • composer audit :掃描PHP Composer套件中已知漏洞的工具
        • pip-audit :掃描Python環境中已知漏洞的工具
        • npm-audit :掃描Node環境中已知漏洞的工具
        • govulncheck :掃描Go環境中已知漏洞的工具
    • SQL Injection
      • SQL Injection Prevention Cheat Sheet
      • 透過SQL Injection植入WebShell是可能的。
      • 透過SQL Injection可進行掛馬攻擊。
      • 防範措施
        • 建議白名單(長度+合法字元) > 黑名單 > 資料消毒 (在後端PHP做,只作前端Javascript的驗證是有可能會被繞過的)
        • 改寫成Prepared Statement
        • 資料庫連線最小化權限原則
    • XSS
      • Cross Site Scripting Prevention Cheat Sheet
      • 可掛馬攻擊、釣魚等
      • 輸出轉換:將特殊字元先編碼再輸出,讓瀏覽器以資料方式處理。(HTML Encoding、URL Encoding)
      • HTTP Response 表頭設定
      • 輸出設定為純文字
    • Secure Random Number Generation
      Language Unsafe Functions Cryptographically Secure Functions
      JAVA java.util.Random() java.security.SecureRandom
      PHP rand(), mt_rand(),
      array_rand(), uniqid()
      random_bytes(), random_int() in PHP 7 or
      openssl_random_pseudo_bytes() in PHP 5
      .NET/C# Random() RandomNumberGenerator
      Node.JS Math.random() crypto.randomBytes, crypto.randomInt, crypto.randomUUID
      Python random() secrets()
    • 軟體及資料完整性
      • 供應鏈攻擊(Supply Chain Attack):js引用來源若透過cdn的方式,只要cdn的來源端有受攻擊或汙染,下游使用方也會被影響。
      • 不安全的反序列化 (Insecure Deserialization)

        Deserialization Cheat Sheet

    • Cross-Site Request Forgery Prevention Cheat Sheet
    • Server-Side Request Forgery Prevention Cheat Sheet
    • 檔案上傳的資安風險
      • 重點在如何避免被上傳web shell,進而造成RCE(Remote Code Execution)
      • Why File Upload Forms are a Major Security Threat
      • 上傳時,要進行後端輸入檢驗,採白名單檢查,儲存時更名。
      • 連結時,用間接參考的方式去取得所上傳的檔案。
      • 關閉存放目錄的執行權限。
  • 源碼檢測工具
    • 兩種方式:做完再測、整合IDE邊做邊測
    • 誤報機率很大,需要專案解讀

(4)測試階段:驗證安全性需求

(5)部署建置階段:主機環境強化、縱深防禦機制

作業系統組態層次

  • 作業系統層次設定
    • 修改預設登入帳密
    • 關閉不必要的網路服務(service ports)
    • 各主機時間確實同步(NTP啟用)
  • 資料庫組態
    • 修改預設登入帳密
    • 最小權限化

伺服器環境組態層次

程式語言層次

(6)維運階段:著重Detection & Correction

(7)系統下線:敏感資料要移除