前言

前陣子在 DevOpsDays Taipei 2023 參加了一場 OST,該場討論的主題是《DevOps 與資安的平衡(ISO 27001)》,當中聊到了 DevSecOps 成熟度模型(DSOMM)時,有位與會者提到兩年前有人成功運行了 DSOMM,但現在那個方法已經失效,不確定現在組織要怎麼自己架設 DSOMM 的網站…

(…突然感受到我該更新兩年前所寫的 DSOMM 文章了…🧐)於是這篇文章就出現啦!

不過 DSOMM 的概念與組織如何運用與先前的介紹差異不大,所以本篇不會太著墨在 DSOMM 介紹,對於 DSOMM 有興趣的讀者可以先參考之前的介紹文:DEVSECOPS 成熟度模型(DSOMM)。而本篇主要會針對以下幾個變化進行介紹:

  1. DevSecOps 的成熟度級別
  2. ISO 27001:2022 的對照
  3. 基於團隊的評估
  4. 自行架設 DSOMM 網站

一、DevSecOps 的成熟度級別

如同大多數的成熟度模型(例如:CMMI、DMM)將成熟度分為五個級別,今年 DSOMM 亦將成熟度從四個級別重新劃分為五個級別1

L1: 對於安全實踐有基本的理解
L2: 採用基本的安全實踐
L3: 高度採用安全實踐
L4: 更加高度採用安全實踐(新增級別)
L5: 大規模的進階安全實踐部署(原 L4)

此變動最主要的原因在於原先的四個級別對於較缺乏安全背景的團隊而言,即使是較低級別的活動仍過於難以開始,因此 DSOMM 新增了級別並同時調整部分活動的級別,使組織在規劃安全活動時可以更循序漸進。

二、ISO 27001:2022 的對照

ISO 27001:2022 的改版將十四個控制領域重新劃分為四大控制主題,同時將控制項延伸至網路安全(Cybersecurity)與隱私保護(Privacy protection)。關於 ISO 27001:2022 的改版可以參考先前的文章:DEVSECOPS! 從 ISO 27001:2022 看組織如何敏捷落地資安?

而對於要應對 ISO 27001 轉版過程或正要導入的組織,別擔心,同樣可以參照 DSOMM 規劃安全活動!DSOMM 在每個安全活動的對照表中,除了原先的 OWASP SAMM v2、ISO27001:2017,亦新增了 ISO 27001:2022。

三、基於團隊的評估

原先的 DSOMM 在每個安全活動僅能有單一的評估結果,但以組織落地 DevSecOps 的面向來看,每個團隊對於 DevSecOps 實踐的策略與成熟度不盡然相同。因此近期 DSOMM 開始支援了不同團隊的評估2,這意味著團隊能根據自身的團隊與產品服務特性安排安全活動計畫,並獨立進行評估。同時,這也有助於組織透過集中可視化的資料暸解各團隊的 DevSecOps 進展。

  1. 組織可依照組織架構或是以產品團隊管理團隊:

(此處先以 DSOMM 官網示意團隊結構圖,稍後會說明組織如何調整成自己的團隊列表)

  1. 各個團隊依據自身實踐評估是否完成安全活動:

但切記-每個團隊的所面臨的情境並不相同,因此以 DSOMM 衡量各團隊的 DevSecOps 成熟度時,不應該讓評估結果成為團隊間的競爭

四、自行架設 DSOMM 網站

若組織要自行架設 DSOMM 網站作為的內部工具,最主要需要管理的兩個資料表為:

  • 團隊列表 3
  • 安全活動實踐列表

由於 DSOMM 尚在發展中,因此假架設方式與檔案結構仍持續在變動,此次架設以 dsomm:3.3.0-1219 為例。

  1. 撈出上述兩個資料列表,並存放到主機
    # 建立資料夾
    $ mkdir dsomm
    $ cd dsomm
    
    # 將主要的資料表複製到主機的 dsomm 資料夾
    $ docker run --rm -v ${PWD}:/tmp wurstbrot/dsomm:3.3.0-1219 /bin/sh -c "cp -rf /usr/share/nginx/html/assets/YAML/generated /usr/share/nginx/html/assets/YAML/meta.yaml /tmp"
    

    資料夾結構:

     dsomm
     ├── generated
     │   ├── README.md
     │   └── generated.yaml  #安全活動實踐列表
     └── meta.yaml  #團隊列表
    
  2. 調整組織的團隊列表
    1. 修改團隊列表(meta.yaml),例如:
      # Default team
      teams: ['TeamA',  'TeamB', 'TeamC']
      teamGroups:
        ProductA: ['TeamA', 'TeamB']
        ProductB: ['TeamB', 'TeamC']
        ProductC: ['TeamA', 'TeamC']
      
    2. 修正安全活動實踐列表(generated.yaml)中的團隊清單

      注意!每個安全活動都有 teamsImplemented,因此每個清單需要進行修正

      teamsImplemented:
        TeamA: false
        TeamB: false
        TeamC: false
      
  3. 在本地端運行 DSOMM 服務(Docker)
    $ docker run -d -p 8080:8080 \
        -v ${PWD}/generated:/usr/share/nginx/html/assets/YAML/generated \
        -v ${PWD}/meta.yaml:/usr/share/nginx/html/assets/YAML/meta.yaml \
        --name dsomm wurstbrot/dsomm:3.3.0-1219
    
  4. 打開瀏覽器,輸入 http://localhost:8080 即可看到與 DSOMM 官網相似的畫面

團隊進行評估

  1. 各團隊可透過網頁的 Implementation Levels 勾選已完成的安全活動

    由於該結果僅會在當前的瀏覽器呈現,因此我們需要進行接下來的步驟來保存評估結果

  2. 點選 Download editied YAML file 匯出最新的安全活動實踐列表

    以上圖的 Building and testing of artifacts in virtual environments 安全活動為例,已完成活動的團隊(TeamA, TeamB)會將其結果設為 true

    Build and Deployment:
      Build:
        Building and testing of artifacts in virtual environments:
        ...
        teamsImplemented:
          TeamA: true
          TeamB: true
          TeamC: false
    
  3. 將最新的安全活動實踐列表放置到主機的 dsomm/generated 資料夾下

    注意!下載檔案的副檔名為 yml,須將其改為 yaml

    $ cp <path-to-download-editied-file> ${PWD}/generated/generated.yaml
    
  4. 重啟容器
    $ docker restart dsomm
    
  5. 取得當前組織的 DevSecOps 成熟度狀態,並依團隊或團隊群組檢視

後記

雖然架設更新的文章來得晚了點(?),但正好可以與 ISO 27001 的轉版與 DSOMM 幾個大變動一同介紹。從兩年前分享了 DSOMM 之後,這兩年在不同的場合陸續看到有人分享 DSOMM,實在不難看出企業對於 DevSecOps 實踐與該如何進行評估的重視程度!

CPHT 為企業提供最完善的 DevSecOps 培訓、導入與最佳實踐,並確保管理系統合於法規的需要(例如:ISO 27001、ISO 27701 等),更多訊息歡迎參考 CPHT 的企業服務安全與合規相關文章。


1. use 5 levels and adopt levels of activities
2. Team-based assessment
3. changing source from teams.yaml to meta.yaml