DevSecOps實行指南

有風險才有機會

許多企業在了解 DevOps的價值、進行文化變革並從中獲益後,他們自然而然的都瞄準了下一個重要階段:將開發、維運和安全整合到一個團隊/部門/組織中。

然而,DevSecOps 計劃雄心勃勃且實施起來具有挑戰性。 企業必須管理他們的資源、工具、文化和結構性變革。 本文將說明 DevSecOps 計劃如何在各種規模和不同產業的組織中實施,討論了企業在進行轉型時面臨的現實挑戰。

本文中,我們將介紹以下內容:

  • 什麼是DevSecOps?
  • DevOps在實際運作中的資安挑戰
  • 一個成功運作DevSecOps的9個關鍵元素

什麼是DevSecOps?

DevSecOps 是將 DevOps 方法的優勢(敏捷性和快速回應能力)擴展到資安層面。 這個想法是在開發過程的早期整個SDLC中整合安全性。 這涉及培養開發和資安團隊之間的"靈活性和持續協作的文化",並將資安融入開發過程。

以下是一個典型的DevSecOps工作流程:

  1. Commit —
    開發人員在repository攥寫代碼並commit開發的內容
  2. Analyze —
    另一位開發人員從版本控制中提取代碼並執行靜態分析或peer review以發現資安問題或其他bugs
  3. Setup Environment —
    如果代碼通過靜態分析,一個環境會自動啟動,部署在容器中,配置由IaC工具管理
  4. Test —
    構建系統執行測試套件,包括unit test、 functional test、 UI automation tests、 integration tests以及安全測試
  5. Deploy —
    如果所有測試都通過,則將新版本提升到生產環境
  6. Monitor —
    監控新的生產版本以發現資安威脅
  7. Repeat —
    在確定需要更改軟體的安全問題或任何其他bugs或功能更動後,開發人員會建立新版本的代碼並將其提交到repository,從而重新開始循環

以下圖片呈現DevOps與DevSecOps的些微不同之處

DevSecOps與容器技術

容器技術是 DevSecOps 的重要推動因素,因為:

  • 可預測且易於自動化,從而實現快速開發和部署週期
  • 容器的特性是immutable,可以更容易發現資安攻擊並在受到攻擊時從中回復
  • 容器使頻繁重新部署更新的想像成為可能 — 更容易修復安全漏洞
  • 容器允許整個DevSecOps團隊開發流程中向左移動(shift left),自動部署應用程式並將安全測試融入到build process中,而不是等到部署後才將安全性套用

其他常見的 DevSecOps 實踐

其他常見的DevSecOps運作方式有:

  • 將代碼分析工具整合到development pipeline中,以防止有問題的代碼進入到生產環境
  • 自動化並持續測試生產環境以檢測弱點
  • 在部署"之前而不是之後"執行修復和補丁
  • 自動或半自動安全守門員,可以在不減緩工作流程的情況下仔細檢查軟體

DevSecOps: 向左移動的安全性

“左移”是一種軟體測試方法,其中在開發流水線中更早(向左移動)的進行測試和修正。 它通過將測試構建到 SDLC 的所有階段來實施敏捷原則“儘早且經常測試”

在 DevSecOps 中,左移的是安全測試和修正。 DevSecOps 的核心概念是解決交付鏈(Delivery Chain)各個階段的安全問題,從需求和規劃到開發、測試、部署和發布。 目標是提高安全流程的覆蓋範圍和有效性、提高軟體質量、縮短測試週期並減少安全債務(Security debt)

最重要的是 — — 在開發周期中儘早應用安全修復我們的開發中的代碼修正就會更容易、成本更低。 相反的在開發過程中越後期發現錯誤,修復錯誤的成本就會成倍增加。

以上所有這些在嘴砲起來都很棒,但實型它卻是另一回事。 以下,我們將深入探討真正實施 DevSecOps 需要什麼、組織遇到的常見挑戰以及現實生活中成功案例的經驗教訓。

DevOps在實際運作中的資安挑戰

DevOps 團隊試圖將資安融入團隊中並過渡到 DevSecOps,他們會發現這是一項複雜且有風險的工作。 以下是阻礙許多 DevSecOps 過渡期的一些障礙以及我們可以採取的措施。

技能差距

大多數開發和維運人員都不是資安專家,資安分析師對開發流程、工具和權衡的理解有限。 在 DevSecOps 組織中,用相反的技能來補足這些團隊中的每一個角色有巨大的價值。 開發人員了解安全最佳實踐,並可以開始在每項任務中實施它們。 資安團隊可以提出更明智的建議,了解特定修改對軟體或運作環境的影響。

無伺服器(Serverless)資安議題

無伺服器架構,也稱為FaaS(Function as a Service),允許我們執行和擴展業務邏輯,而無需顧及運行時的環境、存儲和作業系統。 雲端供應商負責雲端基礎設施組件的安全,這減少了使用者的資安負擔,但並沒有完全消除它。 我們的安全優先等級將會轉移到不安全的無服務器部署配置、不安全的存儲、過度特權的功能權限和角色、不充分的功能監控、DOS 以及出於惡意目的劫持我們的工作負載(例如 ,加密貨幣的挖礦)等等這一類的風險上。

容器的資安風險

容器有助於應用程式的一致性部署,但它們也帶來了一些新的安全挑戰。 瞬態容器(Transient containers)和微服務難以監控,而容器網路的錯誤配置會使我們的生產環境容易受到攻擊。 容器通常用於將應用程式分解為微服務,這會增加資料流量。 傳統的伺服器安全解決方案不支持容器; 考慮專門的安全技術,可以鎖定具有安全配置的容器,掃描Container Image以確保它們的安全性,並監控運作中的容器。

更多的容器安全介紹,請參閱本部落格NIST SP 800 – 190系列文章介紹。

雲端佈署風險

DevOps 依靠雲端技術來自動化和擴展開發/測試/生產工作流程。 然而,雲端帶來了新的安全挑戰,包括帳戶劫持、資源配置錯誤、特權帳戶濫用以及不安全或有問題的 API,這些都是所有雲端整合的基礎。

舊有系統的資安風險

資安管理員通常會忽視或無法修補舊有系統,讓資安漏洞不受控制。 舊有系統容易出現漏洞,必須不斷應用補丁,但在某些情況下,更新可能會破壞舊有系統。 舊有的應用程式的存在會破壞 DevSecOps 程序; 舊有應用程式可能會造成資安威脅,但它們很難適應自動化的 DevSecOps。

一個成功運作DevSecOps的9個關鍵元素

克服上述主要挑戰只是故事的一部分。 確保我們能在在 DevSecOps 專案中解決以下最佳實踐有:

1.將自動化測試整合到Pipeline中

將安全測試整合到build and deployment process。 即時(或盡可能接近)的測試基礎設施的安全性。 為了節省時間,我們可以自動執行簡單的安全測試,例如漏洞掃描。 我們可以使用稱為功能安全測試(functional security test)的自動驗收測試來確認身份驗證和登出等功能是否正常作業。 我們應該選擇一個可以無縫與我們的 CI/CD 解決方案整合的測試框架,並且開發、安全和維運團隊可以容易使用的。

2.將安全測試整合到工作流程中

有幾種類型的安全測試可以構建到我們的開發過程中。 其中包括 Veracode 等代碼分析工具,它可以發現代碼和開源庫中的漏洞,雲端業者的security Advisor 等雲端安全工具,可以提供有關雲端安全最佳實踐的建議,以及用於保護容器和無伺服器工作負載的工具等。

3.自動佈署

自動化對於持續交付工作流程至關重要。 建立部署模型來管理和編排部署活動、控制可變性並減少錯誤。 最高原則應該是:安全應該發生在部署之前而不是之後 — — 在部署過程中建立安全檢查和安全鎖定(Lock-down),使得部署不安全的環境成為不可能。

4.IaC(Infrastructure as Code)

可以將 IaC 與持續交付(CD)一起使用來管理基礎架構,例如虛擬機和網路。 利用 IaC 來控制和測試安裝和部署過程,並確保它們符合安全實踐。 資安人員和維運人員應審查和批准配置流程。

5.持續監控(包含資安事件回應)

生產環境中的追踪系統可以為 DevSecOps 三角的各個方面做出貢獻。 監控可以識別安全問題並幫助我們及早解決它們以防止生產環境中發生事故。 持續、主動的監控可幫助改善生產環境中的使用者體驗,同時避免代價高昂的rollback。 監控還可以通過包括"整合和驗收測試"來協助開發,以確保應用程式在生產環境中運行時按預期的作業。

如何做到當有資安事件發生時能快速反應呢?一般沒有準備好的團隊一定就是手忙腳亂毫無章法,往往不知怎麼應對。以下提供六個階段幫助我們做好準備
1. 準備階段 — 確保有最低限度的標準程序來對應這些資安事件
2. 確認階段–快速且準確的辨認資安事件是否發生
3. 圍堵階段 — 一但確認後要防止事件狀況惡化
4. 消除階段 — 消除此一資安事件
5. 回復階段 — 將系統回到上一次的已知的良好狀況
6. 學習階段 — 回顧這一個事件為何發生的來龍去脈,並修正在準備階段的資安標準程序,防止依後有相同事件發生這是一個循環的程序。

這其實是一個PDCA的模式(如下圖):

6.不可變的(Immutable)基礎設施配置

不可變基礎設施,如容器 — 是部署後不修改的賜服器,這與我們不斷修改伺服器的傳統可變基礎設施相反。 不可變基礎架構更加一致、可靠和可預測,並使部署更加簡單。 如果我們需要修復或更新某些東西,我們可以建立新伺服器來替換舊的,然後將其廢棄。 這減輕了snowflake servers和configuration drift等問題。

7.修復應用程式安全漏洞

制定明確的修復計劃,我們可以立即部署這些計劃以消除漏洞。 使用開源軟體時,整合自動化開源管理工具,讓我們了解最新的已知漏洞並計算相關的安全風險。 這些工具將組件與更新的資料庫交叉引用,並根據優先等級列出漏洞。 通過應用快速的暫時性修復、虛擬補丁方案(virtual patching solutions)、修補軟體組件、修改配置以及使用防火牆或RASP(Runtime Application Self-Protection )等防禦技術來快速修復漏洞。

8.在 Secure DevOps 中訓練工程師

SAT(Security Awareness Training)確保開發團隊熟悉產業標準並能夠識別、評估和回應安全問題。 訓練使員工更好地了解自己的職責,提高他們的信心和績效,並降低不合規風險。

9.使用憑證密碼管理工具(secret management tools)

secrect嵌入在suorce code中並在整個 DevOps pipeline中發現的secret會帶來重大的安全風險。 secret可以是passwords、credentials、tokens或keys。 DevSecOps 團隊必須使用能夠安全管理和存儲secret的工具。 他們還應該實施不影響 DevOps 自動化工作流程的access control

下圖簡單呈現在原始的DevOps中的作業流程融入資安的層面:

--

--

運用"雲端服務"加速企業的數位轉型願景
運用"雲端服務"加速企業的數位轉型願景

Written by 運用"雲端服務"加速企業的數位轉型願景

我們協助您駕馭名為"雲端運算"的怪獸,馴服它為您所用。諮詢請來信jason.kao@suros.com.tw. https://facebook.com/jason.kao.for.cloud

No responses yet