devinshawntripp/rust-scanner

GitHub: devinshawntripp/rust-scanner

基于 Rust 的高性能容器镜像漏洞扫描器,通过源包名称正确映射和实时 API 查询实现比 Trivy、Grype 更高的检测准确率。

Stars: 0 | Forks: 0

# ScanRook CLI [![GitHub release](https://img.shields.io/github/v/release/devinshawntripp/rust-scanner)](https://github.com/devinshawntripp/rust-scanner/releases) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4dcc4ca2f1200231.svg)](https://github.com/devinshawntripp/rust-scanner/actions/workflows/ci.yml) [![License](https://img.shields.io/badge/license-Source--Available-blue)](LICENSE-SCANROOK-SOURCE-AVAILABLE.md) 本地优先的容器镜像扫描器,支持可选的云增强。 优先进行本地扫描。仅在需要更深入的上下文和组织工作流时添加云增强。 ## 快速开始(60 秒内) ``` curl -fsSL https://scanrook.sh/install | bash scanrook scan --file ./image.tar --format text scanrook scan --file ./image.tar --format json --out report.json ``` 可选的云认证: ``` scanrook auth login --base https://scanrook.io scanrook limits ``` ## 为什么选择 ScanRook - 默认本地优先:扫描运行无需强制云认证。 - 已安装状态优先方法:优先考虑包清单证据。 - 云增强是附加性的:提供更好的上下文而不阻塞本地扫描。 - 友好的免费增值模式:即使达到增强速率限制,本地扫描依然可用。 ## 终端演示 ``` scanrook scan --file ./image.tar --mode deep --format json --out report.json ``` 演示 GIF 将在 Beta 版内容推出期间添加到 `docs/assets/scanrook-demo.gif`。 ## 对比(宏观) | 功能 | ScanRook | Trivy | Grype | Syft | Snyk Container | Docker Scout | |---|---|---|---|---|---|---| | 本地优先 CLI 工作流 | 是 | 是 | 是 | 是(侧重 SBOM) | 部分 | 部分 | | 可选云增强 | 是 | 部分 | 部分 | 否 | 是 | 是 | | 已安装状态优先定位 | 是 | 部分 | 部分 | 否 | 部分 | 部分 | | 组织工作流(历史、团队、策略) | 是(平台) | 部分 | 否 | 否 | 是 | 是 | 注意: - 此表属于定位级别,严格的功能对等声明应由基准测试支持。 - 基准测试报告计划在发布内容轨道中推出。 ## 基准测试结果 环境:macOS (darwin/arm64), `scanrook 1.6.2`, `trivy 0.69.1`, `grype 0.109.0` ### 完整矩阵(warm-cache) | Image | Size | ScanRook | Trivy | Grype | |---|---:|---:|---:|---:| | **alpine:3.20** | 8.7 MB | **0.04s / 7** | 0.1s / 0 | 1.3s / 4 | | **debian:12** | 137 MB | **1.4s / 196** | 0.2s / 92 | 1.2s / 86 | | **ubuntu:24.04** | 98 MB | **1.3s / 174** | 0.1s / 13 | 1.0s / 26 | | **rockylinux:9** | 189 MB | **1.9s / 481** | 0.2s / 176 | 1.8s / 539 | | **nginx:1.27** | 192 MB | **2.0s / 506** | 29.8s / 253 | 1.9s / 248 | | **postgres:17** | 453 MB | **1.6s / 259** | 1.2s / 167 | 2.6s / 164 | | **redis:7-alpine** | 41 MB | **1.3s / 5** | 0.4s / 80 | 1.4s / 88 | | **golang:1.23** | 1.1 GB | **2.3s / 2194** | 0.6s / 1028 | 5.1s / 1163 | | **node:20** | 1.1 GB | **4.9s / 3868** | 1.0s / 2220 | 7.3s / 1463 | | **python:3.12** | 1.0 GB | **3.2s / 3911** | 1.1s / 2246 | 5.3s / 1501 | ScanRook 在 10 个镜像中的 9 个上发现了**比 Trivy 和 Grype 更多的漏洞**,并在 10 个镜像中的 7 个上**在速度上击败了 Grype**。 ### 为什么 ScanRook 发现更多 - **源包映射**:OSV 按源名称索引(例如 `glibc` 而非 `libc6`)。ScanRook 解析 dpkg `Source:` 和 APK `o:` 字段以正确查询。Trivy 和 Grype 在其本地数据库中有类似的映射,但 ScanRook 使用正确名称进行的实时 OSV 查询通常会显示更多结果。 - **Alpine**:正确的生态系统名称(`Alpine`,而非 `Alpine Linux`)+ 源包名称。ScanRook 发现 7 个 CVE;Trivy 发现 0 个。 - **Debian/Ubuntu**:通过 dpkg 状态解析源包。Debian 发现 196 个 vs Grype 的 86 个。Ubuntu 174 个 vs Grype 的 26 个。 - **RHEL/Rocky**:三源增强(OSV + OVAL + Red Hat 安全数据)。显示出 Trivy 完全遗漏的未修复 CVE。 - **大型镜像**:Node/Python/Golang 拥有数千个 Debian 软件包。源名称映射使 ScanRook 的发现数量比 Grype 多 2-3 倍。 ### 性能 (v1.6.2) - Alpine warm-cache 扫描:**0.04s**(比 Trivy 快 3 倍,比 Grype 快 33 倍) - Node.js warm-cache:**4.9s**(比 Grype 的 7.3s 快 1.5 倍) - 发行版数据源缓存已修复:Alpine SecDB/Debian tracker 得到正确缓存(**8.1s → 14ms**) - OVAL 二进制缓存:跳过 50MB XML 重新解析(**953ms → 74ms**) - Rocky 9 总计:自 v1.5.3 起 **15.2s → 1.9s**(快 8 倍) ### 复现 ``` scanrook benchmark \ --file ./image.tar \ --out-dir ./benchmark-out \ --profile warm ``` 完整报告:[`docs/benchmarks/reports/`](docs/benchmarks/reports/) ### 透明度 所有基准测试均在同一台机器上使用相同的镜像运行——没有特定于扫描器的硬件或缓存优势。ScanRook 仅使用其标准的 SHA256 键控文件缓存;没有特定于基准测试的预加载或硬编码。冷扫描时间较长,因为 ScanRook 查询实时 API,而 Trivy 和 Grype 使用预编译的本地数据库。完整的方法论和透明度详情请访问 [scanrook.io/docs/benchmarks](https://scanrook.io/docs/benchmarks)。 ## 命令 ``` scanrook scan --file ./image.tar --format json --out report.json scanrook scan --file ./image.tar --mode deep --progress --log-format text --log-level info scanrook scan --file ./image.tar --mode deep --progress --log-format json --log-level debug scanrook benchmark --file ./image.tar --out-dir ./benchmark-out --profile warm scanrook diff --ours ./scanrook.json --against ./trivy.json --out ./diff.json scanrook db sources scanrook db status scanrook db check scanrook db update --source all scanrook db update --source nvd --cve CVE-2021-25219 scanrook db update --source redhat --cve CVE-2021-25219 --errata RHSA-2022:8162 scanrook db clear scanrook db download --file ./image.tar --mode deep scanrook db warm --file ./image.tar --mode deep scanrook auth login --api-key scanrook auth logout scanrook whoami scanrook limits scanrook config set telemetry.opt_in true ``` 兼容性说明:`scanner` 仍作为临时别名保留,并会打印弃用警告。 ## 数据源 活跃的漏洞和增强来源: - OSV API (`osv`) — 包括 npm, PyPI, Go, Maven, crates.io 在内的 10 多个生态系统 - NVD CVE API (`nvd`) — CVSS 评分和 CPE 匹配 - Red Hat Security Data API (`redhat`) — RHEL 特定的修复信息 - Red Hat OVAL XML (`redhat_oval`) — 用户提供的可选 OVAL 数据 - EPSS (`epss`) — 来自 FIRST.org 的漏洞利用预测评分 - CISA KEV (`kev`) — 已知被利用漏洞目录 - Alpine SecDB — Alpine Linux 安全公告 - Ubuntu CVE Tracker, Debian Security Tracker 支持的容器生态系统:Ubuntu, Debian, Alpine, RHEL, CentOS, Fedora, Rocky Linux, AlmaLinux, Amazon Linux, Oracle Linux, Chainguard, Wolfi ## 日志 进度事件是阶段驱动且机器可读的(`stage`, `detail`, `ts`),适用于 worker/UI 摄取。 - `--progress` 启用 stderr 日志输出。 - `--log-format text|json` 控制 stderr 样式。 - `--log-level error|warn|info|debug` 控制 stderr 详细程度。 - `--progress-file` 始终写入 NDJSON 事件行以供工作流使用。 ## 发布构件 每个版本应包含: - `scanrook--linux-amd64.tar.gz` - `scanrook--linux-arm64.tar.gz` - `scanrook--darwin-amd64.tar.gz` - `scanrook--darwin-arm64.tar.gz` - `scanrook--checksums.txt` 安装脚本期望 GitHub 发布资产采用这种确切格式。 ## CI/CD 示例 (GitHub Actions) Marketplace 风格的 action(此仓库): ``` - name: Scan artifact uses: devinshawntripp/rust-scanner@v1 with: artifact_path: app-image.tar mode: deep format: json out_file: scanrook-report.json api_key: ${{ secrets.SCANROOK_API_KEY }} ``` 完整指南:`docs/guides/github-actions.md` ``` name: scanrook on: [push, pull_request] jobs: scan: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install ScanRook run: curl -fsSL https://scanrook.sh/install | bash - name: Scan image tar run: scanrook scan --file ./artifact.tar --mode deep --format json --out report.json ``` ## 基准测试和发布文档 - 基准测试方法论 + 可复现性:`docs/benchmarks/README.md` - 包管理器发布运行手册:`docs/distribution/package-managers.md` - 本地对比辅助脚本:`scripts/benchmark-compare.sh` - 公开发布文章:[https://scanrook.io/blog/why-we-built-scanrook](https://scanrook.io/blog/why-we-built-scanrook) ## 云增强限制 - 本地扫描逻辑在无认证情况下继续运行。 - 云增强通过 `/api/cli/enrich` 检查。 - 遇到 `429` 时,CLI 继续本地扫描并返回升级上下文。 ## 分发状态 - GitHub Releases:活跃。 - 安装脚本 (`scanrook.sh/install`):活跃。 - Homebrew tap:计划中。 - crates.io 包:计划中。 ## 平台 - 网站:[scanrook.sh](https://scanrook.sh) - Dashboard/API:[scanrook.io](https://scanrook.io) ## 许可证 当前策略使用临时的源码可用模型。 参见 `LICENSE-SCANROOK-SOURCE-AVAILABLE.md`。
标签:AI应用开发, DevSecOps, Homebrew安装, Rust, SBOM, Trivy替代, URL发现, Web截图, 上游代理, 云安全监控, 占用监测, 可视化界面, 安全合规, 安全检测, 容器安全, 文档安全, 文档结构分析, 本地优先, 活动识别, 硬件无关, 网络代理, 网络流量审计, 资产管理, 通知系统, 通知系统, 镜像扫描, 静态分析, 高风险漏洞