谷歌开源漏洞扫描器 OSV-Scanner

谷歌开源漏洞扫描器 OSV-Scanner

谷歌本周三宣布推出免费漏洞扫描器OSV-Scanner,为开发人员提供开源项目漏洞信息查询服务,谷歌宣称OSV-Scanner提供当前最大的社区可编辑开源漏洞数据库。

OSV-Scanner官网

https://osv.dev/

谷歌开源漏洞扫描器 OSV-Scanner

OSV-Scanner简介

使用 OSV-Scanner 查找影响项目依赖项的现有漏洞。

OSV-Scanner 为OSV 数据库提供官方支持的前端,将项目的依赖项列表与影响它们的漏洞联系起来。由于 OSV.dev 数据库是开源和分布式的,与闭源咨询数据库和扫描器相比,它有几个好处:

  • 每个咨询都来自一个开放和权威的来源(例如RustSec 咨询数据库
  • 任何人都可以建议改进建议从而产生非常高质量的数据库
  • OSV 格式以机器可读格式明确存储有关受影响版本的信息,该格式精确映射到开发人员的软件包列表

最重要的是导致更少、更可操作的漏洞通知,从而减少解决它们所需的时间。

什么是 OSV?

OSV 包括:

  1. OSV 架构:一种易于使用的数据格式,可精确映射到开源版本控制方案
  2. 参考基础设施(本网站、API 和工具)聚合和索引来自使用 OSV 模式的数据库的漏洞数据。

我们创建了 OSV 来解决使用现有解决方案处理开源软件漏洞的许多缺点。

有关详细信息,请参阅我们的博客文章:

  1. 运行OSV
  2. 宣布针对开源的统一漏洞架构

OSV 适合谁?

OSV 可以被以下两者使用:

  1. 开源消费者:通过查询我们的 API 并使用我们的工具来查找其依赖项中的已知漏洞。
  2. 漏洞数据库生产者:通过以 OSV 格式提供数据库。

为什么要使用新格式来描述漏洞?

我们发现没有现成的标准格式:

  1. 强制执行与实际开源包生态系统中使用的命名和版本控制方案精确匹配的版本规范。例如,很难使用 CPE 等现有机制以自动化方式将 CVE 等漏洞与包管理器中的包名称和版本集相匹配。
  2. 可用于描述任何开源生态系统中的漏洞,同时不需要生态系统相关的逻辑来处理它们。
  3. 易于自动化系统和人类使用。

统一的格式意味着漏洞数据库、开源用户和安全研究人员可以轻松地共享工具并使用所有开源的漏洞。这意味着每个人都可以更全面地了解开源中的漏洞,以及更轻松的自动化带来的更快的检测和修复时间。

谁在使用 OSV 模式?

OSV 模式的优势已导致多个漏洞数据库采用,包括 GitHub 安全公告、PyPA、RustSec 等。可以在 

此处找到完整的数据库列表。

这是开源漏洞架构的存储库,目前由以下人员导出:

这些包括来自以下方面的漏洞:

Android
crates.io
Debian GNU/Linux
GitHub Actions
Go
Hex
Linux kernel
Maven
npm
NuGet
OSS-Fuzz
Packagist
Pub
PyPI
RubyGems

作为开源用户,我如何使用 OSV?

OSV 提供了一个易于使用的 API ,用于查询聚合的漏洞数据库。

目前正在开发命令行工具,以便轻松扫描 SBOM、语言清单和容器映像的漏洞。敬请关注!

如何使用 OSV 作为漏洞数据库维护者?

通过以 OSV 格式提供您的漏洞数据库,开源用户将有一种一致的方式来使用所有开源生态系统中的漏洞。

漏洞数据库还可以从使用 OSV 格式的其他数据库更容易地交换和共享漏洞中受益。

我如何为 OSV 做出贡献或提出问题?

OSV 完全开源!

  1. 基础设施代码可在https://github.com/google/osv获得
  2. OSV 架构规范可在https://github.com/ossf/osv-schema获得

如果您有任何疑问,请随时在任一回购中创建问题!

安装

二进制安装

您可以从我们的发布页面下载适用于 Linux、macOS 和 Windows的SLSA3兼容二进制文件。

从源安装

或者,您可以通过运行以下命令从源安装它:

go install github.com/google/osv-scanner/cmd/osv-scanner@v1

这需要安装 Go 1.18+。

SemVer 遵守

同一主要版本上的所有版本都将保证具有向后兼容的 JSON 输出和 CLI 参数。

用法

OSV-Scanner 会收集项目中使用的依赖项和版本列表,然后通过OSV.dev API将此列表与 OSV 数据库进行匹配。要构建依赖项列表,您可以将 OSV-Scanner 指向您的项目目录,或手动将路径传递到各个清单文件。

扫描目录

遍历目录列表以查找:

  • 锁定文件
  • 物料清单
  • 最新提交哈希的 git 目录

用于构建要与 OSV 漏洞匹配的依赖项列表。

--recursive可以配置为使用/-r标志递归遍历子目录。

搜索 git commit hash 旨在与使用 git 子模块或类似机制的项目一起工作,其中依赖项被检出为真正的 git 存储库。

例子

go run ./cmd/osv-scanner -r /path/to/your/dir

输入 SBOM

支持使用包 URL的SPDXCycloneDX SBOM 。格式是根据输入文件内容自动检测的。

例子

go run ./cmd/osv-scanner --sbom=/path/to/your/sbom.json

输入一个锁文件

使用此lockfile 包支持范围广泛的 lockfiles 。这是当前支持的锁定文件列表:

Cargo.lock
package-lock.json
yarn.lock
pnpm-lock.yaml
composer.lock
Gemfile.lock
go.mod
mix.lock
poetry.lock
pubspec.lock
pom.xml*
requirements.txt*
gradle.lockfile
buildscript-gradle.lockfile

例子

go run ./cmd/osv-scanner --lockfile=/path/to/your/package-lock.json -L /path/to/another/Cargo.lock

扫描基于 Debian 的 docker 镜像包(预览)

该工具将抓取 Debian 映像中已安装软件包的列表并查询它们的漏洞。

目前仅支持基于 Debian 的 docker 镜像扫描。

需要docker安装和工具有调用它的权限。

这目前不扫描 Docker 容器的文件系统,并且有各种其他限制。请关注此问题以获取有关容器扫描的更新!

例子

go run ./cmd/osv-scanner --docker image_name:latest

配置 OSV 扫描器

要配置扫描,请将 osv-scanner.toml 文件放在扫描文件的目录中。要覆盖此 osv-scanner.toml 文件,请将--config=/path/to/config.toml带有路径的标志传递给您要应用的配置。

目前,只有 1 个配置选项:

通过 ID 忽略漏洞

要忽略漏洞,请在IgnoreVulns密钥下输入 ID。(可选)添加到期日期或原因。

例子

[[IgnoredVulns]]
id = "GO-2022-0968"
# ignoreUntil = 2022-11-09 # Optional exception expiry date
reason = "No ssh servers are connected to or hosted in Go lang"

id = "GO-2022-1059"
# ignoreUntil = 2022-11-09 # Optional exception expiry date
reason = "No external http servers are written in Go lang."

JSON输出

默认情况下,osv-scanner 输出一个人类可读的表格。要让 osv-scanner 输出 JSON,请--json在调用 osv-scanner 时传递标志。

输出格式

{
  "results": [
    {
      "packageSource": {
        "path": "/absolute/path/to/go.mod",
        // One of: lockfile, sbom, git, docker
        "type": "lockfile"
      },
      "packages": [
        {
          "Package": {
            "name": "github.com/gogo/protobuf",
            "version": "1.3.1",
            "ecosystem": "Go"
          },
          "vulnerabilities": [
            {
              "id": "GHSA-c3h9-896r-86jm",
              "aliases": [
                "CVE-2021-3121"
              ],
              // ... Full OSV
            },
            {
              "id": "GO-2021-0053",
              "aliases": [
                "CVE-2021-3121",
                "GHSA-c3h9-896r-86jm"
              ],
              // ... Full OSV
            }
          ],
          // Grouping based on aliases, if two vulnerability share the same alias, or alias each other,
          // they are considered the same vulnerability, and is grouped here under the id field.
          "groups": [
            {
              "ids": [
                "GHSA-c3h9-896r-86jm",
                "GO-2021-0053"
              ]
            }
          ]
        }
      ]
    },
    {
      "packageSource": {
        "path": "/absolute/path/to/Cargo.lock",
        "type": "lockfile"
      },
      "packages": [
        {
          "Package": {
            "name": "regex",
            "version": "1.5.1",
            "ecosystem": "crates.io"
          },
          "vulnerabilities": [
            {
              "id": "GHSA-m5pq-gvj9-9vr8",
              "aliases": [
                "CVE-2022-24713"
              ],
              // ... Full OSV
            },
            {
              "id": "RUSTSEC-2022-0013",
              "aliases": [
                "CVE-2022-24713"
              ],
              // ... Full OSV
            }
          ],
          "groups": [
            {
              "ids": [
                "GHSA-m5pq-gvj9-9vr8",
                "RUSTSEC-2022-0013"
              ]
            }
          ]
        }
      ]
    }
  ]
}

漏洞列表

https://osv.dev/list

目前共计可识别39336个漏洞

序号生态系统漏洞数量
1所有生态系统汇总39336
2Alpine3022
3Android505
4crates.io987
5Debian8898
6GitHub Actions6
7Go997
8Hex19
9Linux11154
10Maven2847
11npm2722
12NuGet247
13OSS-Fuzz2604
14Packagist1187
15Pub3
16PyPI3640
    谷歌开源漏洞扫描器 OSV-Scanner

    每一个漏洞的详情可以点进去查看,例如CVE-2021-4034

    谷歌开源漏洞扫描器 OSV-Scanner
    谷歌开源漏洞扫描器 OSV-Scanner
    谷歌开源漏洞扫描器 OSV-Scanner

    项目地址

    github.com/google/osv-scanner

    转载请注明出处及链接

    Leave a Reply

    您的电子邮箱地址不会被公开。 必填项已用 * 标注