Ronald-PH/avapt

GitHub: Ronald-PH/avapt

一款基于本地 Ollama 模型的 AI 驱动静态漏洞评估工具,通过语义分析替代传统正则规则,实现完全本地化、保护代码隐私的深度安全审计。

Stars: 0 | Forks: 0

aVAPT Banner **AI 驱动的自动化漏洞评估与渗透测试** [![Python](https://img.shields.io/badge/Python-3.10%2B-blue?style=flat-square)](https://python.org) [![Ollama](https://img.shields.io/badge/Ollama-local%20AI-purple?style=flat-square)](https://ollama.com) [![Flask](https://img.shields.io/badge/Flask-web%20UI-green?style=flat-square)](https://flask.palletsprojects.com) [![License](https://img.shields.io/badge/License-MIT-yellow?style=flat-square)](LICENSE) [![GitHub](https://img.shields.io/badge/GitHub-Ronald--PH-181717?style=flat-square&logo=github)](https://github.com/Ronald-PH) *纯语义 AI 分析 — 无 regex 模式,无规则文件,无误报噪音。*
## 项目预览
### Web Dashboard 界面 aVAPT Dashboard *主仪表盘展示了扫描配置与实时进度追踪*
### 报告格式 aVAPT 生成三种格式的综合报告,每种格式适用于不同的工作流: | 格式 | 最适合 | 输出 | |--------|----------|---------| | **HTML** | 基于浏览器的审查,交互式过滤,高管演示 | 查看 | | **JSON** | CI/CD pipeline,SIEM 集成,自定义自动化 | 查看 | | **PDF** | 文档记录,离线分发,客户交付物 | 查看 |
*点击展开截图 — 来自实际 aVAPT 扫描的示例*
## 什么是 aVAPT? aVAPT 是一款本地优先、AI 驱动的**静态漏洞评估 (SAST)** 工具,它将您的整个源代码发送给本地运行的 [Ollama](https://ollama.com) 模型进行深度的语义分析。传统的 SAST 工具是通过将 regex 与已知签名进行匹配来工作的,与此不同,aVAPT 就像资深安全工程师一样对您的代码进行推理 —— 追踪数据流、理解上下文,并识别出那些模式匹配永远无法捕捉的业务逻辑漏洞。 所有操作都在您的机器上本地运行。没有云端传输,没有遥测数据,不需要 API 密钥。 ## 核心功能 - **纯 AI 分析** — 每个文件的完整源代码都会发送给 AI。没有 regex,没有模式匹配,没有规则数据库。 - **全语义推理** — 模型会进行端到端的数据流追踪,理解框架上下文,并检测逻辑层面的漏洞。 - **本地且私密** — 由 [Ollama](https://ollama.com) 提供支持。您的代码永远不会离开您的机器。 - **多模型支持** — 兼容任何 Ollama 模型:`deepseek-r1`、`codellama`、`deepseek-coder`、`llama3`、`mistral` 等。 - **Flask Web UI** — 基于浏览器的仪表盘,提供实时扫描进度、可过滤的漏洞发现表格以及一键下载功能。 - **三种导出格式** — HTML 报告、JSON(用于 CI/SIEM 集成)和 PDF。 - **依赖项 CVE 扫描** — 结合包含已知存在漏洞的真实 CVE ID 版本的精选表,检查 `package.json` 和 `requirements.txt`。 - **并行扫描** — 可配置 worker 数量,以对多个文件进行并发的 AI 分析。 - **原生 Windows 支持** — 在所有平台上(包括带有 cp1252 终端的 Windows)均能安全处理 UTF-8 编码。 ## 可检测的漏洞类别 AI 会被指示识别(但不限于)以下类别: | 类别 | 示例 | |---|---| | 注入 | SQL, NoSQL, LDAP, OS Command, Code, Template, XPath | | 客户端 | XSS (Reflected, Stored, DOM), Open Redirect, CSRF | | 服务端 | SSRF, XXE, Path Traversal, LFI, RFI | | 身份验证与访问 | Authentication Bypass, Broken Auth, IDOR, Privilege Escalation, Mass Assignment | | 密码学 | JWT 弱点,弱算法 (MD5/SHA1/DES),不安全的随机性 | | 密钥与凭证 | Hardcoded Credentials, API Keys, Tokens | | 逻辑 | 业务逻辑缺陷,Race Conditions,Type Confusion | | 内存安全 | Buffer Overflow, Use-After-Free (C/C++/Rust) | | 依赖项 | npm 和 pip 包中的已知 CVE | | 其他 | 不安全的反序列化,信息泄露,调试接口暴露 | ## 项目结构 ``` avapt/ │ ├── app.py # Flask web application & REST API │ ├── core/ │ ├── config.py # Constants, AI system prompt, language map, CVE table │ ├── ollama_client.py # Ollama REST API wrapper │ ├── file_utils.py # File collection, language detection, dedup helpers │ ├── analyzer.py # AI file analyser — builds prompts, parses responses │ ├── dependency_scanner.py # package.json / requirements.txt CVE scanner │ ├── scanner.py # Main orchestrator — phases 1 & 2, progress callbacks │ ├── report_html.py # Self-contained HTML report generator │ └── report_pdf.py # PDF report generator (requires reportlab) │ ├── templates/ │ ├── index.html # Scanner dashboard (scan form + live progress) │ └── report.html # Report viewer with filterable findings table │ └── static/ ├── img/ │ └── avapt.png # Banner image ├── css/ │ ├── app.css # Shared styles (dark theme) │ └── report.css # Report-specific styles └── js/ ├── app.js # Scan form, progress polling, jobs list └── report.js # Findings table filtering & expand/collapse ``` ## 环境要求 - **Python 3.10+** - 在本地运行 **Ollama**,并至少拉取了一个模型 ``` # 安装 Ollama # Windows / macOS: https://ollama.com/download # Linux: curl -fsSL https://ollama.com/install.sh | sh # 拉取 model(选择一个) ollama pull deepseek-r1:7b # tested ollama pull codellama ollama pull deepseek-coder ollama pull llama3 ollama pull mistral ``` **Python 依赖项:** ``` # 必需 pip install flask # 可选 — 仅 PDF 导出需要 pip install reportlab ``` 无其他依赖项。Ollama 客户端使用 Python 内置的 `urllib`。 ## 安装说明 ``` # 克隆 repository git clone https://github.com/Ronald-PH/avapt.git cd avapt # 安装 dependencies pip install flask # 可选 PDF 支持 pip install reportlab ``` ## 使用说明 ### Web UI ``` # 启动 Flask server python app.py # 在 browser 中打开 http://localhost:5000 ``` 仪表盘允许您: - 输入自定义 prompt - 输入目标路径(目录或单个文件) - 选择您的 Ollama URL 和模型 - 设置并行 worker 数量 - 逐文件查看实时扫描进度 - 在浏览器中查看交互式报告 - 下载为 HTML、JSON 或 PDF 格式 ## 报告 ### HTML 报告 一个独立的、深色主题的仪表盘,您可以在任何浏览器中打开: - 概览卡片(严重 / 高危 / 中危 / 低危 的数量统计) - 严重性分布柱状图 - 可过滤的漏洞发现表格 — 按严重程度或来源(AI / 依赖项)过滤 - 可展开的行 — 点击任意漏洞即可查看完整详情: - 精确的文件路径和行号 - 根本原因解释 - 完整的攻击路径(入口点、前提条件、影响、发生概率) - 可操作的修复指导 - 带有语法高亮的代码片段 - 包含整体风险评级的执行摘要 ### JSON 报告 用于 CI pipeline、SIEM 摄取或自定义工具的可机读输出: ``` { "meta": { "tool": "aVAPT", "version": "1.0.0", "scan_root": "/var/www/html", "timestamp": "2026-06-02T10:00:00+00:00", "files_scanned": 42, "code_files": 18, "languages": ["PHP", "JavaScript"], "ai_model": "gpt-oss:20b", "ollama_url": "http://localhost:11434" }, "summary": { "critical": 3, "high": 5, "medium": 4, "low": 2 }, "source_counts": { "ai": 12, "dependency": 2 }, "findings": [ { "type": "SQL Injection", "severity": "critical", "severity_score": 9.5, "confidence": "high", "cwe": "CWE-89", "capec": "CAPEC-66", "cve_id": null, "file": "/var/www/html/app/Http/Controollers/UserController.php", "location": { "from_line": 42, "to_line": 44 }, "code": { "language": "PHP", "snippet": "..." }, "attack_path": { "entry_point": "GET parameter ?id=", "prerequisites": ["Unauthenticated access to endpoint"], "impact": "Full database read/write access", "likelihood": "High" }, "explanation": "...", "remediation": "...", "source": "ai" } ] } ``` ### PDF 报告 一份排版专业的 A4 文档,包含: - 带有扫描元数据的深色主题封面 - 风险摘要卡片 - 完整的漏洞发现表格 - 针对每个漏洞的详情页,包含解释、攻击路径、修复建议和代码片段 需要 `reportlab`: ``` pip install reportlab ``` ## REST API Flask Web 服务器为自动化暴露了一个简单的 API: | 方法 | Endpoint | 描述 | |---|---|---| | `POST` | `/scan` | 启动扫描。返回 `{ job_id }` | | `GET` | `/job/` | 轮询任务状态和进度 | | `GET` | `/report/` | 在浏览器中查看 HTML 报告 | | `GET` | `/download/html/` | 下载 HTML 报告 | | `GET` | `/download/json/` | 下载 JSON 报告 | | `GET` | `/download/pdf/` | 下载 PDF 报告 | | `GET` | `/api/models?url=` | 列出可用的 Ollama 模型 | | `GET` | `/api/jobs` | 列出所有扫描任务 | **示例 — 通过 curl 触发扫描:** ``` curl -X POST http://localhost:5000/scan \ -F "target=C:/projects/myapp" \ -F "model=gpt-oss:20b" \ -F "ollama_url=http://localhost:11434" \ -F "workers=3" # {"job_id": "abc123..."} # 轮询进度 curl http://localhost:5000/job/abc123... # 完成后下载 JSON report curl -o report.json http://localhost:5000/download/json/abc123... ``` ## 推荐模型 | 模型 | 拉取命令 | 备注 | |---|---|---| | `deepseek-coder` | `ollama pull deepseek-coder` | 代码漏洞检测与 payload 生成 | | `FenkoHQ/Foundation-Sec-8B` | `ollama pull FenkoHQ/Foundation-Sec-8B` | CVE 关联与利用逻辑 | | `deepseek-r1` | `ollama pull deepseek-r1` | 复杂的攻击路径链接 | | `mistral` | `ollama pull mistral` | 快速的大批量扫描 | | `llama3` | `ollama pull llama3` | 通用后备推理 | | `codellama` | `ollama pull FenkoHQ/Foundation-Sec-8B` | 仅作为遗留/备份使用 | 对于大型的 PHP/Laravel 或 Node.js 代码库,为了获得最佳效果,推荐使用 `deepseek-r1` 或 `deepseek-coder`。 ## 工作原理 ``` Target path │ ▼ [1] File collection Recursively walk directory, skip binaries/deps/build artifacts Detect language per file extension │ ▼ [2] AI analysis (parallel, N workers) For each code file: - Read entire file content - Number every line - Send full numbered source to Ollama with security analysis prompt - Parse JSON findings array from response - Extract code snippets using reported line numbers │ ▼ [3] Dependency scan Parse package.json and requirements.txt Match against known-vulnerable version table (with real CVE IDs) │ ▼ [4] Deduplication & sorting Hash-based dedup by type + file + line Sort by severity (critical → low) │ ▼ [5] Report generation HTML — self-contained dashboard JSON — structured findings PDF — formatted A4 document (requires reportlab) ``` AI 会针对每个文件接收类似以下结构的 prompt: ``` FILE PATH : app/Http/Controllers/UserController.php LANGUAGE : PHP LINES : 187 === FULL SOURCE CODE (with line numbers) === 1 |
标签:AES-256, AI风险缓解, DLL 劫持, Flask, LNA, Python, 人工智能, 大语言模型, 无后门, 漏洞评估, 用户模式Hook绕过, 网络测绘, 逆向工具, 错误基检测, 静态代码分析