Srivatsanalluraya/AI-Security-Scanner3.0
GitHub: Srivatsanalluraya/AI-Security-Scanner3.0
一款集成多种扫描工具并借助 AI 生成漏洞洞察的 GitHub Action,可在 CI/CD 流程中自动检测多语言代码与依赖安全风险并执行策略管控。
Stars: 0 | Forks: 0
# AI 安全扫描器 3.0
[](https://github.com/marketplace/actions/ai-security-scanner)
[](LICENSE)
[](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安全扫描, 上游代理, 凭据扫描, 多语言支持, 大语言模型, 安全专业人员, 安全合规, 安全报告, 安全测试框架, 安全防御评估, 无后门, 日志审计, 策略执行, 系统调用监控, 网络代理, 请求拦截, 逆向工具, 错误基检测, 静态代码分析