OSV-Scannerを使用して、プロジェクトの依存関係に影響を与える既存の脆弱性を見つけます。
OSV-Scannerは、プロジェクトの依存関係のリストとそれらに影響を与える脆弱性を結び付けるOSVデータベースへの公式にサポートされているフロントエンドを提供します。OSV.dev データベースはオープンソースで分散されているため、クローズドソースのアドバイザリデータベースやスキャナーと比較していくつかの利点があります。
とりわけ、脆弱性通知が少なく、より実用的なものになり、解決に必要な時間が短縮されます。
Linux、macOS、およびWindows用のSLSA3準拠バイナリは、リリースページからダウンロードできます。
または、次のコマンドを実行してソースからインストールすることもできます。
$ go install github.com/google/osv-scanner/cmd/osv-scanner@v1
これには、Go 1.18+がインストールされている必要があります。
同じメジャーバージョンのすべてのリリースには、下位互換性のあるJSON出力とCLI引数があることが保証されます。
OSV-Scanner は、OSV.dev API を介してこのリストを OSV データベースと照合する前に、プロジェクトで使用されている依存関係とバージョンのリストを収集します。依存関係のリストを作成するには、プロジェクト ディレクトリで OSV-Scanner を指定するか、個々のマニフェスト ファイルへのパスを手動で渡します。
ディレクトリのリストを調べて、以下を見つけます。
これは、OSVの脆弱性と照合する依存関係のリストを作成するために使用されます。
/ フラグを使用してサブディレクトリを再帰的にウォークスルーするように構成できます。
--recursive
-r
gitコミットハッシュの検索は、使用するプロジェクトで動作することを目的としています Git サブモジュールまたは依存関係がチェックアウトされる同様のメカニズム 実際のGitリポジトリとして。
$ go run ./cmd/osv-scanner -r /path/to/your/dir
パッケージ URL を使用する SPDX および CycloneDX SBOM がサポートされています。形式は 入力ファイルの内容に基づいて自動検出されます。
$ go run ./cmd/osv-scanner --sbom=/path/to/your/sbom.json
このロックファイルパッケージを利用することで、幅広いロックファイルがサポートされています。サポートされているロックファイルの現在のリストは次のとおりです。
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 イメージにインストールされているパッケージのリストをスクレイピングし、それらに対する脆弱性を照会します。
現在、Debian ベースの Docker イメージスキャンのみがサポートされています。
インストールする必要があり、ツールにそれを呼び出すアクセス許可が必要です。
docker
これは現在、Dockerコンテナのファイルシステムをスキャンしておらず、他にもさまざまな制限があります。コンテナスキャンのアップデートについては、この問題に従ってください!
$ go run ./cmd/osv-scanner --docker image_name:latest
スキャンを構成するには、スキャンしたファイルのディレクトリに osv-scanner.toml ファイルを配置します。この osv-scanner.toml ファイルをオーバーライドするには、代わりに適用する構成へのパスを含むフラグを渡します。
--config=/path/to/config.toml
現在、構成するオプションは 1 つだけです。
脆弱性を無視するには、キーの下に ID を入力します。必要に応じて、有効期限または理由を追加します。
IgnoreVulns
[[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."
デフォルトでは、osv-scannerは人間が読めるテーブルを出力します。代わりに osv-scanner に JSON を出力させるには、osv-scanner を呼び出すときにフラグを渡します。
--json
--json フラグを使用すると、JSON 出力のみが標準出力に出力され、他のすべての出力は標準エラーに送られます。したがって、json出力のみをファイルに保存するには、出力を次のようにリダイレクトできます。
osv-scanner --json ... > /path/to/file.json
{
"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"
]
}
]
}
]
}
]
}