資訊安全是每個人每天的工作#

「資訊安全與合規性不允許我們這麼做」是實施 DevOps 最常見的反對意見之一。然而,DevOps 可能是將資訊安全整合到技術價值流中每個人日常工作的最佳方式

Infosec 作為孤島的問題#

當 Infosec 被組織為獨立於 Development 與 Operations 之外的孤島時,會產生許多問題。James Wickett 觀察到:

  • 在典型的技術組織中,Development、Operations 與 Infosec 的工程師比例是 100:10:1
  • 當 Infosec 人數嚴重不足時,若不依靠自動化並將資訊安全整合到 Dev 和 Ops 的日常工作中,Infosec 只能做合規性檢查(compliance checking),這與安全工程(security engineering)恰恰相反
  • 這種做法不僅效果差,還會讓所有人都討厭 Infosec

James Wickett 與 Josh Corman 提倡將安全目標融入 DevOps 的實踐,稱為 Rugged DevOps。Capital One 團隊則將其稱為 DevOpsSec,將 Infosec 整合到 SDLC 的所有階段。

將安全整合到開發迭代展示中#

讓功能團隊盡早與 Infosec 互動的方法之一,是在每個開發迭代結束時邀請 Infosec 參加產品展示(demo):

  • Infosec 可以在組織目標的背景下理解團隊的目標
  • 觀察實作過程中的安全考量
  • 在專案最早期階段提供指導與回饋,此時修正成本最低

Justin Arbuckle(前 GE Capital 首席架構師)觀察到:「在資訊安全與合規性方面,我們發現專案末期的阻塞比初期昂貴得多。Compliance by demonstration 成為我們用來將所有複雜性提前到流程早期的儀式之一。」

讓 Infosec 成為團隊的一部分,即使只是被通知和觀察,也能讓他們獲得做出更好風險決策所需的商業背景。

將安全整合到缺陷追蹤與事後檢討中#

  • 在 Dev 和 Ops 使用的同一個工作追蹤系統中追蹤所有安全問題,確保工作可見且能與其他工作一起排定優先順序
  • 這與傳統做法大不相同 – 傳統上所有安全漏洞都存放在只有 Infosec 才能存取的 GRC 工具中

Nick Galbreath(Etsy 資訊安全負責人)的做法:

  • 將所有安全問題放入 JIRA 中,分為 P1 或 P2,必須立即或在一週內修復
  • 每次發生安全問題都會進行事後檢討(post-mortem),以教育工程師並轉移安全知識

將預防性安全控制整合到共享原始碼儲存庫中#

在共享原始碼儲存庫中加入確保應用程式和環境安全的機制與工具:

  • 添加經過安全團隊認證的預建函式庫(如認證、加密函式庫)
  • 與共享服務組織合作建立共享的安全相關平台(認證、授權、日誌記錄、稽核)
  • 提供安全特定的設定配置(日誌記錄、認證、加密)

可包含的項目:

  • 程式碼函式庫及其推薦配置(如 2FA 認證、bcrypt 密碼雜湊)
  • 密鑰管理工具(如 Vault、sneaker、Keywhiz、credstash)
  • OS 套件與建置(如安全版本的 OpenSSL、OSSEC、Tripwire)

將安全整合到部署流水線中#

過去的做法是在開發完成後才進行安全審查,產出的數百頁漏洞報告往往因為專案時程壓力而被完全忽略。現在我們要自動化盡可能多的資訊安全測試,讓它們與其他自動化測試一起在部署流水線中執行。

Figure 43: Jenkins running automated security testing

目標是讓 Dev 和 Ops 在提交可能不安全的變更時能得到最快的回饋,使他們能在日常工作中快速發現並修復安全問題。

確保應用程式的安全#

開發測試通常聚焦在正確性上(happy path),而有效的 QA、Infosec 和反詐欺從業者則關注sad pathbad path – 事情出錯時會發生什麼,特別是與安全相關的錯誤條件。

作為自動化測試的一部分,我們需要涵蓋:

  • 靜態分析(Static analysis):在非執行環境中檢查程式碼,尋找編碼缺陷、後門和潛在惡意程式碼。工具包括 Brakeman、Code Climate 等
  • 動態分析(Dynamic analysis):在程式執行中進行測試,監控系統記憶體、功能行為、回應時間等。工具包括 Arachni、OWASP ZAP 等
  • 相依性掃描(Dependency scanning):清點所有二進位檔和可執行檔的相依性,確保不含已知漏洞。工具包括 Gemnasium、OWASP Dependency-Check 等
  • 原始碼完整性與程式碼簽名:所有版本控制的提交都應簽名,CI 流程產生的所有套件都應簽名並記錄雜湊值

OWASP 提供了大量實用的安全指導,例如 Cheat Sheet 系列,涵蓋密碼儲存、遺忘密碼處理、日誌記錄和防止 XSS 漏洞等主題。

案例研究:Twitter 的靜態安全測試(2009)#

Twitter 在 2009 年初遭遇兩次嚴重的安全事件(@BarackObama 帳號被入侵、管理員帳號遭暴力破解攻擊),導致 FTC 發出同意令。Infosec 團隊識別出幾個關鍵原則:

  • 防止安全錯誤重複發生:修改工作系統和自動化工具來預防問題再次發生
  • 將安全目標整合到現有開發者工具中:不能產生大型 PDF 報告寄給開發者,而是直接提供漏洞資訊給需要修復的開發者
  • 維護開發團隊的信任:必須知道何時發送了誤報,以修正錯誤並避免浪費開發時間
  • 透過自動化維持 Infosec 的快速流動
  • 盡可能讓安全相關工作自助服務化
  • 採取全面性方法:從原始碼、生產環境到客戶所見的各個角度進行分析

Twitter 的重大突破發生在一次全公司 hack week 期間,團隊將靜態程式碼分析(Brakeman)整合到 Twitter 的建置流程中。透過為開發者在撰寫不安全程式碼時提供快速回饋,Brakeman 將發現的漏洞率降低了 60%

Figure 44: Number of Brakeman security vulnerabilities detected

確保軟體供應鏈的安全#

Josh Corman 指出:「我們不再撰寫客製化軟體,而是從開源零件組裝所需的東西。」使用元件或函式庫時,我們不僅繼承了它們的功能,也繼承了它們的安全漏洞。

關鍵數據:

  • Verizon PCI 資料外洩調查報告發現,10 個漏洞(CVE)佔了 2014 年研究案例中近 97% 的攻擊,其中 8 個漏洞已超過 10 年
  • 典型組織依賴 7,601 個建置構件,使用 18,614 個不同版本
  • 其中 7.5% 含有已知漏洞,超過 66% 的漏洞已存在兩年以上未修復

確保環境的安全#

確保環境處於強化的、降低風險的狀態:

  • 透過自動化測試確認所有適當的設定已正確應用(設定強化、資料庫安全設定、金鑰長度等)
  • 使用 Nmap、Metasploit 等工具掃描環境中的已知漏洞
  • 將工具輸出放入構件儲存庫並與前一版本比較

案例研究:18F 為聯邦政府自動化合規#

18F 團隊建立了 Cloud.gov 平台即服務,運行在 AWS GovCloud 上。透過在基礎設施和平台層級處理大部分合規控制,大幅減少了獲得 Authority to Operate (ATO) 所需的時間。他們還開發了 compliance masonry 工具,將系統安全計畫資料以機器可讀的 YAML 格式儲存,自動轉換為文件。

將資訊安全整合到生產遙測中#

許多組織在安全事件發生後數月甚至數季才偵測到入侵,通常是由外部人員發現的。我們需要將安全遙測整合到 Dev、QA 和 Ops 使用的相同工具中。

應用程式層級的安全遙測包括:

  • 成功與失敗的使用者登入
  • 使用者密碼重設
  • 使用者電子郵件地址重設
  • 使用者信用卡變更

環境層級的安全遙測包括:

  • OS 變更(如生產環境、建置基礎設施)
  • 安全群組變更
  • 設定變更(如 OSSEC、Puppet、Chef、Tripwire)
  • 雲端基礎設施變更(如 VPC、安全群組、使用者與權限)
  • XSS 嘗試、SQLi 嘗試
  • Web 伺服器錯誤(如 4XX 和 5XX)

案例研究:Etsy 的環境監測(2010)#

Nick Galbreath 在 Etsy 並未建立獨立的詐欺控制或資訊安全部門,而是將這些責任嵌入整個 DevOps 價值流中。他建立的安全遙測與 Dev 和 Ops 的指標一起展示,包括:

  • 異常的程式終止(如 segmentation fault、core dump):這些是漏洞被利用的指標
  • 資料庫語法錯誤:對資料庫語法錯誤採零容忍態度,因為它們可能啟用或是正在進行的 SQL Injection 攻擊
  • SQL Injection 攻擊的跡象:只要在使用者輸入欄位中出現 ‘UNION ALL’ 就發出警報

保護部署流水線#

支撐 CI/CD 流程的基礎設施本身也是攻擊面。如果有人入侵了執行部署流水線的伺服器,可能竊取原始碼或注入惡意變更。

緩解策略包括:

  • 強化 CI/CD 伺服器並確保能以自動化方式重建
  • 審查所有進入版控的變更(透過結對程式設計或 code review)
  • 偵測可疑的測試程式碼(如存取檔案系統或網路的單元測試)
  • 確保每個 CI 流程在獨立的容器或 VM 中執行
  • 確保 CI 系統使用的版控憑證為唯讀

結論#

本章描述了將資訊安全目標整合到日常工作各階段的方法:將安全控制整合到我們已建立的機制中、確保所有按需環境都處於強化狀態、將安全測試整合到部署流水線中、在預生產和生產環境中建立安全遙測。透過這樣做,我們能在提升開發者和維運生產力的同時,增加整體安全性。