forgehk/pipeline-armor
GitHub: forgehk/pipeline-armor
一个轻量级的GitHub Actions安全门禁工具,通过自动扫描PR中的密钥、依赖漏洞和危险代码模式来强制执行DevSecOps安全基线。
Stars: 0 | Forks: 0
# 流水线防护
[]() [](LICENSE) []()
## 功能介绍
`pipeline-armor` 是一个小型 Python 包 + GitHub Actions 工作流,您可以将其附加到任何仓库,以便在拉取请求时强制执行安全基线。它运行三个扫描器,并根据策略文件决定是否允许该 PR 合并。
| 扫描器 | 检测项 |
|---|---|
| **secrets** | AWS 密钥、GitHub PAT、Stripe 密钥、Slack 令牌、通用高熵字符串、硬编码 API 密钥 |
| **deps** | 存在已知 CVE 的依赖项(封装了 `pip-audit`) |
| **patterns** | `eval()`, `exec()`, `pickle.load`, `shell=True`, `verify=False`, SQL 字符串拼接、弱哈希 |
决策由您仓库根目录下的 `pipeline-armor.yaml` 驱动。您可以固定严重性阈值、允许特定发现,并要求对策略更改进行人工批准。
## 快速开始
### 作为 GitHub Action 使用
将 `.github/workflows/security-gate.yml`(本仓库中)放入您的项目。每次拉取请求时,您都会在检查选项卡中看到一个条目,如果任何高严重性发现触发,**该构建将失败。**
### 通过 CLI 使用
```
pip install pipeline-armor
pipeline-armor scan ./my-repo
```
输出如下所示:
```
pipeline-armor scan: ./my-repo
[HIGH] secrets app/config.py:14 aws_access_key_id
[HIGH] patterns app/db.py:88 sql_string_concat
[MED ] deps requirements.txt requests==2.20.0 (CVE-2018-18074)
[LOW ] patterns utils/hash.py:12 weak_hash_md5
3 findings >= MEDIUM. Policy: fail at MEDIUM. ❌ BLOCKED.
```
## 工作原理
```
┌──────────────────┐
│ pipeline-armor │
│ CLI │
└────────┬─────────┘
│
┌───────────────────┼────────────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ secrets │ │ deps │ │ patterns │
│ scanner │ │ scanner │ │ scanner │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
└───────────┬───────┴────────────────────┘
▼
┌─────────────────┐
│ policy engine │ ← pipeline-armor.yaml
│ pass / fail? │
└────────┬────────┘
▼
┌─────────────────┐
│ GitHub Actions │
│ pass / fail │
└─────────────────┘
```
每个扫描器独立运行,并返回一个 `Finding(severity, scanner, file, line, rule, message)` 列表。策略引擎根据您的配置将这些结果整合为单一的通过/失败决策。
## 策略文件 (`pipeline-armor.yaml`)
```
version: 1
# 如果任何发现达到或超过此严重性等级,则构建失败。
fail_at: medium
# 每扫描器覆盖
scanners:
secrets:
enabled: true
extra_patterns:
- name: internal_api_key
regex: 'DARKFORGE_[A-Z0-9]{32}'
severity: high
deps:
enabled: true
ignore_cves:
- CVE-2019-11324 # documented, mitigated downstream
patterns:
enabled: true
# 允许列出特定发现(按规则 + 路径 + 行)
allowlist:
- rule: weak_hash_md5
path: legacy/checksum.py
line: 42
reason: "Legacy checksum, not used for security"
expires: 2026-12-31
```
## 演示:此工具捕获的漏洞应用
`demo/` 目录包含 `vulnerable_app.py` —— 一个故意触发每个扫描器的小型 Flask 应用:
- 一个硬编码的 AWS 密钥
- 对用户输入使用 `pickle.loads`
- 使用字符串拼接构建 SQL 查询
- 使用 MD5 密码哈希
- `requests` 固定到一个已知存在漏洞的版本
运行 `pipeline-armor scan demo/`,观察所有三个扫描器都被触发。
## 为什么这很有趣
大多数团队付费使用 SaaS 工具(Snyk、Semgrep Cloud、GitGuardian)来完成同样的工作。`pipeline-armor` 是一个学习项目,展示了这些工具的**结构**——可插拔扫描器、策略引擎、严重性阈值、允许列表和 CI 集成——全部用大约 600 行 Python 编写,您一次就能读完。
就我个人而言,这是我正在构建的 DevSecOps 工具包中的安全部分,以便在 AppSec / DevSecOps 角色上提升自己。
## 路线图
- [x] 具有 12+ 规则模式的正则表达式密钥扫描器
- [x] 用于依赖项 CVE 的 `pip-audit` 封装器
- [x] 基于 AST 的模式扫描器 (Python)
- [x] 具有允许列表的 YAML 策略引擎
- [x] GitHub Actions 集成
- [ ] Semgrep 规则包集成
- [ ] 容器扫描 (Trivy 封装器)
- [ ] 用于 GitHub 代码扫描选项卡的 SARIF 输出
- [ ] JS/TS 模式扫描器
## 许可证
[MIT](LICENSE)
*由 [@forgehk](https://github.com/forgehk) 构建 —— [DarkForge AI](https://darkforgeai.com)*
标签:恶意代码分类, 逆向工具