verilyze/verilyze

GitHub: verilyze/verilyze

一款使用 Rust 编写的快速模块化软件组成分析(SCA)工具,专注于依赖漏洞检测。

Stars: 0 | Forks: 0

Find[Find manifests] Find --> Parse[Parse dependencies] Parse --> Resolve[Resolve versions] Resolve --> CVE[Check CVEs] CVE --> Report[Report results] ``` 报告会包含每个易受攻击包的清单文件路径,因此您可以看到在扫描包含许多 嵌套清单(例如单体仓库)的目录时,是哪个清单引入了每个 CVE。 **可达性:** 根据 [architecture/PRD.md](architecture/PRD.md) FR-032,报告 最终可能会附加每个 CVE 的可达性标志。当前版本不会设置该字段,或在分析实现完成前省略该字段;严重性和 CVE 列表仍遵循记录的行为。 ## 安装 预构建的二进制文件、crates.io 包、公共容器镜像和发布的发行包**目前尚不可用**。典型方法: - **本地构建:** `make release`,然后运行 `target/release/vlz`(请参考快速入门)。 - **系统安装:** 使用可选的 `PREFIX` / `DESTDIR` 执行 `make install`。 - **软件包:** 通过 Makefile 目标构建 `.deb`、`.rpm`、AUR 制品或 Alpine APK;使用 `make docker` 构建 **本地** OCI 镜像。 完整命令、Docker 用法、可选提供程序和 Shell 补全: [INSTALL.md](INSTALL.md)。 ## Shell 补全 补全功能通过 **`make install`** 安装,或使用 `vlz generate-completions` 生成(请参考 [INSTALL.md](INSTALL.md#shell-completion))。 ## 配置优先级 选项按优先级顺序解析;每个来源会覆盖其下方的选项: 1. **CLI 标志**(例如 `--parallel 20`、`--cache-ttl-secs 86400`、`--min-score 7.0`)——最高优先级 2. **环境变量** `VLZ_*`(例如 `VLZ_PARALLEL_QUERIES=20`, `VLZ_CACHE_TTL_SECS=86400`) 3. **用户配置文件**(`-c/--config <路径>` 或默认 `$XDG_CONFIG_HOME/verilyze/verilyze.conf`) 4. **系统配置**(`/etc/verilyze.conf`)——最低优先级 **缓存 TTL:** 修改 **cache_ttl_secs**(通过配置、环境变量或 CLI)只会影响 **新的**缓存条目;现有条目保留其存储的过期时间,直到它们 过期或被清除。请参考 [docs/configuration.md](docs/configuration.md) 和 `vlz db set-ttl` 以调整现有条目。 请参考 [architecture/PRD.md](architecture/PRD.md)(CFG-001 - CFG-008)和 [docs/configuration.md](docs/configuration.md) 中的完整关键表。运行 `vlz config --list` 以查看有效值。 **可选 CVE 提供程序的环境变量**(不会存储在配置中): | 变量 | 提供程序 | 用途 | |------|----------|------| | GITHUB_TOKEN | GitHub | 可选;更高的速率限制(Actions 会设置此值) | | VLZ_GITHUB_TOKEN | GitHub | 覆盖 GITHUB_TOKEN | | VLZ_SONATYPE_EMAIL | Sonatype | Sonatype OSS Index 所必需 | | VLZ_SONATYPE_TOKEN | Sonatype | Sonatype OSS Index 所必需 | ## CLI 参考(摘要) **帮助与手册:** `vlz --help` 会从 clap 打印简短用法摘要。 **`vlz help`** 通过运行嵌入的 **`vlz.1`** 打开完整手册 (在默认 `docs` 特性下构建时有效;否则退出 2 并给出提示)。 **`vlz help [子命令]`** 接受可选的子命令名称;目前它显示 与 `vlz help` 相同的主手册。执行 `make install` 后,**`man vlz`** 使用已安装的手册页。来源:[man/vlz.1](man/vlz.1)。 | 子命令 | 描述 | |--------|------| | `vlz scan [路径]` | 扫描清单和 CVE;可选路径(默认:当前工作目录) | | `vlz list` | 列出已注册的语言插件 | | `vlz config --list` | 显示有效配置 | | `vlz config --example` | 输出 verilyze.conf.example 并附上当前环境的有效值 | | `vlz config --set KEY=VALUE` | 设置配置键(例如 `python.regex="^requirements\\.txt$"`) | | `vlz db list-providers` | 列出 CVE 提供程序(例如 osv、nvd、github、sonatype(在构建时启用相应特性时)) | | `vlz db stats` | 缓存统计信息 | | `vlz db show [--format FORMAT] [--full]` | 显示缓存条目(键、TTL、添加时间、CVE 摘要或完整负载) | | `vlz db set-ttl SECS [--entry KEY] [--all] [--pattern PATTERN] [--entries KEYS]` | 更新现有缓存条目的 TTL | | `vlz db verify` | 验证数据库完整性(SHA-256) | | `vlz db migrate` | 运行迁移 | | `vlz fp mark CVE-ID [--comment ...] [--project-id ID]` | 将 CVE 标记为误报(可选项目范围) | | `vlz fp unmark CVE-ID` | 移除误报标记 | | `vlz generate-completions SHELL` | 生成 Shell 补全脚本(bash、zsh、fish) | | `vlz help [子命令]` | 显示完整手册(`vlz.1`),通过 `man`;子命令可选 | | `vlz --version` |打印版本 | **扫描选项(示例):** `--format plain|json|sarif|cyclonedx|spdx`, `--summary-file html:路径,cyclonedx:sbom.json,spdx:sbom.spdx.json`, `--provider osv|nvd|github|sonatype`,`--parallel N`,`--project-id ID`, `--cache-ttl-secs SECS`,`--offline`,`--benchmark`,`--min-score`,`--min-count`, `--exit-code-on-cve`,`--fp-exit-code`,`--cache-db`,`--ignore-db`。 ### 项目范围的误报 对于项目范围的误报: 1. 运行 `vlz fp mark CVE-ID --project-id X` 添加项目范围的误报; 2. 运行 `vlz scan --project-id X` 扫描该项目。 两个命令必须使用相同的 `project_id`,误报才会生效。 如果不使用 `--project-id`,则仅应用全局误报(标记时未指定 `--project-id`)。 ## 退出代码 退出 0 表示分析成功完成且结果已知。任何 失败(配置、网络、解析等)都会返回非零代码,以防止 CI 中的误报。 | 代码 | 含义 | |------|------| | 0 | 成功:分析完成;无 CVE(或仅根据 fp-exit-code 的误报) | | 1 | 恐慌 / 内部错误 | | 2 | 配置错误(未知键、无效值等) | | 3 | 缺少必需的包管理器 | | 4 | 需要 CVE 查询但使用了 `--offline` | | 5 | CVE 提供程序获取失败(网络、API 错误、认证等) | | 86 | 一个或多个 CVE 达到阈值(可通过 `--exit-code-on-cve` 覆盖) | ## 错误报告与反馈 通过 **[GitHub Issues](https://github.com/verilyze/verilyze/issues)** 报告错误、回归或功能建议,以便 保持可搜索和可链接。对于**安全漏洞**,请使用 [SECURITY.md](SECURITY.md) 中的流程(私有报告),而非公开问题。 ## 贡献者指南 首先运行 `make setup`。它会检查必需的系统工具(`python3`、`cargo`、 `shellcheck`)并引导非系统级开发者工具(`cargo-deny`、 `cargo-about`、`cargo-llvm-cov`、`cargo-afl`,以及 Python lint/test 虚拟环境)。 如果首次编译时提示缺少链接器,请安装 `gcc` + `ld.bfd` (通常通过 `binutils`),然后重试。可通过每次调用覆盖默认设置, 例如 `CC=clang RUSTFLAGS="-Clink-arg=-fuse-ld=lld" make debug`。 在 Linux 上,如果覆盖率链接行为需要显式使用 GNU `ld.bfd`,请使用 `VLZ_COVERAGE_USE_BFD=1`,具体说明请参考 [CONTRIBUTING.md](CONTRIBUTING.md#running-tests-and-coverage)。 然后运行 `make check` 以通过标准的预提交检查。对于模糊测试 (烟雾测试、仅变更代码测试或扩展测试),请参考 [CONTRIBUTING.md](CONTRIBUTING.md) (模糊测试,NFR-020)。 ## 文档 - **安装与打包:** [INSTALL.md](INSTALL.md) - **配置参考:** [docs/configuration.md](docs/configuration.md) - **需求与架构:** [architecture/PRD.md](architecture/PRD.md) - **执行流程:** [architecture/execution-flow.mmd](architecture/execution-flow.mmd) - **常见问题与故障排除:** [docs/FAQ.md](docs/FAQ.md) - **贡献指南:** [CONTRIBUTING.md](CONTRIBUTING.md) - **AI 代理使用指南:** [AGENTS.md](AGENTS.md) - **安全:** [SECURITY.md](SECURITY.md) - **变更日志:** [CHANGELOG.md](CHANGELOG.md) - **OpenSSF 最佳实践:** [bestpractices.dev 项目入口](https://www.bestpractices.dev/en/projects/12361)
标签:CI集成, CVE查询, GPL许可证, HTTP代理, Linux安全, LLM防护, Makefile构建, OSS安全, Rust, SCA工具, SLSA, 依赖漏洞扫描, 依赖管理, 可视化界面, 快速, 模块化, 离线扫描, 网络安全, 网络流量审计, 请求拦截, 软件供应链, 软件组成分析, 逆向工具, 通知系统, 隐私保护