mendozaErnest/ai-devsecops-control-plane
GitHub: mendozaErnest/ai-devsecops-control-plane
自托管应用安全编排平台,在本地并行运行多引擎安全扫描并通过本地 LLM 自动生成修复补丁提交 GitHub PR,确保源代码不离开内部基础设施。
Stars: 1 | Forks: 0
# 🛡️ AI DevSecOps Control Plane
### 具备本地 AI 修复能力的自托管应用安全平台。
**您的代码永远不会离开您的基础设施。**
[](https://github.com/mendozaErnest/ai-devsecops-control-plane/actions)


-black)


**12 个安全引擎 · 基于 GPU 的本地 AI 补丁 · 真实的 GitHub PR · 零云端调用**
[快速开始](#-quick-start) · [架构设计](#-architecture) · [安全引擎](#-security-engines) · [AI 修复](#-ai-remediation) · [Agentic DAST](#-agentic-dast) · [路线图](#-roadmap)
## 为什么开发此平台
商业 AppSec 平台(Snyk、GitHub Copilot Autofix、SonarCloud)会将您的源代码发送到外部 API 以生成修复方案。**在受监管的行业——如银行、金融科技、医疗保健、政府——这是一个监管和合同上的阻碍,而不是小小的不便。**
该平台在您自己的硬件上运行整个安全生命周期,包括基于 LLM 的修复。网络边界就是您的机器。
| 功能 | 本平台 | 典型的云端 AppSec SaaS |
|---|---|---|
| AI 生成的代码修复 | ✅ 本地 LLM (Ollama, 本地部署 GPU) | ✅ 通过外部 API |
| 源代码离开您的网络 | ❌ **绝不** | ✅ AI 功能所必需 |
| 适用于气隙隔离 / 受监管环境 | ✅ 原生设计支持 | ⚠️ 受限或在合同上被阻止 |
| 多引擎编排 (SAST · SCA · DAST · IaC · 机密扫描) | ✅ 12 个引擎,一个控制平面 | 通常各产品相互独立 |
| 推理成本 | 您的硬件,边际成本为 $0 | 按席位 / 按次扫描订阅 |
## 核心功能
```
Register project → Scan (SAST/SCA/DAST/IaC/Secrets) → Triage with ML risk scoring
→ Generate AI patch (local LLM) → Open reviewable GitHub PR → Track SLA & lifecycle
```
- **12 个安全引擎** 并行编排 —— SAST、SCA、DAST、IaC、容器 CVE、机密扫描
- **通过本地 LLM 进行 AI 修复** (Ollama + `qwen2.5-coder:14b`) —— 针对不同技术栈提供感知提示词,适用于 Python、Java、Angular/TypeScript
- **真实的 GitHub Pull Requests** 通过 GitHub App (JWT RS256) 提交带有补丁的代码,并由 AST 级别的安全检查进行保护 —— 没有人工审核绝不合并
- **Agentic DAST**:使用 LangGraph 多智能体循环 (Explorer → Attacker → Verifier) 封装 OWASP ZAP
- **ML 风险评分**:XGBoost 分类器对原始严重性之外的发现进行排名
- **企业级治理**:发现生命周期状态机、不可变审计追踪、按严重性划分的 SLA 跟踪 (3/7/30/90 天)
## 🚀 快速开始
```
git clone https://github.com/mendozaErnest/ai-devsecops-control-plane
cd ai-devsecops-control-plane
pip install -r code/requirements.txt
cp .env.example .env # add GitHub App credentials + Ollama URL
# Local LLM(单独的终端)
ollama pull qwen2.5-coder:14b && ollama serve
# 运行
uvicorn src.api.main:app --reload
# Dashboard → http://127.0.0.1:8000
```
或者使用 Docker Compose(自动配置 API + Ollama):
```
docker compose up -d
```
完整设置:[docs/api-reference.md](docs/api-reference.md) · GitHub App 配置:[docs/github-app-setup.md](docs/github-app-setup.md) · 威胁模型:[docs/threat-model.md](docs/threat-model.md)
## 🏗 架构设计
```
┌────────────────────────────────────────────────────────────────────────┐
│ Dashboard (ES6 JS + Chart.js) │
│ findings · profiles · diff viewer · risk scores · PDF export │
└───────────────────────────────┬────────────────────────────────────────┘
│ REST
┌───────────────────────────────▼────────────────────────────────────────┐
│ FastAPI Control Plane │
│ ┌──────────────────┐ ┌─────────────────┐ ┌───────────────────────┐ │
│ │ ScanOrchestrator │ │ AI Remediator │ │ GitHub App Client │ │
│ │ (ThreadPool, │ │ (Ollama local, │ │ (JWT RS256, PRs, │ │
│ │ 12 engines, │ │ AST guardrails)│ │ Check Runs, webhook) │ │
│ │ SHA-256 dedup) │ └────────┬────────┘ └───────────┬───────────┘ │
│ └────────┬─────────┘ │ │ │
│ ┌────────▼─────────────────────▼───────────────────────▼───────────┐ │
│ │ SQLModel · Finding lifecycle · Audit trail · SLA · ML model │ │
│ └──────────────────────────────────────────────────────────────────┘ │
└──────────┬─────────────────────┬───────────────────────┬──────────────┘
│ │ │
┌───────▼────────┐ ┌────────▼────────┐ ┌──────────▼──────────┐
│ SAST/SCA/IaC │ │ OWASP ZAP + │ │ Ollama (local │
│ Bandit·Semgrep │ │ LangGraph │ │ GPU inference — │
│ Trivy·Checkov… │ │ agent loop │ │ zero cloud calls) │
└────────────────┘ └─────────────────┘ └─────────────────────┘
```
## 🔍 安全引擎
| 领域 | 引擎 | 覆盖范围 |
|---|---|---|
| **SAST** | Bandit, Semgrep (`p/owasp-top-ten`, `p/find-sec-bugs`) | Python · Java · Angular/TypeScript |
| **SCA** | pip-audit (PyPI advisory DB), OWASP Dependency-Check (NVD) | Python · Java CVEs |
| **DAST** | OWASP ZAP (spider + active scan) | 任何 HTTP/HTTPS 目标 |
| **Agentic DAST** | ZAP + LangGraph 多智能体循环 | 已确认、去重的发现结果 |
| **IaC** | Checkov | Dockerfile · Kubernetes YAML · Helm · Terraform |
| **文件系统 CVEs** | Trivy (`trivy fs`, 无需 Docker daemon) | Python · Node · Go 生态系统 |
| **机密** | Gitleaks | 源代码 + 可选的 git 历史记录 |
| **质量** | Pylint, ESLint, SonarQube Community REST | Python · Angular · 任意 |
**扫描配置** 定义每个项目运行哪些引擎;`ScanOrchestrator` 并行执行它们 (`ThreadPoolExecutor`) 并通过 SHA-256 指纹消除重复发现。当引擎的二进制文件或服务不可用时,每个引擎都能优雅降级——缺少的工具只会记录警告,绝不会导致扫描崩溃。
## 🤖 AI 修复
修复方案由具备技术栈感知提示词的**本地 LLM** 生成,并在接触到代码之前受到严格保护:
- **Python** —— AST 校验强制要求语法有效的补丁;仅替换受影响的函数。确定性问题(弱哈希、重复字面量)无需 LLM 调用即可修复。
- **Java** —— 安全的加密升级、`PreparedStatement` 模式、TLS 配置。
- **Angular/TypeScript** —— `DomSanitizer` 模式、CSP 指导;硬编码的机密信息将被外部化到 CI/CD 环境变量中,而不仅仅是抹除。
`is_safe_to_apply()` 会拦截删除函数、包含占位符桩或删除了超过 20% 源代码行的补丁。被拒绝的补丁将回退到**仅建议模式的 PR** —— 没有明确的人工批准,绝不修改任何源代码。
## 🕷 Agentic DAST
LangGraph `StateGraph` 协调三个智能体针对实时目标运行,封装了 ZAP REST API:
| 智能体 | 角色 |
|---|---|
| **Explorer** | 对目标进行蜘蛛爬取,映射路由、表单和身份验证边界;可选通过 LLM 对攻击面进行排名 |
| **Attacker** | 使用定向 Payload 驱动 ZAP 主动扫描 (XSS、SQLi、路径遍历、身份验证绕过) |
| **Verifier** | 重新请求每个警报并在持久化之前确认可利用性 —— 从而减少误报 |
该循环完全针对本地服务 (ZAP + Ollama) 运行,并向仪表板报告实时状态:`exploring → attacking → verifying → done`。
## 📊 ML 风险评分
XGBoost 分类器根据每个发现的特征向量(严重性、工具、回归计数、存在时间、SLA 临近度、生命周期状态)对其进行评分 `[0.0–1.0]`。模型可以根据仪表板按需重新训练,在未经过训练时回退到基于严重性的确定性评分 —— API 绝不依赖于 ML 的可用性。
## 🔄 发现生命周期与治理
```
open ──► fixed ──► regression (re-detected after fix)
└────► accepted_risk / false_positive (human triage, reason required)
```
每一次状态转换都会记录在不可变的审计追踪中。SLA 截止日期按严重性分配 (CRITICAL 3天 · HIGH 7天 · MEDIUM 30天 · LOW 90天),并作为 API 过滤器和仪表板徽章公开显示。GitHub Check Run 会阻止存在严重发现的 PR 合并。
## 🔐 平台自身的安全性
安全工具必须对自己保持与自身相符的标准:
- **路径遍历保护** —— 扫描目标会根据 `SCAN_ALLOWED_ROOTS` 进行验证;拒绝任意的文件系统访问。
- **无 Shell 注入面** —— 子进程调用避免使用 `shell=True`;用户输入在执行前会经过验证。
- **最小权限的 GitHub 访问** —— GitHub App(而非 PAT)仅具有 `contents:write` + `pull_requests:write` 权限,并使用短期的安装 token。
- **机密信息脱离代码** —— 所有凭证均通过环境变量传递;`.env` 被 git-ignored 并由 Gitleaks 自我扫描。
- **吃自己的狗粮** —— 该平台在 CI 中扫描自己的代码库(在每个 PR 上运行 Bandit + pip-audit + Semgrep)。
威胁模型:[docs/threat-model.md](docs/threat-model.md)
## 🧪 质量与工程纪律
- 跨 15 个文件的 **117 个自动化测试**(扫描器、编排、生命周期、ML 回退、GitHub 集成)
- CI 流水线在每个 pull request 上运行平台自身的安全引擎
- 优雅降级是经过测试的行为,而非偶然:ZAP、Ollama、LangGraph 和 ML 依赖项在运行时都是可选的
## 🗺 路线图
| 阶段 | 范围 | 状态 |
|---|---|---|
| 1 | 核心平台:多语言 SAST、AI 修复、GitHub PR 自动化 | ✅ |
| 2 | SCA、扫描配置、发现生命周期、SLA 跟踪、CI Check Runs | ✅ |
| 3 | 质量引擎、语义补丁护栏、差异查看器 | ✅ |
| 4 | DAST + Agentic DAST、基础设施扫描器 (Checkov/Trivy/Gitleaks)、ML 风险评分、Prometheus/Grafana 可观测性 | ✅ |
| 5 | Kubernetes 部署 + kube-bench (CIS 基准)、PostgreSQL 生产配置、SARIF 导出 | 🔜 |
详细的冲刺计划:[ROADMAP.md](ROADMAP.md)
## 🛠 技术栈
**后端:** FastAPI · SQLModel (SQLite,支持 PostgreSQL) · ThreadPoolExecutor 编排
**AI:** Ollama (`qwen2.5-coder:14b`) · LangGraph · XGBoost
**安全:** Bandit · Semgrep · pip-audit · OWASP Dependency-Check · OWASP ZAP · Checkov · Trivy · Gitleaks
**集成:** GitHub App (JWT RS256) · GitHub Actions · Prometheus + Grafana
**前端:** 模块化 ES6 JavaScript · Chart.js · i18n (EN/ES)
## 👤 为什么开发此项目
我曾在一家全球银行内部从事应用安全工作多年,使用 Fortify、Veracode 和 SonarQube 修复了生产环境中成千上万的严重和高危漏洞。我一直面临同样的障碍:本可以加速修复过程的 AI 工具在合同上是被禁止使用的,因为它们会将源代码发送到外部 API。
因此,我打造了这个我无法买到的平台——完整的 AppSec 生命周期,包括 AI 生成的修复方案,完全运行在您控制的基础设施上。它既是一个实用的安全工具,也说明了在受监管的环境中 AI 辅助安全应该如何运作。
## 📄 许可证
MIT — 详见 [LICENSE](LICENSE)。
由 Ernesto Mendoza 构建 —— 面向受监管环境的应用安全工程。
标签:AI风险缓解, AV绕过, DevSecOps, DLL 劫持, FastAPI, 上游代理, 代码安全, 大语言模型, 模块化设计, 漏洞枚举, 自动化修复, 请求拦截, 逆向工具, 错误基检测, 静态代码分析