maverickaayush/ONUS

GitHub: maverickaayush/ONUS

一款本地托管、完全离线的自动化 VAPT 平台,通过八个并行扫描模块和确定性 CVSS 评分,为已授权目标提供从漏洞发现、验证到报告生成的完整安全审计流程。

Stars: 1 | Forks: 0

# ONUS - 自动化漏洞评估与渗透测试 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/39/39faa54be350a1dab8afd3b2fb8c1c83e4d9cff84abfef2374d19a18053687c4.svg)](https://github.com/maverickaayush/ONUS/actions/workflows/ci.yml) 由 [maverickaayush](https://github.com/maverickaayush) 构建。 一款本地托管、物理隔离的 VAPT 工具:将其指向一个已授权的目标 域名,它将并行运行 8 个扫描模块,以确定性的方式评估 每一个发现(CVSS v3.1),通过本地 LLM 可选地添加 AI 生成的纯英文 描述,并生成 PDF 报告以及实时 Web 仪表板。无需任何外部 API 调用 - 一切都在您自己的网络中运行。 ## 功能 - **8 个并行扫描模块** (Celery) - 网络侦察 (端口/服务/子域名/DNS/WHOIS)、Web 应用扫描 (ZAP + Nikto + Katana)、SSL/TLS 配置、HTTP 安全标头、OWASP Top 10 检查、技术栈 指纹识别/WAF 检测、CVE 扫描 (Nuclei)、目录枚举 (FFUF)。 - **确定性的 CVSS v3.1 评分** - 严重程度、CVSS 分数/向量、 优先级和 OWASP 类别均通过规则目录计算得出,绝不 由 LLM 猜测。相同的两次扫描运行将产生字节级一致的 数字字段。 - **置信度验证** - 发现将被被动复核 (仅限非破坏性的重新观察),并标记为 confirmed(已确认) / probable(极可能) / unverified(未验证),而不是被静默丢弃。 - **可选的本地 AI 分析** - Ollama + Qwen 2.5 7B 将评分后的 发现转化为纯英文描述和修复步骤。完全 物理隔离;该工具在没有它的情况下也能正常工作(参见下文的快速开始)。 - **PDF 报告 + Web 仪表板** - WeasyPrint 渲染的报告和 Next.js 仪表板,两者均由相同的已评分/已描述的发现驱动。 ## 截图 | 新建扫描 | 实时扫描状态 | |---|---| | ![New Scan form](https://static.pigsec.cn/wp-content/uploads/repos/cas/f8/f80c77a3738f400102f3e1166220a153d74f03079e40bbeba8ace7ec435e0d5d.png) | ![Scan Status page](https://raw.githubusercontent.com/maverickaayush/ONUS/main/docs/screenshots/scan-status.png) | | 报告仪表板 | 扫描发现 | |---|---| | ![Report dashboard](https://raw.githubusercontent.com/maverickaayush/ONUS/main/docs/screenshots/report-dashboard.png) | ![Scans discovery dashboard](https://static.pigsec.cn/wp-content/uploads/repos/cas/a8/a8ad516acc34ff30f5990543b422396281adfdccadea5f642914e4967571313b.png) | ## 架构 ``` domain → [recon | webscan | ssl_tls | headers | owasp | tech_fingerprint | nuclei | enumeration] (parallel, Celery) → any module failed/timed out? → pause for operator retry/continue/cancel → aggregator (dedup + OWASP-map + sort) → confidence verification (passive re-observation) → deterministic CVSS scoring → Ollama (Qwen 2.5 7B) AI analysis → WeasyPrint PDF + PostgreSQL → dashboard / PDF download ``` Six-layer architecture diagram 六层结构:Next.js 前端 → FastAPI → Celery/Redis → 8 个并行扫描 模块 → Ollama (Qwen 2.5 7B) → WeasyPrint PDF + 仪表板。完整详情见 [`ARCHITECTURE.md`](ARCHITECTURE.md)(schemas、contracts、guardrails)以及 [`docs/QUICK_REF.md`](docs/QUICK_REF.md)(常见更改的快速查询)。 ## 前置条件 - Docker + Docker Compose v2 - 需约 6GB 可用磁盘空间用于核心镜像构建(后端镜像打包了 Nuclei 模板以及通过 Playwright 提供的无头 Chromium,在 基础 Python 镜像之上增加了约 1.5GB) ## 快速开始 ``` cp .env.example .env cp backend/subfinder-config/provider-config.yaml.example backend/subfinder-config/provider-config.yaml docker compose up -d docker compose ps # wait for zap to report healthy (~2 min) ``` 打开 **http://localhost:3000**。 **这在不安装 Ollama 的情况下也能工作。** CVSS/严重程度/优先级评分始终 是确定性的 (`analysis/cvss_scorer.py`) - 如果没有运行 Ollama, 发现将仅获得基于规则的描述模板,而不是 AI 生成的 文本。请参阅下文的“可选:启用 AI 生成的描述”以开启该功能。 **运行此工具无需任何 API 密钥。** 它封装的所有扫描工具 (nmap, ZAP, Nikto, testssl.sh, Nuclei, Amass, Naabu, httpx, WhatWeb, WAFW00F, FFUF) 以及 Ollama 本身在完全没有密钥的情况下即可运行。上方的 subfinder 配置复制步骤是唯一可选的例外 - 将其保留为 空模板即可,subfinder 将仅使用免费/公共来源运行。 为了加深子域名枚举,您可以在启动前向 该文件添加最多两个免费层级的密钥: 一个 GitHub 个人访问令牌和一个 [ProjectDiscovery Chaos](https://chaos.projectdiscovery.io) API 密钥 - 请参阅 `provider-config.yaml.example` 内的注释。 ## 可选:启用 AI 生成的描述 Ollama **在宿主机上原生运行**(而非在 Docker 中),因此它可以直接使用 宿主机的 GPU;容器通过 `host.docker.internal` 访问它。 1. 在宿主机上安装 Ollama:https://ollama.com/install.sh 2. 拉取模型:`ollama pull qwen2.5:7b` 3. **使 Ollama 可从 Docker 容器访问**(Ollama 默认仅限 `127.0.0.1`,Docker 的桥接网络无法访问): sudo systemctl edit ollama 在 `[Service]` 下添加: [Service] Environment="OLLAMA_HOST=0.0.0.0:11434" 保存,然后: sudo systemctl daemon-reload && sudo systemctl restart ollama 注意:这会使 Ollama 可从您的本地网络访问,而不仅是 Docker - 在个人机器上没问题,但在共享机器上值得添加一条防火墙规则。 4. 验证:`curl http://localhost:11434/api/tags` 5. 重启 backend/worker 以便它们能识别它:`docker compose restart backend worker` ## 可选:练习目标 Compose 文件还定义了 12 个故意存在漏洞的练习应用 (Juice Shop, DVWA, bWAPP, Mutillidae, NodeGoat, DVWP/WordPress behind a ModSecurity WAF, Metasploitable2, WebGoat),无需您自己的授权目标即可 对扫描器进行测试。它们受 Compose profile 控制,因此默认情况下从不构建/启动: ``` docker compose --profile targets up -d ``` **警告:这些是故意存在漏洞、甚至有些带有真正后门的服务** (Metasploitable2 提供了实际的 vsftpd 后门)。仅在无法从 Internet 或 共享网络访问的机器上运行 `targets` profile - 切勿在公共云实例或暴露的主机上运行。 大多数应用从预构建的镜像运行,无需额外操作。其中两个 - `nodegoat` 和 `dvwp-wordpress` - 从未在本文档仓库内置的 源代码构建,必须先进行克隆: ``` git clone https://github.com/OWASP/NodeGoat nodegoat-src git clone https://github.com/vavkamil/dvwp dvwp-src ``` 运行后发布的端口:Juice Shop `:3001`,DVWA `:8081`,bWAPP `:8083`,Mutillidae `:8084`,NodeGoat `:8085`,DVWP (通过 WAF, TLS) `:8444`, WebGoat `:8082`。Metasploitable2 不发布任何主机端口(仅能从 `backend`/`worker` 通过 Docker 的内部网络访问),因为它暴露了真实的 带后门/未经身份验证的网络服务。 ## 配置 环境变量,通过 `.env` 设置(从 `.env.example` 复制): | 变量 | 默认值 | 用途 | |---|---|---| | `POSTGRES_PASSWORD` | `vapt_secure_2025` | 数据库密码 | | `SECRET_KEY` | `change_me_to_a_long_random_string` | 后端密钥 | | `ALLOWED_HOSTS` | `localhost,127.0.0.1` | FastAPI 允许的主机 | | `OLLAMA_URL` | `http://host.docker.internal:11434` | 后端/worker 访问 Ollama 的地址 | | `SCAN_TIMEOUT_MULTIPLIER` | `1.5` | 缩放每个模块的工具/Celery 超时时间 - 实际目标比实验室目标慢;在实验室调优时间下降至 `1.0` | | `MAX_CONCURRENT_SCANS` | `5` | 并发扫描上限(资源耗尽保护,同时决定数据库连接池大小) | **上方的 `POSTGRES_PASSWORD`/`SECRET_KEY` 默认值仅用于演示** - 它们适用于本地/个人实例,但在部署到 其他任何人都可以访问的环境之前,请务必更改这两项。 ## API 文档 FastAPI 免费生成交互式的 Swagger 文档 - 一旦后端 运行,即可打开 **http://localhost:8000/docs**。 ## 停止 ``` docker compose down ``` ## 日志 ``` docker compose logs -f backend worker ``` ## 测试与验证 ``` pip install -r backend/requirements-dev.txt pytest backend/tests ``` 截至撰稿时共有 438 个自动化后端测试。除了单元/集成 测试套件外,该工具在开发期间还进行了端到端的测试:针对九个故意 存在漏洞的练习应用(DVWA, Juice Shop, Mutillidae, NodeGoat, bWAPP, WebGoat, Metasploitable2, 位于 WAF 后的 DVWP/WordPress)外加一个 已授权的公共目标 (`testphp.vulnweb.com`) 执行了 79 次真实 扫描并生成了 124 份 PDF 报告 - 这并非假设性的数字。 仅对您被明确授权测试的目标进行扫描 - 请参阅 [`docs/test_findings.md`](docs/test_findings.md) 了解开发期间使用的 练习目标。 ## 文档 - [`ARCHITECTURE.md`](ARCHITECTURE.md) - 完整的架构、schemas 以及 更改绝不应破坏的 contracts。在进行非 微小更改之前阅读此文档。 - [`docs/QUICK_REF.md`](docs/QUICK_REF.md) - 运行命令、文件夹 职责,“我该在哪里进行此更改。” - [`docs/scanners.md`](docs/scanners.md) - 每个扫描模块 时间/标志设计背后的原因。 - [`docs/ai.md`](docs/ai.md) - Ollama 超时/上下文调优,为什么评分 完全脱离了 LLM。 - [`docs/docker.md`](docs/docker.md) - Docker 偏差说明和构建 陷阱。 - [`docs/troubleshooting.md`](docs/troubleshooting.md) - 如何手动 独立测试任何模块/阶段。 - [`docs/roadmap.md`](docs/roadmap.md) - 历史构建序列 (构建已完成)。 - [`CONTRIBUTING.md`](CONTRIBUTING.md) - 开发设置、测试、PR 规范。 ## 许可证 MIT - 详见 [LICENSE](LICENSE)。 ## 仅限授权使用 未经明确书面授权扫描目标在《IT Act 2000 (India)》 及相关的国际法规下属于违法行为。此工具 在每次扫描时都需要进行授权确认,并记录操作员 + 时间戳以明确责任。
标签:AI风险缓解, CTI, MISP, 搜索引擎查询, 测试用例, 请求拦截, 逆向工具