ironsh/actions-demo

GitHub: ironsh/actions-demo

演示如何通过 iron-proxy 对 GitHub Actions 自托管 runner 的出站请求进行审计、过滤和密钥边界交换。

Stars: 11 | Forks: 1

# actions-demo GitHub Actions runner 可以发起任意的出站请求。受损的依赖项、恶意的构建步骤或提示词注入都可能导致敏感信息泄露、回连恶意服务器或建立反向 shell —— 而大多数团队对其 CI 作业流出的内容完全没有可见性。 本演示展示了 [iron-proxy](https://github.com/ironsh/iron-proxy) 如何对此进行锁定。它启动了一个位于 iron-proxy 之后的 GitHub Actions 自托管 runner,使得每个出站请求都遵循默认拒绝策略、经过审计,并且密钥在网络边界处被交换。 ## 演示功能 一条命令即可完成所有设置: ``` git clone https://github.com/ironsh/actions-demo && cd actions-demo ./run-demo.sh ``` 这将: 1. 将仓库 Fork 到您的 GitHub 账户(如果需要) 2. 生成用于 TLS 拦截的 CA 证书 3. 在 Docker 中启动 iron-proxy 和一个自托管 runner 4. 注册 runner,触发 GitHub Actions 工作流,并将每个出站请求实时流式传输到您的终端 5. 打印允许的请求、拒绝的请求和密钥交换的摘要 演示工作流会检出代码库,安装 Node.js,向 GitHub API 发出一个允许的请求,发送一个包含代理令牌的请求(该令牌会在边界处交换为真实的密钥),并尝试向两个被屏蔽的域名发送请求。 ## 前置条件 - [Docker](https://docs.docker.com/get-docker/) - [GitHub CLI](https://cli.github.com/) (`gh`),并已通过身份验证 - [jq](https://jqlang.github.io/jq/) ## 运作原理 该设置在共享的 Docker 网络上运行两个容器: - **iron-proxy** 位于固定 IP,充当 DNS 服务器和 HTTPS 代理。Runner 的 DNS 指向该代理,因此所有主机名查找都解析为代理 IP,流量会自动通过它路由。 - **runner** 是一个临时的 GitHub Actions 自托管 runner。它信任代理的 CA 证书以进行 TLS 拦截。它只能访问代理令牌 —— 永远无法接触真实的密钥。 Iron-proxy 对每个请求强制执行两项转换: - **Allowlist (允许列表)** — 仅允许 GitHub Actions 和演示所需的域名。其他所有内容都会收到 `403 Forbidden`。 - **Secrets (密钥)** — runner 在 `Authorization` 头中发送代理令牌。Iron-proxy 在转发到上游之前将其交换为真实的密钥。如果 runner 受到攻击,攻击者只能获得一个在代理之外毫无价值的令牌。 有关完整配置,请参见 [`proxy.yaml`](proxy.yaml)。 ## 在您自己的仓库上运行 您可以审计您控制的任何工作流的出站流量: ``` ./audit.sh myorg/myapp ci.yml ``` 您的工作流需要将 `workflow_dispatch:` 作为触发器,并在您要测试的作业上设置 `runs-on: self-hosted`。该脚本将注册一个临时 runner,触发工作流,并向您展示它发出的每个出站请求。 ## 了解更多 - [iron-proxy](https://github.com/ironsh/iron-proxy) — 出站代理 - [iron.sh](https://iron.sh) — 针对大规模运行此功能的团队提供的企业特性
标签:CI/CD 安全, DevSecOps, Docker 容器, GitHub Actions, IP 地址批量处理, MITM 代理, T1071, T1195, T1555, TLS 拦截, 上游代理, 出站流量控制, 底层编程, 数据投毒防御, 数据防泄露, 文档安全, 网络安全, 自动笔记, 自托管运行器, 请求拦截, 隐私保护, 默认拒绝策略