Srivatsanalluraya/AI-Security-Scanner3.0

GitHub: Srivatsanalluraya/AI-Security-Scanner3.0

一款集成多种扫描工具并借助 AI 生成漏洞洞察的 GitHub Action,可在 CI/CD 流程中自动检测多语言代码与依赖安全风险并执行策略管控。

Stars: 0 | Forks: 0

# AI 安全扫描器 3.0 [![GitHub Marketplace](https://img.shields.io/badge/Marketplace-AI%20Security%20Scanner-blue.svg?colorA=24292e&colorB=0366d6&style=flat&longCache=true&logo=github)](https://github.com/marketplace/actions/ai-security-scanner) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Docker](https://img.shields.io/badge/Docker-Required-2496ED?logo=docker&logoColor=white)](https://www.docker.com/) **支持 AI 驱动分析的多语言安全扫描器** 这是一款专为 Python、JavaScript/Node.js、Java 和 Go 项目设计的综合安全扫描工具,提供 AI 驱动的漏洞摘要、仪表盘报告以及策略执行功能。 ## 🚀 功能特性 ### 多语言支持 - **Python**:Bandit(安全)、pip-audit(依赖)、Semgrep - **JavaScript/Node.js**:npm/yarn audit(依赖)、Semgrep - **Java**:OWASP Dependency Check、Semgrep - **Go**:Gosec(安全)、Nancy(依赖)、Semgrep - **通用**:Trivy(漏洞与错误配置) ### 智能化特性 - **自动语言检测**:自动检测项目语言并运行相应的扫描器 - **AI 驱动的分析**:FLAN-T5 模型生成影响声明和修复建议 - **仪表盘报告**:带有严重程度分布的颜色编码控制台仪表盘 - **策略执行**:当高危 (HIGH) 问题超过 25% 阈值时阻止推送 - **PR 集成**:提供全面的 PR 评论,包括: - 仪表盘风格的严重程度概览 - 逐文件的漏洞详细分析 - 包含影响和修复方案的详细问题描述 - 策略合规状态 ### 安全扫描器 | 语言 | 安全扫描器 | 依赖扫描器 | 覆盖范围 | |----------|-----------------|-------------------|----------| | Python | Bandit, Semgrep | pip-audit | 静态代码分析,已知漏洞 | | JavaScript/Node.js | Semgrep | - | 代码模式,安全漏洞 | | Java | Semgrep | - | 代码模式,安全漏洞 | **注意:** Semgrep 的 `--config auto` 会自动检测并扫描 30 多种语言,无需单独的语言运行环境。 ## 📋 环境要求 **对于 GitHub Actions(推荐):** - GitHub token(由 `${{ secrets.GITHUB_TOKEN }}` 自动提供) - 无需本地安装! **对于本地测试(可选):** - Docker Desktop(仅当你想在本地测试时需要) - 用于 PR 评论测试的 GitHub token ## 🚀 快速入门 ### 方式 1:一键设置(推荐) 1. 进入你的代码库的 **Actions** 标签页 2. 点击 **"New workflow"** 3. 搜索 **"Secure AI Scanner"** 4. 点击 **"Configure"** → **"Start commit"** ### 方式 2:手动设置 将此工作流添加到你的代码库的 `.github/workflows/security.yml` 文件中: ``` name: AI Security Scan permissions: contents: write # For committing reports pull-requests: write # For PR comments security-events: write # For security tab on: pull_request: types: [opened, synchronize, reopened] push: branches: [main] jobs: security-scan: runs-on: ubuntu-latest steps: # ============================ # Checkout Repository # ============================ - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 # ============================ # Check if Repo has Files ✅ NEW # ============================ - name: Check if repository has files id: repo_check run: | FILE_COUNT=$(find . -type f \ ! -path "./.git/*" \ ! -path "./.github/*" | wc -l) echo "File count: $FILE_COUNT" if [ "$FILE_COUNT" -eq 0 ]; then echo "empty=true" >> $GITHUB_OUTPUT else echo "empty=false" >> $GITHUB_OUTPUT fi # ============================ # Run AI Security Scanner # ============================ - name: Run AI Security Scanner if: steps.repo_check.outputs.empty == 'false' # ✅ MODIFIED uses: Srivatsanalluraya/AI-Security-Scanner3.0@main with: github_token: ${{ secrets.GITHUB_TOKEN }} enforce_policy: "true" env: # 🔐 Secure AI Backend (Render) AI_BACKEND_URL: https://ai-security-backend.onrender.com/analyze # ============================ # Skip Message (only when empty) ✅ NEW # ============================ - name: Skip scan (empty repo) if: steps.repo_check.outputs.empty == 'true' run: echo "🟡 Repository is empty — skipping security scan." # ============================ # Upload Reports as Artifacts # ============================ - name: Upload Security Reports if: always() uses: actions/upload-artifact@v4 with: name: security-reports-${{ github.run_number }} path: | security-reports/ reports/ retention-days: 7 # ============================ # Commit Generated Reports # ============================ - name: Commit scan reports if: always() run: | echo "📦 Committing security reports..." git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" # Ensure directory exists mkdir -p security-reports # Stage reports git add security-reports/ || true # Commit if changed git diff --cached --quiet || \ git commit -m "📊 Automated security scan report [skip ci]" # Push safely git push || echo "⚠ Push skipped (PR / no permission / no changes)" ``` 完成!推送代码后,扫描器将自动运行。 ### 本地测试(可选 - 需要 Docker Desktop) **注意:** 正常使用不需要 Docker Desktop!扫描器会在 GitHub Actions 中自动运行。 仅当你想在本地测试更改时才使用此功能: ``` docker build -t security-scanner . docker run --rm \ -v $(pwd):/workspace \ -e GITHUB_TOKEN=your_token \ -e INPUT_ENFORCE_POLICY=true \ security-scanner . your_token ``` ## 📊 输出格式 ### 控制台仪表盘 ``` ╔═══════════════════════════════════════╗ ║ 🔒 SECURITY SCAN SUMMARY ║ ╠═══════════════════════════════════════╣ ║ HIGH: 5 ████████░░ (25%) ║ ║ MEDIUM: 11 ██████████░ (55%) ║ ║ LOW: 4 ████░░░░░░ (20%) ║ ╠═══════════════════════════════════════╣ ║ Total Issues: 20 ║ ║ Status: ⚠️ WARNING (25% HIGH) ║ ╚═══════════════════════════════════════╝ ``` ### PR 评论 - **仪表盘部分**:可视化的严重程度分布 - **文件部分**:按受影响文件分组的漏洞 - **详细问题**: - **Pushed by**:扫描工具(Bandit、Gosec、npm-audit 等) - **Description**:漏洞说明 - **Impact**:AI 生成的风险评估 - **Fix**:可操作的修复步骤 - **Policy Status**:基于阈值详情的允许/阻止决定 ### 报告文件 - `issues_detailed.json`:包含元数据的详细问题列表 - `final_report.json`:合并的扫描器输出 - `*-report.json`:各个扫描器的报告 - `languages.txt`:工作区中检测到的语言 ## 🤖 AI 增强(可选) 扫描器包含使用 Groq AI 的可选 AI 驱动分析功能: - **影响声明**:结合上下文的漏洞影响分析 - **修复建议**:量身定制的修复建议 **无 API Key**:基于模式的分析(快速、可靠、无需设置) **有 API Key**:AI 增强的见解(结合上下文的能力更强) ### 启用 AI 增强 1. 从 Groq 获取 API Key(详情请参阅 Groq 文档) 2. 添加到代码库的 secrets 中:`Settings` → `Secrets and variables` → `Actions` → `New repository secret` - Name:`GROQ_API_KEY` - Value:你的 API Key 3. 更新工作流: ``` - uses: Srivatsanalluraya/AI-Security-Scanner3.0@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} groq_api_key: ${{ secrets.GROQ_API_KEY }} # Add this line ``` **免费层限制**:15 次请求/分钟,1500 次/天,1M tokens/天 ## 🛡️ 安全策略 **默认阈值**:25% 的 HIGH 严重级别 - **高于 25% HIGH**:❌ **已阻止** - 推送被拒绝 - **低于 25% HIGH**:⚠️ **警告** - 允许推送但发出通知 - **无 HIGH 级别问题**:✅ **通过** - 扫描干净 自定义执行规则: ``` with: enforce_policy: "true" # Blocks on policy violation # OR enforce_policy: "false" # Warning only (default) ``` ## 🧩 架构 ``` Language Detection → Conditional Scanners → Report Merging → AI Analysis → Display/PR ↓ ↓ ↓ ↓ ↓ detector.py entrypoint.sh report_builder summarizer dashboard (Python: bandit) pr_commenter (Node: npm audit) (Java: dep-check) (Go: gosec) (All: semgrep) ``` ## 🔍 扫描器详情 ### Python 扫描器 - **Bandit**:检测 SQL 注入、硬编码凭证、弱加密 - **pip-audit**:扫描 requirements.txt 中的 CVE 漏洞 - **Semgrep**:针对 Python 的自定义安全规则 ### JavaScript/Node.js 扫描器 - **npm audit**:官方 npm 漏洞扫描器 - **yarn audit**:Yarn 依赖安全检查 - **Semgrep**:JavaScript/TypeScript 安全模式 ### Java 扫描器 - **OWASP Dependency Check**:Java 依赖项的 CVE 扫描 - **Semgrep**:Java 安全规则 ### Go 扫描器 - **Gosec**:Go 安全检查器(硬编码凭证、弱加密) - **Nancy**:go.mod/go.sum 漏洞扫描器 - **Semgrep**:Go 安全模式 ### 通用扫描器 - **Trivy**:综合漏洞扫描器(操作系统包、应用程序依赖、IaC) - **Semgrep**:多语言安全规则(自动配置) ## 📁 项目结构 ``` AI-Security-Scanner3.0/ ├── action.yml # GitHub Action definition ├── Dockerfile # Multi-language container ├── entrypoint.sh # Main orchestration script ├── src/ │ ├── language_detector.py # Auto-detect languages │ ├── security_policy.py # Policy enforcement logic │ ├── output_formatter.py # Console formatting │ ├── ai/ │ │ ├── summarizer.py # AI-powered analysis │ │ └── prompts/ │ │ └── summary.md # FLAN-T5 prompts │ └── reporters/ │ ├── dashboard.py # Console dashboard │ ├── pr_commenter.py # PR comment generator │ ├── report_builder.py # Report merger │ ├── report_display.py # Download guidance │ └── sarif_writer.py # SARIF export └── rules/ └── semgrep.yml # Custom Semgrep rules ``` ## 🔐 环境变量 | 变量 | 描述 | 是否必需 | |----------|-------------|----------| | `GITHUB_TOKEN` | 用于 API 访问的 GitHub token | 是(用于 PR 评论) | | `INPUT_ENFORCE_POLICY` | 启用/禁用策略阻止 | 否(默认:false) | | `GITHUB_REPOSITORY` | 代码库名称(由 Actions 自动设置) | 是(用于 PR 评论) | | `GITHUB_EVENT_PATH` | 事件负载路径(由 Actions 自动设置) | 是(用于 PR 评论) | ## 🤖 AI 驱动的功能 使用 **FLAN-T5-base** 模型实现: 1. **影响生成**:分析漏洞上下文以生成业务影响 2. **修复建议**:提供可操作的修复步骤 3. **严重程度标准化**:将特定扫描器的严重程度映射为 HIGH/MEDIUM/LOW ## 📦 安装与依赖 所有依赖项都已容器化在 Docker 镜像中: **基础运行环境**: - Python 3.12 - Node.js 20.x - Go 1.21 - Java OpenJDK 17 **安全工具**: - bandit, pip-audit, semgrep (Python) - npm, yarn (JavaScript) - gosec, nancy (Go) - trivy (Universal) - OWASP Dependency Check (Java) [计划中] **AI/ML**: - transformers (HuggingFace) - torch (PyTorch) ## 🛠️ 开发 ### 本地测试 1. 构建容器: ``` docker build -t security-scanner . ``` 2. 在示例项目上运行: ``` docker run --rm -v /path/to/project:/workspace security-scanner ``` 3. 测试特定语言: ``` # Python 项目 docker run --rm -v /path/to/python-app:/workspace security-scanner # Node.js 项目 docker run --rm -v /path/to/node-app:/workspace security-scanner # Multi-language 项目 docker run --rm -v /path/to/polyglot-app:/workspace security-scanner ``` ### 添加新的扫描器 1. 使用扫描器安装更新 `Dockerfile` 2. 在 `language_detector.py` 中添加检测逻辑 3. 在 `entrypoint.sh` 中添加扫描器调用 4. 更新 `summarizer.py` 以解析新的报告格式 5. 将报告文件名添加到 `report_builder.py` 的 `KNOWN_JSON_REPORTS` 中 ## 📄 许可证 详见 [LICENSE](LICENSE) 文件。 ## 🔗 链接 - [安全策略](SECURITY.md) - [Action 定义](action.yml) ## 🆘 故障排除 **问题**:扫描器未运行 - 检查语言检测:`cat reports/languages.txt` - 验证清单文件是否存在(requirements.txt、package.json、go.mod、pom.xml) **问题**:策略意外阻止 - 查看仪表盘中的 HIGH 严重级别数量 - 检查阈值:25% HIGH 会触发阻止 - 验证 `enforce_policy` 设置 **问题**:PR 评论未出现 - 确保 `GITHUB_TOKEN` 具有写入权限 - 验证从 `GITHUB_EVENT_PATH` 中提取的 PR 编号 - 检查运行器日志以排查 API 错误 **问题**:扫描中缺少依赖项 - Node.js:在扫描前运行 `npm install` - Python:确保 requirements.txt 是最新的 - Go:在扫描前运行 `go mod tidy` - Java:验证 pom.xml 或 build.gradle 是否存在 ## 📈 版本历史 - **v3.0**:多语言支持(Python、JavaScript、Java、Go) - **v2.5**:策略执行与仪表盘报告 - **v2.0**:基于 FLAN-T5 的 AI 驱动分析 - **v1.0**:初始版本,仅支持 Python 扫描 **用 ❤️ 为安全的软件开发而构建**
标签:AI安全扫描, AI辅助分析, Bandit, CI/CD安全, CISA项目, CMS安全, DevSecOps, DLL 劫持, Docker, FLAN-T5, GitHub Action, Go, Gosec, JavaScript, JS文件枚举, Lerna, Llama, MITM代理, Nancy, npm audit, pip-audit, PR集成, Python, Ruby工具, Semgrep, WordPress安全扫描, 上游代理, 凭据扫描, 多语言支持, 大语言模型, 安全专业人员, 安全合规, 安全报告, 安全测试框架, 安全防御评估, 无后门, 日志审计, 策略执行, 系统调用监控, 网络代理, 请求拦截, 逆向工具, 错误基检测, 静态代码分析