VladimirRamirez07/devsecops-security-gates

GitHub: VladimirRamirez07/devsecops-security-gates

基于GitHub Actions的DevSecOps安全门禁流水线模板,集成五款主流安全扫描工具,在代码合并前自动检测并阻止含有高危漏洞的变更。

Stars: 0 | Forks: 0

# 🔐 DevSecOps 安全门禁流水线 ![流水线状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/8dbd01f97c001048.svg) ![Python](https://img.shields.io/badge/Python-3.9-blue?logo=python&logoColor=white) ![Docker](https://img.shields.io/badge/Docker-Container-2496ED?logo=docker&logoColor=white) ![GitHub Actions](https://img.shields.io/badge/GitHub_Actions-CI%2FCD-2088FF?logo=githubactions&logoColor=white) ![Semgrep](https://img.shields.io/badge/Semgrep-SAST-green?logo=semgrep&logoColor=white) ![Bandit](https://img.shields.io/badge/Bandit-SAST-yellow?logo=python&logoColor=white) ![TruffleHog](https://img.shields.io/badge/TruffleHog-Secret_Scanning-red?logo=git&logoColor=white) ![Snyk](https://img.shields.io/badge/Snyk-SCA-4C4A73?logo=snyk&logoColor=white) ![Trivy](https://img.shields.io/badge/Trivy-Container_Security-1904DA?logo=aqua&logoColor=white) ![License](https://img.shields.io/badge/License-MIT-green) ## 📌 概述 本项目演示了一个真实的 **DevSecOps 流水线**,使用 GitHub Actions 配合自动化安全门禁。它集成了 5 种行业标准的并行安全工具,在每次推送或拉取请求时运行,当发现关键漏洞时会自动阻止合并。 本项目包含两个分支,以演示**完整的 DevSecOps 周期**: - `main` — 故意包含漏洞的代码(流水线检测并阻止) - `develop` — 修复后的代码(流水线通过所有检查 ✅) ## 🛠️ 安全技术栈 | 工具 | 类型 | 检测内容 | |---|---|---| | **Semgrep** | SAST | 代码漏洞、OWASP Top 10、机密信息 | | **Bandit** | SAST | Python 特定的安全问题 | | **TruffleHog** | Secret Scanning | Git 历史中暴露的凭证和机密信息 | | **Snyk** | SCA | 第三方依赖项中的 CVE | | **Trivy** | Container Security | Docker 镜像和 OS 软件包中的 CVE | ## 🏗️ 流水线架构 ``` flowchart TD A[Push / Pull Request] --> B[GitHub Actions] B --> C[SAST - Semgrep\n1105 rules · OWASP Top 10] B --> D[SAST - Bandit\nPython checks] B --> E[Secret Scanning\nTruffleHog] B --> F[SCA - Snyk\nDependency Scanning] B --> G[Container Scan\nTrivy] C --> H{Security Gate} D --> H E --> H F --> H G --> H H -->|All passed| I[✅ Merge Allowed] H -->|Critical found| J[🚫 Merge Blocked] ``` ## 🔄 分支策略 | 分支 | 代码 | 流水线 | 目的 | |---|---|---|---| | `main` | ❌ 包含漏洞 | 🔴 已阻止 | 演示威胁检测 | | `develop` | ✅ 安全 | ✅ 已通过 | 演示漏洞修复 | ## 🚨 在 `main` 中检测到的漏洞 | 漏洞 | 位置 | 工具 | 严重性 | |---|---|---|---| | SQL 注入 | `src/app.py` 第 14 行 | Semgrep + Bandit | 🔴 高危 | | 命令注入 | `src/app.py` 第 20 行 | Semgrep + Bandit | 🔴 高危 | | 弱哈希 (MD5) | `src/app.py` 第 25 行 | Semgrep + Bandit | 🟡 中危 | | 不安全的反序列化 | `src/app.py` 第 29 行 | Bandit | 🔴 高危 | | 硬编码的机密信息 | `src/app.py` 第 32-33 行 | Semgrep | 🔴 高危 | | 过时的依赖项 | `src/requirements.txt` | Snyk | 🔴 严重 CVE | | 容器 CVE | `docker/Dockerfile` | Trivy | 🔴 严重 | ## ✅ 在 `develop` 中应用的修复 | 漏洞 | 修复方法 | |---|---| | SQL 注入 | 参数化查询 | | 命令注入 | 移除 `shell=True`,添加输入白名单 | | 弱哈希 | 使用 `pbkdf2_hmac` + salt 替换 MD5 | | 不安全的反序列化 | 使用 `json` 替换 `pickle` | | 硬编码的机密信息 | 移至环境变量 | | 过时的依赖项 | 更新至最新的安全版本 | | 容器 CVE | 将基础镜像升级为 `python:3.13-slim` | ## 📊 流水线结果对比 | 扫描器 | `main` | `develop` | |---|---|---| | Semgrep | 🔴 3 个阻断性发现 | ✅ 无异常 | | Bandit | 🔴 2 个高危,2 个中危 | ✅ 无异常 | | TruffleHog | ✅ 无异常 | ✅ 无异常 | | Snyk | ✅ 无异常 | ✅ 无异常 | | Trivy | 🔴 严重 CVE | ✅ 无异常 | | **安全门禁** | 🔴 **已阻止** | ✅ **已通过** | ## 📁 项目结构 ``` devsecops-security-gates/ │ ├── .github/ │ └── workflows/ │ └── security-pipeline.yml # Main CI/CD pipeline │ ├── src/ │ ├── app.py # Vulnerable (main) / Secure (develop) │ └── requirements.txt # Outdated (main) / Updated (develop) │ ├── docker/ │ ├── Dockerfile # Docker image for container scanning │ └── .trivyignore # Documented unfixable OS CVEs │ ├── .trivyignore # Trivy ignore rules └── README.md ``` ## ⚙️ 安全门禁的工作原理 1. 每次 `push` 或 `pull request` 都会触发流水线 2. 所有 5 个扫描器**并行**运行以节省时间 3. 如果 **Bandit** 或 **TruffleHog** 检测到严重问题 → 合并将被**阻止** 4. **安全门禁**作业只有在所有必需检查都成功时才会通过 5. 开发人员将收到包含详细报告的即时反馈 ## 🚀 本地运行 ``` # Clone 仓库 git clone https://github.com/VladimirRamirez07/devsecops-security-gates.git cd devsecops-security-gates # 安装工具 pip install bandit semgrep # 运行 Bandit bandit -r src/ -ll # 运行 Semgrep semgrep --config=p/python --config=p/secrets src/ # 运行 Trivy (需要 Docker) docker build -f docker/Dockerfile -t devsecops-app . trivy image devsecops-app ``` ## 🔧 环境要求 - 已启用 Actions 的 GitHub 账户 - Docker(用于容器扫描) - Python 3.9+ - 在 GitHub 中配置的机密变量: - `SEMGREP_APP_TOKEN` - `SNYK_TOKEN` ## 📚 我学到的经验 - 在单个 CI/CD 流水线中集成 5 个安全扫描器 - 配置自动化的安全门禁以阻止不安全的合并 - 识别和修复 Python 中的 OWASP Top 10 漏洞 - 使用 Trivy 进行容器安全扫描和 CVE 管理 - 使用 TruffleHog 跨 git 历史检测机密信息 - 通过记录文档化的例外情况来管理无法修复的 OS 级别 CVE ## 👨‍💻 作者 **Vladimir Ramirez** [![GitHub](https://img.shields.io/badge/GitHub-VladimirRamirez07-181717?logo=github&logoColor=white)](https://github.com/VladimirRamirez07) [![LinkedIn](https://img.shields.io/badge/LinkedIn-Vladimir_Ramírez-0A66C2?logo=linkedin&logoColor=white)](https://www.linkedin.com/in/vladimir-ramírez-303a433ba) ## 📄 许可证 本项目基于 MIT 许可证授权 — 详情请参见 [LICENSE](LICENSE) 文件。
标签:Bandit, CI/CD安全, DevOps安全, DevSecOps, Docker, GitHub Actions, Llama, OWASP Top 10, Python, SAST, Semgrep, Snyk, StruQ, TruffleHog, Web截图, WordPress安全扫描, 上游代理, 代码安全, 学术论文, 安全门禁, 安全防御评估, 容器安全, 开源安全工具, 开源框架, 持续交付, 持续集成, 无后门, 漏洞枚举, 盲注攻击, 结构化查询, 自动化安全, 自动笔记, 请求拦截, 软件开发工具包, 逆向工具, 逆向工程平台, 阻止合并, 静态应用安全测试