trcyberoptic/openvas-tracker

GitHub: trcyberoptic/openvas-tracker

OpenVAS/Greenbone 漏洞管理仪表板,提供自动化工单追踪、扫描对比、风险接受规则和 LDAP 认证。

Stars: 1 | Forks: 0

# OpenVAS-Tracker 漏洞管理仪表板,用于导入 OpenVAS 扫描结果并通过自动化工单系统跟踪修复情况。 ## 截图 | 仪表板 | 工单 | 工单详情 | |-----------|---------|---------------| | ![仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/a6e71dedab095325.png) | ![工单](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3eeb6bb00f095335.png) | ![工单详情](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/9345f4e9f4095345.png) | ## 功能 - **OpenVAS 导入**:Webhook 端点在扫描完成时自动接收扫描结果 - **自动工单管理**:新发现创建工单,缺失的发现自动解决,重复发现的工单重新打开 - **工单生命周期**:open → fixed / risk_accepted / false_positive,包含完整的活动审计记录 - **风险接受与到期**:风险接受 (Risk-accepted) 的工单在到期日后自动重新打开 - **自动接受规则**:定义规则(按 CVE 或标题,针对特定主机或全局),以便在未来的导入中自动接受已知风险 —— 可从任何工单配置 - **扫描比较**:两个扫描的并排差异对比 —— 新增、已修复、未变更的发现 - **批量操作**:选择多个工单进行批量状态更改或分配 - **以主机为中心的视图**:按主机聚合的漏洞计数和工单状态,带有可展开的工单列表 - **仪表板**:按优先级统计的开放工单计数、30 天趋势图、“我的工单”和“未分配”快速过滤器 - **CVE 参考**:带有 CVE 的工单显示 NVD、MITRE 和 Google 链接;无 CVE 的工单显示基于标题的搜索 - **受影响主机**:查看哪些其他主机存在相同的漏洞 - **DNS 主机名解析**:自动 PTR 反向查找,标准化格式 (UPPERCASE.domain.lowercase),并在各处显示 - **LDAP / Active Directory**:可选的 AD 身份验证和基于组的访问控制 - **管理员 + LDAP 认证**:内置管理员用户加上可选的 LDAP 团队访问权限,通过用户名登录 - **设置界面**:从浏览器编辑所有配置(.env 文件),测试 LDAP 连接 - **可过滤和排序的表格**:列排序、多过滤器、跨所有列的全文搜索,默认过滤开放工单 - **报告生成**:HTML, PDF, Excel, Markdown - **实时更新**:WebSocket 推送通知 - **嵌入式 React SPA**:单一二进制文件,无需单独部署前端 ## 架构 ``` sequenceDiagram participant OV as OpenVAS (GVM) participant TR as OpenVAS-Tracker participant AD as Active Directory participant DB as MariaDB participant UI as React Dashboard Note over OV: Scan completes OV->>TR: HTTP GET /api/import/openvas?api_key=... TR->>OV: GMP Socket: fetch latest report OV-->>TR: XML report TR->>DB: Begin transaction TR->>DB: Create scan + vulnerabilities + tickets TR->>DB: Check risk accept rules → auto-accept matches TR->>DB: Auto-fix/reopen tickets TR->>DB: Commit TR->>UI: WebSocket push Note over UI: User logs in UI->>TR: POST /api/auth/login (username + password) alt Admin user TR->>TR: Check OT_ADMIN_PASSWORD else LDAP user TR->>AD: Bind + group check end TR-->>UI: JWT token ``` ## 使用 Docker 快速开始 ``` cp .env.example .env # edit: set OT_JWT_SECRET, OT_ADMIN_PASSWORD, OT_IMPORT_APIKEY docker compose up -d ``` UI 地址为 http://localhost:8080。登录:用户名 `admin`,密码来自 `OT_ADMIN_PASSWORD`。 ## 不使用 Docker 快速开始 ``` # 1. 创建数据库 mysql -e "CREATE DATABASE \`openvas-tracker\` CHARACTER SET utf8mb4;" # 2. 运行 migrations make migrate-up # 3. 配置 cat > .env << EOF OT_DATABASE_DSN=root@tcp(localhost:3306)/openvas-tracker?parseTime=true OT_JWT_SECRET=$(openssl rand -hex 32) OT_IMPORT_APIKEY=$(openssl rand -hex 32) OT_ADMIN_PASSWORD=your-admin-password EOF # 4. 构建并运行 make build && ./bin/openvas-tracker ``` ## 配置 所有配置通过 `.env` 文件进行。可在 UI 的设置页面编辑。 | 变量 | 默认值 | 用途 | |----------|---------|---------| | `OT_SERVER_PORT` | 8080 | HTTP 监听端口 | | `OT_DATABASE_DSN` | `...@tcp(localhost:3306)/openvas-tracker?parseTime=true` | MariaDB DSN | | `OT_JWT_SECRET` | (无 — **必填**) | JWT 签名密钥 (最少 32 个字符) | | `OT_IMPORT_APIKEY` | (空) | 导入 webhook 的 API 密钥 (最少 32 个字符) | | `OT_ADMIN_PASSWORD` | (空) | 管理员用户密码 | | `OT_LDAP_URL` | (空) | LDAP 服务器 URL | | `OT_LDAP_BASE_DN` | (空) | LDAP 搜索基础 DN | | `OT_LDAP_BIND_DN` | (空) | LDAP 服务账户 DN | | `OT_LDAP_BIND_PASSWORD` | (空) | LDAP 服务账户密码 | | `OT_LDAP_GROUP_DN` | (空) | 访问所需的 AD 组 | | `OT_LDAP_USER_FILTER` | `(sAMAccountName=%s)` | LDAP 用户搜索过滤器 | ## 身份验证 1. **管理员**:用户名 `admin` + `OT_ADMIN_PASSWORD` → 始终可用 2. **LDAP**:针对 Active Directory 进行绑定,验证组成员身份 → 如果已配置 3. **数据库回退**:现有的数据库用户 → 用于向后兼容 无自注册功能。LDAP 用户首次登录时在数据库中自动创建。 ## OpenVAS 设置 1. 在 `.env` 中设置 `OT_IMPORT_APIKEY` 2. 在 GSA 中:**Configuration → Alerts → New Alert** → HTTP Get → `http://:8080/api/import/openvas?api_key=` 3. 将警报附加到扫描任务 ## 工单生命周期 ``` Import finds new vulnerability → Ticket created (open) Import matches risk accept rule → Ticket created (risk_accepted) Import finds same vulnerability → Ticket updated (last_seen_at) Import missing old vulnerability → Ticket auto-fixed Import re-finds fixed vuln → Ticket reopened (open) Import re-finds false_positive → Skipped (never reopened) Risk acceptance expires → Ticket auto-reopened ``` ## 自动接受规则 规则会在导入期间自动将匹配的工单设置为 `risk_accepted`。可从任何工单详情页创建,范围为“仅此主机”或“所有主机”。通过自动接受规则页面进行管理。 匹配依据:CVE ID(如果有)或漏洞标题。可选到期日期。 ## API | 方法 | 路径 | 描述 | |--------|------|-------------| | POST | /api/auth/login | 登录 (username + password) | | POST | /api/import/openvas | 导入 OpenVAS XML (API-Key) | | GET | /api/import/openvas | 触发 GMP 拉取 (API-Key) | | GET | /api/hosts | 主机摘要及工单状态 | | GET | /api/hosts/:host/tickets | 某主机的工单 | | GET | /api/scans | 列出扫描 | | GET | /api/scans/diff?old=X&new=Y | 比较两次扫描 | | GET | /api/scans/:id | 扫描详情 | | GET | /api/tickets | 列出所有工单 | | POST | /api/tickets/bulk | 批量状态更改/分配 | | GET | /api/tickets/:id | 工单详情 | | PATCH | /api/tickets/:id/status | 更改状态 | | PATCH | /api/tickets/:id/assign | 分配给用户 | | POST | /api/tickets/:id/risk-rule | 从工单创建自动接受规则 | | POST/GET | /api/tickets/:id/comments | 备注 | | GET | /api/tickets/:id/activity | 活动日志 | | GET | /api/tickets/:id/also-affected | 其他受影响主机 | | GET | /api/dashboard | 优先级计数 + 工单统计 | | GET | /api/dashboard/trend | 30 天开放工单趋势 | | GET | /api/settings/setup | 设置指南 | | GET | /api/settings/users | 用户列表 (local + LDAP) | | GET/PUT | /api/settings/env | 读取/写入 .env 配置 | | POST | /api/settings/ldap/test | 测试 LDAP 连接 | | GET | /api/settings/risk-rules | 列出自动接受规则 | | DELETE | /api/settings/risk-rules/:id | 删除规则 | | GET | /api/health | 健康检查 | ## 技术栈 - **后端**:Go 1.26, Echo v4, MariaDB, golang-jwt, bcrypt, godotenv, go-ldap - **前端**:React 19, Vite, Tailwind CSS, TanStack Query, Recharts, Zustand - **部署**:Docker Compose 或 systemd (Debian) ## 许可证 GPL v3
标签:Active Directory, Checkov, CVE追踪, EVTX分析, Go语言, GPT, GraphQL引擎检测, Greenbone, IT运维, LDAP认证, MITRE, NVD, OpenVAS, PB级数据处理, PHP, Plaso, React, Socks5代理, Syscalls, Webhook, 人工智能安全, 仪表盘, 前端嵌入式, 力导向图, 单文件应用, 合规性, 团队协作, 安全仪表盘, 安全运维, 工单系统, 扫描对比, 日志审计, 漏洞修复, 漏洞管理, 程序破解, 网络安全培训, 网络研究, 自动化工单, 误报管理, 请求拦截, 风险接受