shift/vulnz

GitHub: shift/vulnz

这是一个用 Go 编写的漏洞数据聚合器,整合了 28 个来源的安全数据,并针对欧盟网络弹性法案(CRA)的合规性要求进行了专门优化。

Stars: 0 | Forks: 0

# vulnz vulnz 从 28 个提供方(NVD、操作系统发行版、欧盟监管机构、漏洞利用数据库)收集、转换并存储漏洞数据到统一的 JSON schema 中,重点关注欧盟网络弹性法案(EU Cyber Resilience Act)合规性。 ## Vunnel vs vulnz (灵感来自 Vunnel) | | Vunnel (Python) | vulnz | |---|---|---| | 语言 | Python 3.10+ | Go 1.25 | | 分发方式 | pip 包 + Python 运行时 | 单个静态二进制文件 | | 提供方数量 | 27 | 28 | | 存储 | 仅 SQLite | 平面文件 和 SQLite | | 并发模型 | 基于进程 | 基于 Goroutine | | HTTP 客户端 | requests | 每主机速率限制、带退避的重试、连接池 | | Schema 验证 | Python 类 | JSON Schema (编程式) | | EU CRA 支持 | 部分 | 完整 (KEV, EUVD, BSI CERT-Bund, CERT-FR, CISA ICS-CERT) | ## 安装 ``` git clone https://github.com/shift/vulnz.git cd vulnz go build -o vulnz ./cmd/vulnz ``` 或使用 Make: ``` make build ``` ## 快速开始 ``` ./vulnz list ./vulnz run kev ./vulnz run --all ./vulnz run --all --parallel 8 ``` ## CLI 参考 ### 全局标志 | 标志 | 简写 | 默认值 | 描述 | |---|---|---|---| | `--config` | `-c` | `~/.vulnz.yaml` | 配置文件路径 | | `--log-level` | `-l` | `info` | 日志级别 | | `--verbose` | `-v` | `false` | 详细输出 | | `--output` | `-o` | `text` | 输出格式 | ### 命令 ``` vulnz run [provider] Run one or more providers vulnz list List registered providers vulnz status [provider] Show provider status and data freshness vulnz clear [provider] Clear provider workspace data vulnz config show Display current configuration vulnz config validate Validate configuration file vulnz version Show version, commit, and build info ``` ### Run 标志 | 标志 | 简写 | 默认值 | 描述 | |---|---|---|---| | `--all` | `-a` | `false` | 运行所有已注册的提供方 | | `--provider` | `-p` | | 特定提供方,逗号分隔 | | `--workspace` | `-w` | `./data` | 工作空间根目录 | | `--parallel` | | `4` | 最大并发提供方执行数 | | `--since` | | | 仅获取晚于时间戳 的数据 | ## 提供方 | 提供方 | 描述 | 数据源 | |---|---|---| | `kev` | 已知被利用漏洞 | EUVD 统一 KEV dump | | `euvd` | 欧盟漏洞数据库 | ENISA 被利用漏洞 API | | `euvd-mapping` | CVE-EUVD ID 映射 | ENISA 映射 CSV | | `nvd` | 国家漏洞数据库 | NVD CVE API 2.0 | | `rhel` | Red Hat Enterprise Linux | CSAF 2.0 公告 | | `ubuntu` | Ubuntu Security | CVE tracker git repo | | `debian` | Debian Security | JSON + DSA text | | `alpine` | Alpine Linux | secdb JSON | | `amazon` | Amazon Linux | RSS XML + HTML | | `oracle` | Oracle Linux | OVAL XML | | `sles` | SUSE Linux Enterprise | OVAL XML | | `mariner` | Azure Linux Mariner | OVAL XML | | `rocky` | Rocky Linux | OSV API | | `alma` | AlmaLinux | OSV git repo | | `fedora` | Fedora | Bodhi REST API | | `arch` | Arch Linux | JSON + ASA | | `wolfi` | Wolfi OS | secdb JSON | | `chainguard` | Chainguard | secdb JSON | | `chainguard-libraries` | Chainguard Libraries | OpenVEX JSON | | `minimos` | Minimos | secdb JSON | | `bitnami` | Bitnami | vulndb git repo | | `bsi-cert-bund` | BSI CERT-Bund | CSAF 2.0 JSON | | `cisa-ics-cert` | CISA ICS-CERT | CSAF 2.0 + GitHub API | | `cert-fr` | CERT-FR (ANSSI) | RSS XML + HTML | | `epss` | 漏洞利用预测评分 | EPSS CSV | | `eol` | 生命周期结束日期 | endoflife.date API | | `photon` | Photon OS | CVE JSON + wiki | | `secureos` | SecureOS | secdb gzip + SHA256 | ## 架构 ``` cmd/vulnz/ CLI entry point internal/ cli/ Cobra command definitions provider/ Provider framework (registry, executor, interfaces) providers/ Blank imports for provider registration storage/ Flat-file and SQLite storage backends workspace/ Workspace management (locks, checksums, state) http/ HTTP client with rate limiting, retry, backoff schema/ JSON Schema validation utils/ oval/ OVAL XML parser csaf/ CSAF 2.0 parser rpm/ RPM version comparison vulnerability/ Vulnerability type definitions archive/ Archive extraction utilities date/ Date parsing helpers ``` 每个提供方都实现 `Provider` 接口,通过 `init()` 注册自己,并在运行时通过提供方注册表被发现。执行器以可配置的并行度和每个提供方的超时设置并发运行提供方。 ## 配置 配置文件:`~/.vulnz.yaml`(或 `--config` 标志)。示例配置可在 [`config.example.yaml`](config.example.yaml) 中找到。 配置优先级:CLI 标志 > 环境变量(`VULNZ_` 前缀)> 配置文件。 关键设置: ``` log: level: info root: ./data executor: max_concurrent: 4 timeout: 30m providers: nvd: runtime: result_store: sqlite existing_results: delete-before-write api_key: "${NVD_API_KEY}" ``` 建议使用环境变量 `NVD_API_KEY` 以绕过 NVD API 速率限制。 ## 输出 提供方将结果存储在 `//storage/` 下。每个漏洞都是一个遵循标准化输出 schema 的 JSON 文件。 ## EU CRA 合规性 vulnz 专门专注于欧盟网络弹性法案(EU Cyber Resilience Act)合规性。多个提供方携带 EU CRA 所需的数据: - **KEV** -- 带有来源归因的 `exploited_in_wild` 标志 - **EUVD** -- 来自 ENISA 的 `exploitedSince` 日期 - **BSI CERT-Bund** -- 德国严重性映射,TR-03116 合规字段 - **CERT-FR** -- ANSSI 漏洞跟踪 - **CISA ICS-CERT** -- ICS 公告数据 所有面向欧盟的提供方都标记为 `eu-cra`,并以标准化的 Vunnel 漏洞 schema 生成数据。 ## 开发 ``` make test Run tests with coverage make lint Run linters (go vet, go fmt, golangci-lint) make clean Remove build artifacts make deps Download and tidy dependencies ``` ### 添加提供方 1. 创建 `internal/provider//` 目录,包含 `provider.go` 和 `manager.go` 2. 实现 `Provider` 接口 3. 通过在 `internal/providers/register.go` 中进行空白导入 来注册 4. 在 `_suite_test.go` 文件中添加测试(使用 Ginkgo/Gomega) ## 已知限制 ### 处理大型 JSON Payload 时的内存使用 某些提供方(特别是 `nvd`、`ubuntu`、`alpine`)目前在解析前会将整个 JSON 响应加载到内存中。在处理多 GB 数据集时,这可能会导致高内存使用或在较小的机器上出现内存不足(OOM)崩溃。 **变通方法:** - 单独运行内存密集型提供方:`./vulnz run nvd` - 确保足够的 RAM(完整 `--all` 运行建议 8GB+) - 使用 `--parallel 1` 标志以减少并发内存压力 **跟踪:** 这是一个已知问题,将通过迁移到流式 JSON 解析 (`json.NewDecoder`) 来解决。请参阅 [GitHub Issue #1](https://github.com/shift/vulnz/issues/1)。 ### 孤立的 SQLite WAL 文件 如果进程被强制终止 (SIGKILL),临时 SQLite 数据库文件(`.db`、`.wal`、`.shm`)可能会遗留在工作空间目录中。这些文件可以安全地手动删除。 **跟踪:** 计划在启动时自动清理。请参阅 [GitHub Issue #2](https://github.com/shift/vulnz/issues/2)。 ## 许可证 AGPL-3.0 -- 参见 [LICENSE](LICENSE)。 ## 致谢 由 [shift](https://github.com/shift) 创建,灵感来自 Anchore, Inc. 的 [Vunnel](https://github.com/anchore/vunnel)。
标签:BSI, CERT-Bund, CERT-FR, DNS解析, EU CRA, EVTX分析, Exploit数据库, Goroutine, Go语言, GPT, ICS-CERT, JSON Schema, KEV, NVD, SQLite, 命令控制, 威胁情报, 安全合规, 开发者工具, 开源项目, 操作系统漏洞, 数据采集, 日志审计, 欧盟法规, 漏洞管理, 漏洞聚合, 程序破解, 网络代理, 网络安全, 网络安全韧性法案, 隐私保护, 静态二进制