CyberEnthusiastic/ai-sast-scanner

GitHub: CyberEnthusiastic/ai-sast-scanner

一款基于 Python 的 AI 增强型 SAST 扫描器,解决传统静态分析安装复杂、依赖重与报告交互不足的问题。

Stars: 0 | Forks: 0

# ⚡ AI SAST 扫描器 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE) [![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/) [![GitHub Actions](https://img.shields.io/badge/CI-GitHub%20Actions-2088FF?logo=github-actions&logoColor=white)](./.github/workflows/sast.yml) [![OWASP](https://img.shields.io/badge/OWASP-Top%2010%20mapped-A14241)](https://owasp.org/Top10/) ## 功能(终端输出截图) ``` ============================================================ AI-Powered SAST Scanner v1.0 ============================================================ [*] Target: samples/ [*] Files scanned : 2 [*] Lines scanned : 102 [*] Total findings: 16 [*] Breakdown : {'CRITICAL': 10, 'HIGH': 5, 'MEDIUM': 1, 'LOW': 0} [CRITICAL] SQL Injection (string concatenation) samples/vulnerable_app.py:23 (risk=98.0, CWE-89) > query = f"SELECT * FROM users WHERE username = '{username}'" [CRITICAL] Command Injection (os.system / subprocess shell=True) samples/vulnerable_app.py:32 (risk=95.0, CWE-78) > os.system("ls " + cmd) ``` 并打开此交互式暗色 HTML 报告,支持按发现项深入查看: - 严重性标签 · 规则 ID · 风险评分 · 代码片段 · CWE · OWASP · 修复建议 · 推荐修复 ## 为何选择此工具 | | **AI SAST 扫描器** | SonarQube CE | Snyk 开源 | Semgrep OSS | |---|---|---|---|---| | **价格** | 免费(MIT) | 免费(功能受限) | 免费(扫描次数受限) | 免费 | | **运行时依赖** | **无** — 纯标准库 | Java + Postgres | Node | Python | | **安装时间** | `git clone && python scanner.py` | 多步骤 | CLI + 账户 | `pip install semgrep` | | **可自托管** | 是,无需账户 | 是 | 否(云端) | 是 | | **CWE + OWASP 映射** | 每条规则 | 每条规则 | 每条规则 | 每条规则 | | **交互式 HTML 报告** | 内嵌 | 需服务端 | 否 | 否 | | **ML 风格风险评分** | 是(0–100) | 否 | 否 | 否 | | **通过 Python 正则扩展规则** | 5 行代码 | 插件 SDK | 否 | YAML DSL | ## 60 秒快速开始(Windows、macOS、Linux) ``` # 克隆 git clone https://github.com/CyberEnthusiastic/ai-sast-scanner.git cd ai-sast-scanner # 运行它(零安装 — 纯 Python 3.8+ 标准库) python scanner.py samples/ # 打开 HTML 报告 start reports/sast_report.html # Windows open reports/sast_report.html # macOS xdg-open reports/sast_report.html # Linux ``` ### 替代方案:一键安装器 ``` # Linux / macOS / WSL / Git Bash ./install.sh # Windows PowerShell .\install.ps1 ``` 安装器会验证你的 Python 版本,创建 `.venv/`,安装 依赖(如有),运行自检,并输出后续步骤。 ### 替代方案:Docker ``` docker build -t ai-sast-scanner . docker run --rm -v "$PWD/target:/app/target" ai-sast-scanner scanner.py target/ ``` ## 在 VS Code 中打开(两步) ``` code . ``` VS Code 会自动提示你安装推荐的扩展 (Python、Pylance、Ruff、GitLens)。然后: 1. 按 **F5** 在调试器中启动扫描器 2. 或按 **Ctrl+Shift+B** 运行默认任务(扫描示例) 3. 或打开命令面板 → “Tasks: Run Task” → 从列表中选择 本项目附带: - `.vscode/launch.json` — 3 个调试配置(扫描示例、扫描当前文件、提示路径) - `.vscode/tasks.json` — 扫描、打开报告、安装依赖 - `.vscode/extensions.json` — 推荐扩展 - `.vscode/settings.json` — 格式化、标尺、拼写检查词 **从克隆到在 VS Code 中首次扫描:不到 2 分钟。** ## 检测能力(10 类规则) | ID | 类别 | 严重性 | CWE | 置信度 | |----|-------|----------|-----|------------| | SQLI-001 | SQL 注入(字符串拼接 / f-string) | 严重 | CWE-89 | 0.95 | | CMDI-001 | 命令注入(`os.system`、`shell=True`) | 严重 | CWE-78 | 0.92 | | DESER-001 | 不安全反序列化(pickle、yaml.load) | 严重 | CWE-502 | 0.90 | | SECRET-001 | 硬编码密钥 / API 密钥 | 严重 | CWE-798 | 0.88 | | EVAL-001 | `eval()` / `exec()` 使用用户输入 | 严重 | CWE-95 | 0.93 | | XSS-001 | innerHTML / document.write XSS | 高 | CWE-79 | 0.85 | | PATH-001 | 路径遍历 | 高 | CWE-22 | 0.80 | | CRYPTO-001 | 弱哈希(MD5 / SHA1) | 高 | CWE-327 | 0.98 | | SSRF-001 | 服务器端请求伪造 | 高 | CWE-918 | 0.82 | | DEBUG-001 | 生产环境中启用调试模式 | 中 | CWE-489 | 0.90 | 详见 `scanner.py` 中的 `VULN_PATTERNS` 获取完整规则定义,并可使用约 5 行 Python 代码添加你自己的规则。 ## ML 风险评分器如何工作 `MLRiskScorer` 融合多种信号生成每条发现的 0–100 评分: - **模式置信度**(基础 60)— 每条规则自带手工校准置信度 0.80–0.98 - **危险邻近度**(+8 每次命中,上限 +30)— `request.`、`input(`、`sys.argv`、`getenv`、`params`、`form[`、`args[` 在 ±3 行内 - **净化邻近度**(−10 每次命中,上限 −25)— `sanitize`、`escape`、`validate`、`allowlist`、`parameterized`、`prepared` 在 ±3 行内 - **严重性加成** — 严重 +10,高危 +5 对 `hashlib.md5()` 的原始调用在加密模块中评分约为 75(纯模式),但 `hashlib.md5(request.args['pw'])` 会跃升至约 95,因为 `request.` 汇点 在 3 行之内。这就是名称中的“AI”——它并非 LLM,而是一个小型上下文分类器,在多数场景下优于纯正则表达式。 ## 扫描你自己的代码 ``` # 扫描整个项目 python scanner.py /path/to/your/project # 扫描单个文件 python scanner.py src/auth/login.py # 自定义输出路径 python scanner.py . -o reports/prod.json --html reports/prod.html ``` 扫描器会递归识别 `*.py`、`*.js`、`*.ts`、`*.jsx`、`*.tsx`、 `*.html`、`*.php`、`*.java`、`*.rb` 文件。欲添加更多,请在 `scanner.py` 中扩展 `SUPPORTED_EXT`。 ## CI/CD 集成(发现严重问题时失败构建) 已在 `.github/workflows/sast.yml` 中配置。工作流: 1. 在每次推送/拉取请求时对 `samples/` 运行扫描器 2. 将 JSON 与 HTML 报告作为构件上传 3. (可选)若存在严重发现则失败构建 要自动失败构建,请在工作流中添加以下步骤: ``` - name: Fail on CRITICAL run: | python -c " import json, sys r = json.load(open('reports/sast_report.json')) if r['summary']['by_severity']['CRITICAL'] > 0: print('CRITICAL findings detected, failing build') sys.exit(1) " ``` ## 扩展规则引擎 在 `scanner.py` 的 `VULN_PATTERNS` 中添加新规则: ``` { "id": "XXE-001", "name": "XML External Entity (XXE)", "pattern": r"etree\.parse\s*\(|xml\.sax\.parse\s*\(", "severity": "HIGH", "cwe": "CWE-611", "owasp": "A05:2021 - Security Misconfiguration", "confidence": 0.85, "remediation": "Use defusedxml or disable external entities.", "example_fix": "from defusedxml import ElementTree as ET", }, ``` 仅此而已。不需要 YAML、插件或服务器重启。 ## 项目结构 ``` ai-sast-scanner/ ├── scanner.py # main scanner + 10 rules + ML scorer ├── report_generator.py # dark-mode HTML report ├── samples/ # intentionally vulnerable code for demos │ ├── vulnerable_app.py │ └── vulnerable_frontend.js ├── reports/ # output (gitignored) ├── .github/workflows/ │ └── sast.yml # CI that runs scanner on every PR ├── .vscode/ # launch.json, tasks.json, extensions.json ├── Dockerfile # containerized runs ├── install.sh # one-command installer (Linux/Mac/WSL) ├── install.ps1 # one-command installer (Windows) ├── requirements.txt # empty — pure stdlib ├── README.md # this file ├── LICENSE # MIT ├── NOTICE # attribution ├── SECURITY.md # vulnerability disclosure policy └── CONTRIBUTING.md # how to add rules / send PRs ``` ## 路线图 - [ ] AST 级污点追踪(超越正则) - [ ] SARIF 输出以支持 GitHub Code Scanning - [ ] 针对低置信度发现的 CodeBERT 精细化分类器 - [ ] Git 归属集成 — 将发现归因于作者 - [ ] Semgrep 规则导入适配器 ## 许可证 MIT。参见 [LICENSE](./LICENSE) 和 [NOTICE](./NOTICE)。 ## 安全 负责任披露策略:参见 [SECURITY.md](./SECURITY.md)。 ## 贡献 欢迎 PR!请参考 [CONTRIBUTING.md](./CONTRIBUTING.md) 了解从分叉到合并 PR 的快速路径。 由 **[Mohith Vasamsetti (CyberEnthusiastic)](https://github.com/CyberEnthusiastic)** 创作,属于 [AI Security Projects](https://github.com/CyberEnthusiastic?tab=repositories) 套件 —— 一套零依赖、商业级安全工具,专为希望在不承担昂贵 SaaS 费用的前提下获得严肃安全性的工程师与团队设计。
标签:AI, Apex, HTML报告, LNA, Python, SAST, SEO: AI安全扫描, SEO: CWE映射, SEO: OWASP映射, SEO: 代码漏洞检测, SEO: 开源SAST, 开源安全工具, 无后门, 机器学习, 盲注攻击, 自动化代码审查, 请求拦截, 逆向工具, 逆向工程平台, 零依赖, 静态应用安全测试, 风险评分