forgehk/pipeline-armor

GitHub: forgehk/pipeline-armor

一个轻量级的GitHub Actions安全门禁工具,通过自动扫描PR中的密钥、依赖漏洞和危险代码模式来强制执行DevSecOps安全基线。

Stars: 0 | Forks: 0

# 流水线防护 [![Python](https://img.shields.io/badge/Python-3.11+-3776AB.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![CI](https://img.shields.io/badge/CI-GitHub_Actions-2088FF.svg)]() ## 功能介绍 `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)*
标签:恶意代码分类, 逆向工具