datntpro/VulnGuard

GitHub: datntpro/VulnGuard

VulnGuard 是一款自托管的 DevSecOps 漏洞扫描器,并行运行 9 款安全工具并利用本地 AI 生成中文分析报告与修复指南。

Stars: 0 | Forks: 0

# 🛡️ VulnGuard — 本地 DevSecOps 安全扫描器 **VulnGuard** 是一款完全在本地运行的安全扫描工具,集成了 AI 分析功能 (Ollama),全面支持 DevSecOps 流水线 —— 从代码扫描到生成中文安全报告。 ## 🚀 快速开始 ### 系统要求 | | 最低要求 | 推荐 | |---|---|---| | **Docker** | v24+ 及 Compose v2 | Docker Desktop | | **内存 (RAM)** | 8 GB | 16 GB (用于 AI 模型) | | **磁盘 (Disk)** | 10 GB | 20 GB | | **操作系统 (OS)** | macOS, Linux, Windows (WSL2) | macOS / Ubuntu | | **Ollama** | 安装在宿主机上 (无需 Docker) | | ### 安装 Ollama (在宿主机上运行,而不是在 Docker 中) ``` # macOS / Linux curl -fsSL https://ollama.com/install.sh | sh # 拉取 AI model(选择 1): ollama pull llama3.2 # Recommended (4GB, cân bằng tốt) ollama pull deepseek-coder:6.7b # Tốt hơn cho code analysis (8GB RAM) ollama pull phi3:mini # Máy yếu <8GB RAM ``` ### 启动 VulnGuard ``` # 1. Clone / 解压 project cd VulnGuard # 2. 配置 cp .env.example .env # 打开 .env,修改 SCAN_WORKSPACE 指向包含 source code 的目录: # SCAN_WORKSPACE=/home/user/projects (Linux/macOS) # SCAN_WORKSPACE=C:/Users/user/projects (Windows WSL2) # 3. Build 并启动(首次约 5-15 分钟) docker compose build docker compose up -d # 4. 打开浏览器 open http://localhost:8080 ``` ### 扫描源代码 ``` # 步骤 1:将 source code 复制到 workspace cp -r /path/to/your/project ~/vulnguard-workspace/my-project # 步骤 2:在 Web UI 中: # → 创建 Project → Trigger Scan → 输入路径:/workspace/my-project ``` ## 🤖 AI 分析 (Ollama) Ollama 直接在宿主机上运行 —— **不会将数据发送到外部互联网**。 | 模型 | 内存 (RAM) | 质量 | 备注 | |---|---|---|---| | `llama3.2` | ~4 GB | ⭐⭐⭐⭐ | **默认** —— 速度与质量平衡 | | `deepseek-coder:6.7b` | ~8 GB | ⭐⭐⭐⭐⭐ | 最适合代码分析 | | `codellama:7b` | ~6 GB | ⭐⭐⭐ | 很好的替代方案 | | `phi3:mini` | ~3 GB | ⭐⭐ | 适用于低性能、低内存设备 | 更改模型:在 Web UI 中进入 **Settings → AI Model**,或者修改 `.env` 中的 `OLLAMA_MODEL`。 ## 🛠️ 集成扫描工具 | 工具 | 类型 | 语言 / 范围 | |---|---|---| | **Semgrep** | SAST | Python, JS/TS, Java, Go, C/C++, Ruby... | | **Bandit** | SAST | 深入扫描 Python | | **Trivy** | SCA + IaC + Container | 多生态系统 (npm, pip, Maven, Go...) | | **pip-audit** | SCA | Python 依赖 (PyPI Advisory DB + OSV) | | **Checkov** | IaC | Terraform, CloudFormation, K8s, Dockerfile, Ansible | | **Hadolint** | IaC | Dockerfile linter | | **Grype** | Container | 用于容器镜像的 Anchore CVE scanner | | **Gitleaks** | Secrets | 代码/git 中的 API keys, tokens, credentials | | **detect-secrets** | Secrets | 熵分析 + 关键词检测 | ## 📊 核心功能 ### 🔍 扫描引擎 - **并行**运行所有扫描器 (异步) —— 节省时间 - **实时进度**:查看每个工具的运行状态及实时结果 - 基于指纹 (fingerprint) 的自动去重 - 支持:SAST, SCA, IaC, Container, Secrets - 路径验证:如果路径不存在会明确报错 ### 🤖 AI 分析 - **误报检测**:提供误报概率百分比及具体原因 - **可利用性 (公开/私有)**:根据环境评估风险 - **中文解释**:开发者易于理解,无需阅读原始 CVE - **详细修复指南**:包含代码片段、文件名和行号 ### 📄 AI 报告 (HTML) - 扫描完成后生成完整的 HTML 报告 - **跨工具去重**:多个工具发现的同一漏洞 → 合并处理 - **按组件分组**:Package (SCA)、Rule (SAST)、Secret 类型、IaC 检查 - 汇总表:组件 · 错误数 · 严重程度 · 发现工具 · AI 判定 - 详情:文件路径 + 行号 + 代码片段 + 修复指南 - **下载 .html** (用于发送邮件 / 归档) 和 **打印 / 导出 PDF** 按钮 ### 🔐 漏洞管理 - 每个项目最多保存 **5 次扫描** (滚动更新) - 跟踪状态:`OPEN` → `ACCEPTED` / `FALSE_POSITIVE` / `FIXED` - **豁免系统**:接受风险需记录审批人姓名 + 原因 + 到期日 ### ✅ 审批流程 - **严重性阈值**:如果存在 ≥ 阈值的 OPEN 状态漏洞,则阻止审批 - **审批检查**:部署前的快速检查 - **扫描对比**:查看差异 —— 两次扫描中新出现的 / 已修复的 / 仍然存在的漏洞 ### ⚙️ 设置 - **扫描工具**:检查安装状态及版本,启用/禁用各个工具 - **AI 模型**:管理 Ollama 模型,切换活跃模型 - 导出:JSON, CSV, HTML 报告 ## 📁 项目结构 ``` VulnGuard/ ├── docker-compose.yml # Container orchestration ├── .env # Cấu hình (SCAN_WORKSPACE, OLLAMA_MODEL...) ├── .env.example # Cấu hình mẫu ├── api/ │ ├── Dockerfile # All-in-one: API + tất cả Scanner tools │ ├── requirements.txt # Python deps cho API │ ├── config.py # App settings (pydantic-settings) │ ├── database.py # SQLite connection │ ├── main.py # FastAPI app entry point │ ├── models.py # DB models: Project, Scan, Vulnerability, Waiver │ ├── schemas.py # Pydantic schemas │ └── routes/ │ ├── projects.py # CRUD projects │ ├── scans.py # Trigger scan, live progress, export │ ├── vulns.py # Vulnerability management, waivers │ ├── compare.py # Scan comparison, approve check │ ├── report.py # AI HTML report generator │ ├── settings.py # Scanner health check, enable/disable │ └── ollama.py # Ollama model management ├── scanner/ │ ├── orchestrator.py # Chạy song song, live callback, dedup │ ├── ai_analyzer.py # Ollama integration, tiếng Việt │ └── scanners/ │ ├── base.py # BaseScanner abstract class │ ├── sast.py # Semgrep (bundled rules + online), Bandit │ ├── sca.py # Trivy SCA, pip-audit │ ├── container.py # Trivy container, Grype │ ├── iac.py # Checkov, TrivyIaC, Hadolint │ ├── secrets.py # Gitleaks, detect-secrets │ └── rules/ │ └── python-security.yaml # Bundled Semgrep rules (offline) ├── web/ │ └── index.html # Single-page Web Dashboard └── storage/ # Persistent data (Docker volume) ├── db/ # SQLite database └── scanner_config.json # Scanner enable/disable config ``` ## 📡 API 端点 ``` # Projects GET /api/projects Danh sách projects POST /api/projects Tạo project DELETE /api/projects/{id} Xóa project # Scans POST /api/projects/{id}/scans Trigger scan mới GET /api/projects/{id}/scans Danh sách scans GET /api/projects/scans/{id} Chi tiết scan GET /api/projects/scans/{id}/progress Live progress (poll 2s) GET /api/projects/scans/{id}/vulns Danh sách vulnerabilities GET /api/projects/scans/{id}/export Export JSON hoặc CSV # AI Report GET /api/scans/{id}/report Xem báo cáo HTML GET /api/scans/{id}/report?download=true Tải xuống file .html # Vulnerability Management PATCH /api/vulns/{id}/status Đổi trạng thái vuln POST /api/vulns/{id}/waiver Tạo waiver (accept risk) DELETE /api/vulns/{id}/waiver Xóa waiver # Approve & Compare GET /api/projects/{id}/approve-check Kiểm tra approve GET /api/projects/{id}/compare So sánh 2 scans # Settings GET /api/settings/scanners Health check tất cả tools PUT /api/settings/scanners Lưu enable/disable config # Ollama GET /api/ollama/health Kiểm tra Ollama GET /api/ollama/models Danh sách models POST /api/ollama/pull Pull model mới PUT /api/ollama/active-model Đổi model active # Swagger UI: http://localhost:8080/docs ``` ## 🔄 典型工作流 ``` 1. Developer push code lên nhánh mới 2. Security Approver mở VulnGuard → Tạo Project (nếu chưa có) 3. Copy source code vào SCAN_WORKSPACE 4. Trigger Scan → chọn scan types → theo dõi live progress 5. Chờ AI Analysis hoàn tất (tự động sau scan) 6. Review vulnerabilities: ├── CRITICAL/HIGH → ưu tiên fix ├── Đánh dấu False Positive (AI hỗ trợ đánh giá) └── Accept Risk → tạo Waiver (ghi rõ lý do + người duyệt + ngày hết hạn) 7. Tạo Báo Cáo AI → gửi file .html cho dev team fix 8. Dev fix xong → Scan lại → Compare để xác nhận 9. Chạy Approve Check → phải ra "APPROVED" → Deploy ``` ## ⚙️ 配置 (.env) ``` # Port Web UI VULNGUARD_PORT=8080 # Host 机器上的 source code 目录(mount 到 container 内的 /workspace) SCAN_WORKSPACE=/Users/yourname/vulnguard-workspace # Docker socket(macOS Docker Desktop) DOCKER_SOCK=/Users/yourname/.docker/run/docker.sock # Docker socket(Linux) # DOCKER_SOCK=/var/run/docker.sock # Ollama OLLAMA_MODEL=llama3.2 # Model đang dùng (phải đã ollama pull) OLLAMA_TIMEOUT=120 # Timeout AI analysis (giây) # Scan limits MAX_SCANS_PER_PROJECT=5 # Rolling: tự xóa scan cũ nhất BLOCK_SEVERITY_THRESHOLD=HIGH # Block approve nếu còn OPEN >= mức này ``` ## 🔒 安全与隐私 - VulnGuard 和 Ollama **完全在本地运行** —— 不会向外部发送代码或结果 - 无需账户,无需任何 API key - SQLite 数据库存储在 `./storage/db/` —— 可按需自行备份 - Docker socket 挂载仅用于扫描容器镜像 ## 🐛 故障排除 **扫描路径不存在:** ``` Hãy đảm bảo SCAN_WORKSPACE trong .env trỏ đúng thư mục, rồi dùng path /workspace/ trong UI. ``` **AI 分析未运行 / 提示“未连接”:** ``` # 检查 Ollama 是否正在运行 ollama list curl http://localhost:11434/api/tags # 如果尚未运行 ollama serve ``` **更新后重新构建:** ``` docker compose down docker compose build --no-cache docker compose up -d ``` **查看日志:** ``` docker compose logs -f vulnguard ```
标签:AI应用开发, AI风险缓解, DevSecOps, 上游代理, 人工智能分析, 安全漏洞利用, 本地化部署, 请求拦截, 逆向工具