arumes31/vulfixx

GitHub: arumes31/vulfixx

基于 Go 构建的企业级 CVE 追踪与威胁情报平台,整合多源漏洞数据并通过 LLM 智能提取和自动化优先级评分帮助安全团队高效分诊漏洞。

Stars: 1 | Forks: 0

Vulfixx Logo

Build Status License Check Status Go Version Security Status License

# Vulfixx - 高级 CVE 追踪器 一个基于 Go 的健壮应用程序,用于追踪来自 NIST NVD 数据库的新通用漏洞披露(CVE)并进行预警。 ## 🚀 V2 智能功能 - **高级预警路由**:根据严重程度或风险画像,将预警精准发送至不同渠道。 - **复杂布尔预警过滤器**:使用多变量逻辑进行精准预警过滤(例如,`severity > 8 && epss > 0.1`)。 - **动态资源配额**:为每个用户/团队提供订阅和资产分层限制,以优化性能和资源利用率。 - **修复审计日志**:全面按时间顺序追踪所有漏洞状态变更和手动确认记录。 - **社区 OSINT 情报**:自动发现 Hacker News 和 Reddit 上关于每种威胁的技术讨论,并提供**社会情绪热度评分**。 - **零冗余厂商公告**:增强了对来自 CISA、Microsoft、Cisco、Ubuntu、Red Hat 等官方公告的多格式同步(RSS 1.0、2.0 和 Atom),并实施严格的“仅匹配”策略以防止数据膨胀。 - **社交热度与威胁趋势**:集成 GitHub 的“热度”计,用于追踪社区关注度和公开的 PoC 存在情况。 - **EPSS 集成**:集成漏洞利用预测评分系统(EPSS),进行基于概率的风险评估。 - **智能预警批处理**:由 Redis 支持的智能缓冲,将相关威胁归类为统一报告。 - **可操作通知**:邮件预警中嵌入直接的“确认”和“静音”功能。 - **基础设施上下文**:自动将漏洞映射到特定的基础设施资产。 - **增强的可观测性**: - **自愈健康检查**:自动验证同步 worker 并提供关键预警。 - **错误追踪**:通过 Sentry 集成后端和前端报告。 - **性能基准测试**:针对请求延迟和 worker 吞吐量集成 CI 检查。 - **现代用户体验**: - **骨架屏加载状态**:在数据获取期间使用闪烁的占位符提升感知速度。 - **高密度数据模式**:专为处理数百个漏洞的分析师设计的特殊“紧凑”视图切换。 - **引导式入门**:为新分析师提供交互式欢迎导览。 - **CWE 分类**:使用通用缺陷枚举(CWE)情报进行深度漏洞分类。 - **重复检测**:基于智能的分组,将通过多个渠道报告的相同漏洞进行归类。 - **基础设施即代码**:通过 Dependabot 自动更新 Go 和 NPM 依赖。 - **自动化情报**:每周邮件摘要和 CISA KEV 自动同步。 - **增强的遥测技术**:风险画像分布图和直接的漏洞概念验证(PoC)发现链接。 - **资产关联监控**:通过资产关键字映射进行主动的基础设施防御。 - **优先级分类引擎**:基于 CVSS、EPSS 和 CISA KEV 的存在情况进行自动化的 P0-P3 威胁评分,以优先处理关键修复。 - **安全集成**:经过过滤、token 认证的 RSS 订阅源,用于个性化的技术情报。 - **丰富的邮件预警**:带有 OSINT 链接、厂商公告和风险仪表的高级 HTML 通知。 - **现代 UI**:具有高级玻璃拟态琥珀色主题的高密度仪表板,构建在自定义 SPA 导航框架之上,实现高性能、无缝切换。具备**交互式列排序**、动态多变量过滤和同步的风险分布图功能。 - **高密度 CWE 可视化**:超紧凑仪表板网格,显示前 15 种漏洞类型,带有局部化的琥珀色主题样式和超紧凑的 10px 条形图。 - **智能 CWE 名称映射**:针对缺少 NVD 元数据的数据点,进行健壮的服务器端人类可读 CWE 标题(例如“SQL Injection”)解析。 - **高级厂商情报**:使用 **NVD CPE(通用平台枚举)**字符串的企业级产品检测引擎,实现对厂商和产品的高保真识别。 - **分类软件影响**:自动将脆弱资产分类为**应用程序 (a)**、**操作系统 (o)**和**硬件 (h)**类别,并提供视觉区分。 - **多产品情报**:结构化的 **JSONB 存储**,支持提取和追踪每个 CVE 的多个受影响产品,由 **GIN(通用倒排索引)**提供支持,实现高性能的亚秒级查询。 - **厂商名称规范化**:集中式别名映射系统,统一不一致的厂商名称(例如,`microsoft_corp` → `Microsoft`),以生成专业级的报告。 - **情报同步优化**:具有批处理(200 个 CVE/次)和针对现有记录**自动化 30 天刷新周期**的高吞吐量同步引擎。 - **OSV 和 GreyNoise 集成**:加强对开源漏洞(OSV)和 GreyNoise 威胁情报的监控,并自动检测陈旧数据。 - **LLM 驱动的检测**:利用本地 LLM(Ollama)或 Cloud API(Gemini),从复杂的描述中高级提取**厂商**、**产品**和**受影响版本**。 - **勒索软件与威胁行为者情报映射(策略 1 和 3)**:零成本的活跃勒索软件活动和威胁行为者匹配,利用 CISA KEV 的 `"knownRansomwareCampaignUse"` 提取,以及动态、高性能的 OSINT 公共情报源同步和精选的兜底基准数据。无需任何外部付费 API 即可展示高级的“勒索软件活跃”徽章和多行为者详细信息面板。 - **生产级安全强化**:全面的平台级强化,包括零绕过环境检查、百分号编码的数据库 DSN、失败即关闭的速率限制器/会话中间件、关闭监听器端口泄漏、带缓冲的响应序列化、清洗 PII 日志记录器、白名单 worker,以及 100% 经测试验证的合规性。 ## 🤖 LLM 智能(可选) 当官方 NVD 元数据缺失或不完整时,Vulfixx 可以使用大型语言模型来“填补空白”。这对于较旧的 CVE 或非标准报告特别有用。 ### 本地 LLM 设置(推荐) 默认情况下,Vulfixx 配置为使用 **Ollama** 进行私密、本地且免费的基于 CPU 的提取。 1. 启动服务:`docker-compose up -d`。 2. 将模型下载到本地容器中: docker exec -it vulfixx-ollama-1 ollama pull phi3 3. Worker 现在将自动使用本地模型处理任何缺少厂商/产品数据的 CVE。 ### Cloud LLM 设置 如果您偏好更高的性能,可以使用 **Google Gemini**: 1. 从 Google AI Studio 获取 Gemini API Key。 2. 在您的环境中设置 `LLM_PROVIDER=gemini` 和 `GEMINI_API_KEY=your_key`。 ## 🏗️ 架构 应用程序遵循模块化架构,旨在防止单体巨石文件并改善领域分离。 ### Web 层 (`internal/web`) - **`base.go`**:核心中间件(Auth、Admin、Proxy、Security)、模板渲染和全局统计缓存。 - **`auth_handlers.go`**:用户身份验证、注册和电子邮件验证。 - **`dashboard_handlers.go`**:CVE 监控、交互式排序、状态更新和备注管理。 - **`subscription_handlers.go`**:关键字订阅、RSS 订阅源和预警操作。 - **`asset_handlers.go`**:IT 资产清单和关键字映射。 - **`activity_handlers.go`**:审计日志和 JSON 活动导出。 - **`alert_handlers.go`**:按时间顺序排列的通知历史。 - **`admin_handlers.go`**:管理员用户管理。 ### Worker 层 (`internal/worker`) - **`alert_worker.go`**:CVE 队列处理和多变量过滤。 - **`alert_buffer.go`**:基于 Redis 的摘要创建和传递延迟逻辑。 - **`notifier.go`**:具有 SSRF/DNS 防护的多渠道调度器(电子邮件、Webhooks)。 - **`email_worker.go`**:SMTP 传递和验证电子邮件队列。 - **`sync_nvd.go`**:具有增量退避机制的 NVD CVE 数据同步。 - **`sync_github.go`**:GitHub 社交热度和 PoC 发现追踪。 - **`sync_cisa.go`**:自动化的 CISA KEV 目录同步,高可见性地提取勒索软件活动标志(`cisa_ransomware`)。 - **`sync_threat_intel.go`**:自动同步公共 OSINT 威胁情报源,将活跃的勒索软件活动和针对的威胁行为者映射到 CVE 记录中,并由精选的基准兜底数据提供支持。 - **`sync_advisory_rss.go`**:针对来自 CISA、Microsoft、AWS、VMware、Oracle、GitHub、CERT-EU、FortiGuard、Cisco、Red Hat、Ubuntu 和 ZDI 的官方公告进行通用多格式同步(RSS 1.0、2.0 和 Atom)。通过 `processAdvisoryFeed`(必须包含有效的 CVE-ID)和 `integrateAdvisoryCVE`(仅在数据库中已存在该 CVE 时才同步)实施**“仅匹配”策略**,以防止数据膨胀。 - **`sync_epss.go`**:基于概率的风险评分(FIRST EPSS)。 - **`cron_worker.go`**:定时任务(每周摘要)。 ## ⚡ 核心系统强化与性能 Vulfixx 经过企业级系统改进的强化,旨在实现高可用性、高性能和事务安全性: - **基于 Redis 的会话存储**:使用 `github.com/rbcervilla/redisstore/v9` 从客户端 cookie 存储迁移到服务器端 Redis 会话存储,实现即时会话吊销和增强的安全性。为没有运行 Redis 实例的本地或测试环境保留了自动、安全的加密 `CookieStore` 兜底机制。 - **标准化结构化日志 (`log/slog`)**:全面过渡到具有上下文支持的标准库结构化日志(`log/slog`)。配置为在生产环境中输出干净、高性能的 JSON 日志以供日志收集器摄取,并在开发环境中输出人类可读的结构化日志。 - **数据库连接池优化 (`pgxpool`)**:明确配置了自定义连接池限制(`MaxConns = 25`、`MinConns = 5`、`MaxConnLifetime = 30m`、`MaxConnIdleTime = 15m`),以确保准备好预热的连接并防止数据库连接枯竭。 - **Worker 优雅关闭与原子同步事务**:增强了后台同步流程(NVD、CISA KEV、RSS 公告源),使其在原子的 Postgres 数据库事务(`pgx.Tx`)中运行,确保在失败或 worker 关闭时安全回滚未完成的同步操作。所有同步循环都会在迭代边界处验证活动上下文的取消(`ctx.Done()`),以实现干净的优雅退出。 - **解耦任务队列架构 (Asynq)**:使用 `github.com/hibiken/asynq` 将繁重的后台任务(预警评估、验证电子邮件和电子邮件更改)从 HTTP 流程中转移出来,并带有自动指数退避重试机制。 - **高性能路由层 (Chi)**:用现代标准兼容的 `github.com/go-chi/chi/v5` 替换了 Gorilla Mux,具有子路由、超时传播和自定义速率限制中间件功能。 - **安全 gRPC 查询接口**:在 `:9091` 端口上公开辅助高速 gRPC 服务器,以支持亚毫秒级的外部 CVE 情报查询。 - **实时活动流 (SSE)**:利用由 Redis Pub/Sub 支持的服务器发送事件(SSE),将实时审计日志活动直接流式传输到仪表板。 - **乐观锁与并发控制**:在目标实体上使用版本列,以防止在分析师手动修改期间发生冲突更新。 - **独占 Argon2id 密码哈希**:完全淘汰了传统的 Bcrypt 支持,转而采用更现代、计算密集型的 Argon2id 算法,并通过预先计算的时间安全虚拟验证进行强化,以彻底消除侧信道用户枚举尝试。 ## 入门指南 ### 前置条件 - [Docker](https://www.docker.com/get-started) - [Docker Compose](https://docs.docker.com/compose/install/) - [Go 1.26.3](https://golang.org/dl/)(可选,用于本地开发) - [act](https://github.com/nektos/act)(可选,用于在本地运行 GitHub Actions) ### 安装说明 1. 克隆仓库: git clone https://github.com/arumes31/vulfixx.git cd vulfixx 2. 在 `docker-compose.yml` 中配置环境变量: - `SMTP_HOST`:您的外部 SMTP 服务器地址。 - `SMTP_PORT`:SMTP 服务器端口(例如,587)。 - `SMTP_USER`:SMTP 用户名。 - `SMTP_PASS`:SMTP 密码。 - `SESSION_KEY`:用于会话签名的安全随机字符串。 - `CSRF_KEY`:用于 CSRF 防护的安全随机字符串(恰好 字节)。 3. 启动应用程序: docker-compose up --build 使用 GHCR (GitHub Container Registry) 运行 如果您不想在本地构建镜像,可以使用来自 GHCR 的预构建镜像: docker-compose -f docker-compose.ghcr.yml up 应用程序将可通过 `http://localhost:8080` 访问。 配置 应用程序通过 `docker-compose.yml` 文件中的环境变量进行配置: | 变量 | 描述 | 默认值 | |----------|-------------|---------| | `DB_HOST` | PostgreSQL 主机 | `db` | | `DB_PORT` | PostgreSQL 端口 | `5432` | | `DB_USER` | PostgreSQL 用户名 | `cveuser` | | `DB_PASSWORD`| PostgreSQL 密码 | `cvepass` | | `DB_NAME` | PostgreSQL 数据库名称 | `cvetracker` | | `DB_SSLMODE` | PostgreSQL SSL 模式 (`disable`, `prefer`, `require`, `verify-full`) | `prefer` | | `REDIS_URL`| Redis 连接 URL | `redis:6379` | | `SMTP_HOST`| 外部 SMTP 服务器 | `smtp.example.com` | | `SMTP_PORT`| SMTP 服务器端口 | `587` | | `SMTP_USER`| SMTP 用户名 | `user@example.com` | | `SMTP_PASS`| SMTP 密码 | `password` | | `SMTP_MAILFROM`| 电子邮件的发件人地址(默认为 `SMTP_USER`) | `alerts@example.com` | | `SESSION_KEY`| 会话签名密钥 | `supersecretkey...` | | `CSRF_KEY` | CSRF 保护密钥(32 字节) | `0123456789...` | | `SECURE_COOKIE` | 启用安全 cookie 标志(适用于 HTTPS) | `true` | | `BASE_URL` | 应用程序基础 URL | `http://localhost:8080` | | `ADMIN_EMAIL`| 种子管理员邮箱 | `admin@example.com` | | `ADMIN_PASSWORD`| 种子管理员密码 | `change-me` | | `ADMIN_TOTP_SECRET`| 种子管理员 TOTP 密钥 (base32) | `YOUR_SECRET` | | `NVD_API_KEY`| NIST NVD API 密钥(用于更高的速率限制) | `(empty)` | | `NVD_API_URL`| 自定义 NVD API 端点(可选) | `https://...` | | `APP_ENV` | 应用程序环境 (`development`, `production`) | `production` | | `PORT` | 应用程序服务器端口 | `8080` | | `SENTRY_DSN` | 用于错误报告的 Sentry DSN | `(empty)` | | `LLM_PROVIDER`| LLM 提供商链,以逗号分隔 (`ollama`, `gemini`, `mistral`) | `ollama` | | `LLM_ENDPOINT`| 本地 LLM (Ollama) 的 API 端点 | `http://ollama:11434` | | `LLM_MODEL` | Ollama 的模型名称(例如 `phi3-vulfixx`, `llama3`) | `phi3-vulfixx` | | `LLM_TIMEOUT` | 智能提取超时时间(秒) | `600` | | `GEMINI_API_KEY`| Google Gemini 提供商的 API 密钥 | `(empty)` | | `GEMINI_MODEL` | Gemini 模型版本 | `gemini-3.1-flash-lite` | | `GEMINI_API_VERSION`| Google Gemini 提供商的 API 版本(对于结构化输出必须是 `v1beta`) | `v1beta` | | `GEMINI_RPM` | 用于调整 Gemini 调用速度的免费层级每分钟请求数(针对付费层级/更高限制的模型提高此值) | `15` | | `GEMINI_RPD` | 免费层级每日请求硬性上限,按 UTC 每日在 Redis 中追踪(`0` 禁用;针对付费层级提高此值) | `500` | | `MISTRAL_API_KEY`| Mistral AI 提供商的 API 密钥 | `(empty)` | | `MISTRAL_MODEL` | Mistral 模型(例如 `mistral-small-latest`) | `mistral-small-latest` | | `MISTRAL_ENDPOINT`| Mistral API 基础 URL | `https://api.mistral.ai/v1` | | `LLM_DEBUG` | 启用原始 LLM 提示/响应日志记录 (`true`/`false`) | `false` | ### Ollama 服务器调优(仅限 Ollama 容器) | 变量 | 描述 | 默认值 | |----------|-------------|---------| | `OLLAMA_KEEP_ALIVE` | 模型在 RAM 中保留的时间(例如,`24h`) | `24h` | | `OLLAMA_LOAD_TIMEOUT` | 允许模型加载/操作的最大时间 | `600s` | | `OLLAMA_NUM_PARALLEL` | 并发请求槽位 | `4` | | `OLLAMA_MAX_LOADED_MODELS` | 保持在内存中的最大模型数 | `1` | | `OLLAMA_DEBUG` | 启用详细 Ollama 服务器日志 | `1` | ## 开发说明 ### 运行测试 运行 Go 测试套件: ``` go test ./... ``` 在启用竞争检测器的情况下运行测试(需要 CGO 和像 GCC 这样的 C 编译器): ``` # 如果未安装,在 Windows 上通过 winget 安装 WinLibs MinGW: # winget install BrechtSanders.WinLibs.POSIX.UCRT # 然后在启用 CGO 的情况下运行(根据需要调整 gcc 路径): $env:CGO_ENABLED="1" go test -race ./... ``` 或者使用自动化的测试脚本并附带覆盖率报告: ``` ./run_all_tests.sh ``` ### CI/CD 流水线 本项目使用现代的 GitHub Actions 流水线(`.github/workflows/docker-build.yml`)进行持续集成: - **环境**:所有 CI 作业都在 **Go 1.26.3** 的容器化环境中运行。 - **单元测试**:自动化的 Go 测试,确保逻辑正确性。 - **代码检测**:使用 `golangci-lint` (v2.x) 进行严格的代码质量检查。 - **安全扫描**: - **Gsec**:使用 `gosec` 进行静态分析(SAST)。 - **Govul**:使用 `govulncheck` 进行漏洞扫描。 - **Godep**:使用 `osv-scanner` 进行依赖项安全扫描。 - **样式**:现代化的 CSS 流水线,采用 **Tailwind CSS v4** 实现高性能、零运行时的样式设定。 - **容器发布**:镜像会自动构建并推送到 **GitHub Container Registry (GHCR)**。 要在本地使用 `act` 运行整个 CI 流水线: ``` act ``` 或者运行特定作业: ``` act -j test act -j lint ``` ### 本地开发脚本 为方便起见,提供了几个 shell 脚本用于自动执行常见任务: - **`run_all_tests.sh`**:运行所有包含覆盖率的测试并显示摘要。 - **`test_lint.sh`**:使用项目配置执行 `golangci-lint`。 - **`fix_worker_panic.sh`**:用于修补特定 worker 边缘情况的实用程序。 - **`fix_errcheck.sh`**:用于自动进行错误检查修复的实用程序。 - **公共 SEO 仪表板**:高性能的公共威胁情报门户,内置 Schema.org JSON-LD 结构化数据和 Open Graph 元标记,以提升搜索引擎权威性。 - **站点地图与搜索发现**:自动生成 `sitemap.xml` 和 `robots.txt`,以便对前 1000 个威胁进行高效抓取。 - **CSP Nonce 强化**:高级内容安全策略实施,对所有内联脚本执行使用唯一的每请求 nonce。 ## 🗄️ 数据库迁移 (Goose) Vulfixx 集成了 **Goose**(Go 原生的数据库迁移框架),用于进行健壮的、版本化的数据库架构变更和自动化升级。 ### 主要特性 - **动态连接字符串**:凭据和连接选项(`DB_HOST`、`DB_PORT`、`DB_USER`、`DB_PASSWORD`、`DB_NAME`、`DB_SSLMODE`)在启动时从环境中动态收集,以构建安全的 PostgreSQL 连接字符串。 - **内嵌迁移**:所有 SQL 迁移都使用 `//go:embed` 直接编译到 Go 二进制文件中,并在应用程序启动时以编程方式执行。 - **零依赖执行**:不需要外部的 python 解释器、pip 依赖项或 site-packages。迁移以微秒级的延迟即时运行。 ### CLI 用法(可选) 如果您安装了 `goose` CLI 工具,您可以手动检查或管理迁移: ``` # 检查 migrations 的状态 goose -dir internal/db/sql/migrations postgres "host=localhost user=youruser dbname=yourdb sslmode=disable" status # 手动应用 migrations goose -dir internal/db/sql/migrations postgres "host=localhost user=youruser dbname=yourdb sslmode=disable" up ``` ## 🛡️ 安全强化与审计 代码库经过了全面的安全审计(2026 年 4 月),使用了自动化的静态分析(`gosec`)、依赖项扫描(`govulncheck`)以及对公共攻击面的人工渗透测试。 ### 最近的修复措施 - **路由 Token 泄漏防护**:移除了 URL 路径参数中的敏感 token,改用基于查询字符串的提取,防止 token 在 Web 服务器访问日志和浏览器历史记录中泄漏。 - **RenderTemplate 中的空指针安全**:使用 `v.IsNil()` 对模板实施动态反射检查,以彻底消除指针渲染路径上的运行时空指针 panic。 - **Redis 客户端安全**:通过安全检查强化了仪表板处理程序,以优雅地处理未初始化的 Redis 缓存,并干净地回退到直接的数据库查询。 - **JSON 序列化错误缓解**:确保所有 OSV 同步例程都会记录并优雅地处理 JSON 序列化错误,避免无声的数据库损坏或数据丢失。 - **XSS 缓解(CSP Nonces)**:对所有内联脚本实施唯一的每请求加密 nonce。 - **结构化数据防护**:通过后端序列化和 `template.HTML` 转义强化 JSON-LD 生成。 - **公共攻击面滥用防护**:在所有公共 SEO 路由上集成 `RateLimitMiddleware`,并实施严格的分页深度验证。 - **SSRF 缓解**:在所有 worker 同步任务中实施严格的 URL 验证和协议检查。 - **SMTP 注入防护**:集中化电子邮件清理(`sanitizeEmail`),进行 CR/LF 字符剥离和适当的 RFC 解析。 - **会话安全**:强制执行 `SameSite=Lax` cookie 策略,并使 `sslmode` 可配置,以确保安全的生产数据库连接。 - **SQL 注入防护**:通过 `pgx/v5` 将所有搜索和过滤逻辑 100% 迁移到参数化查询。 ### 自动化检查 CI 流水线会自动运行: - `golangci-lint`:用于代码质量和最佳实践。 - `gosec`:用于漏洞扫描和静态安全分析。 - `go test`:全面的单元和集成测试套件。 ## 许可证 该项目基于 [MIT 许可证](LICENSE) 授权。
标签:AI风险缓解, EVTX分析, Go语言, LLM集成, Python工具, 威胁情报, 安全运营, 开发者工具, 扫描框架, 搜索引擎查询, 日志审计, 漏洞追踪, 程序破解, 请求拦截