🐰

OSSの危険性、OSV-Scanner V2.0.0を使えば安心!?

に公開

うさぎでもわかるOSS脆弱性対策 - OSV-Scanner V2.0.0

はじめに

現代のソフトウェア開発において、オープンソースソフトウェア(OSS)の利用は当たり前となっています。開発効率の向上やコスト削減などの観点から、多くの企業がOSSを積極的に活用しています。RedHatの2021年の調査によると、世界中のITリーダー1,250人のうち、90%が「OSSを利用している」と回答しています。

しかし、OSSの利用拡大に伴い、セキュリティリスクも増大しています。特に近年は、OSSを標的としたサプライチェーン攻撃が急増しており、2021年の調査では前年比650%増加したという報告もあります。

こうした状況の中、Googleは2025年3月にオープンソースの脆弱性スキャナー「OSV-Scanner」の最新版「V2.0.0」をリリースしました。この記事では、OSS利用におけるセキュリティリスクとOSV-Scanner V2.0.0の機能について、うさぎでも理解できるように解説します。

「ぴょん!そろそろセキュリティ対策も本気出さなきゃダメだよね?」

OSSの危険性について

増加するOSS関連のセキュリティインシデント

近年、OSSに関連するセキュリティインシデントが増加しています。2021年に発生したLog4Shell脆弱性は、Javaのロギングライブラリ「Log4j」に存在した深刻な脆弱性で、多くの企業システムに影響を与えました。

また、Anchoreの調査によると、2021年には64%の組織がソフトウェアサプライチェーン攻撃の影響を受けたと報告されています。

サプライチェーン攻撃の現状と実例

サプライチェーン攻撃とは、製品やサービスの供給チェーン(サプライチェーン)の弱点を悪用して、最終的なターゲットを攻撃する手法です。ソフトウェアにおいては、依存関係にあるOSSの脆弱性を悪用することで、多くのシステムに一度に攻撃を仕掛けることができます。

実例として、2017年に米国FDAが調査した心臓ペースメーカの遠隔モニタリングシステムの事例があります。この事例では脆弱性が発見され、攻撃者が不正なコマンドを実行してペースメーカの機能を妨害する恐れがありました。幸い、製造販売業者が予防的な対策を取ったため、実際の健康被害は発生しませんでしたが、医療機器のようなクリティカルなシステムでもOSSの脆弱性によるリスクが存在することが示されました。

OSSを利用する上での一般的なリスク

OSSを利用する上での一般的なリスクには以下のようなものがあります:

  1. 依存関係の複雑化: 一つのプロジェクトで数百から千を超えるOSSコンポーネントが使用されることもあり、すべての依存関係を把握することが困難になっています。

  2. 更新・管理の不備: OSSの更新管理が適切に行われないと、既知の脆弱性を持つバージョンが長期間使用され続ける可能性があります。

  3. タイポスクワッティング: 有名なパッケージ名に似た悪意のあるパッケージを公開し、開発者が誤って使用してしまうことを狙った攻撃です。

  4. 悪意のあるコード挿入: メンテナンスされていないOSSに対して、攻撃者が悪意のあるコードを挿入することがあります。

OSSサプライチェーンのリスク図

「ぴょん!依存関係が複雑すぎて何使ってるか把握できてないかも...」

OSV-Scanner V2.0.0の紹介

OSV-Scannerの基本概要と目的

OSV-Scanner(Open Source Vulnerability Scanner)は、Googleが開発したオープンソースの脆弱性スキャナーです。プロジェクトの依存関係をスキャンし、オープンソース脆弱性データベース「OSV.dev」に登録されている既知の脆弱性と照合することで、利用しているOSSの脆弱性を特定します。

OSV-Scannerの主な目的は、開発者がプロジェクトで使用しているOSSの脆弱性を簡単に発見し、対処できるようにすることです。オープンなデータベースを活用することで、精度の高い脆弱性情報を提供し、誤検知を減らすことを目指しています。

OSV-Scanner V2.0.0の新機能と改善点

2025年3月17日にリリースされたOSV-Scanner V2.0.0では、多くの新機能と改善点が追加されました。主な機能強化には以下のようなものがあります:

  1. OSV-SCALIBRの統合: 2025年1月にオープンソース化された「OSV-SCALIBR」(ソフトウェア構成分析支援ライブラリ)の機能を統合し、依存関係抽出能力を強化しました。

  2. コンテナスキャン機能の強化: コンテナイメージのレイヤーレベルでの解析や脆弱性の特定が可能になりました。Debian、Ubuntu、Alpineなどの主要Linuxディストリビューションに対応しています。

  3. インタラクティブなHTMLレポート: 欠陥アドバイザリ、重大度の内訳、パッケージ、ID、脆弱性の重要度などの情報をフィルタリングできるインタラクティブなHTMLレポートを生成できるようになりました。

  4. Mavenのガイド付き修復サポート: JavaのMavenプロジェクトにおいて、pom.xmlファイルの依存関係を最新バージョンに更新するためのガイド付き修復機能が追加されました。

  5. 多言語サポートの拡張: Go、Java、Node.js、Pythonなど11以上の言語エコシステムと19以上のロックファイルタイプをサポートし、依存関係の抽出と脆弱性チェックが可能になりました。

OSV-SCALIBR機能の統合について

OSV-SCALIBR(Software Composition Analysis LIBRary)は、ソフトウェアのインベントリ情報を抽出する拡張可能なファイルシステムスキャナーです。OSV-Scanner V2.0.0では、このOSV-SCALIBRの機能を統合することで、幅広いフォーマットとエコシステムをサポートする、より包括的な脆弱性スキャナーへと進化しました。

具体的には、以下のような機能が強化されました:

  • エコシステムサポートの拡張
  • コンテナイメージ内の全ファイルのアカウンティングのサポート
  • 到達可能性分析の統合
  • Vulnerability Exchange (VEX) のサポート

OSV-Scanner V2.0.0の動作概要図

「ぴょん!まさか私のイメージにも脆弱性があったりして...ドキドキ」

OSV-Scanner V2.0.0の使い方

インストール方法

OSV-Scanner V2.0.0は、様々な方法でインストールできます。ここでは代表的なインストール方法をいくつか紹介します。

Homebrew (macOS/Linux)

brew install osv-scanner

Scoop (Windows)

scoop install osv-scanner

WinGet (Windows)

winget install Google.OSVScanner

Go言語からのインストール

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

直接ダウンロード

GitHub Releases ページから、お使いのOS向けのバイナリを直接ダウンロードすることもできます。

基本的な使用方法

OSV-Scanner V2.0.0の基本的な使用方法は以下の通りです。

ソースディレクトリのスキャン

プロジェクトのソースディレクトリを再帰的にスキャンし、サポートされているパッケージファイル(package.json、go.mod、pom.xmlなど)を検出して脆弱性をチェックします。

osv-scanner scan source -r /path/to/your/dir

特定のロックファイルのスキャン

osv-scanner scan lockfile /path/to/package-lock.json

コンテナイメージのスキャン

コンテナイメージをスキャンして、ベースイメージや含まれるパッケージの脆弱性を特定します。

osv-scanner scan image my-image-name:tag

各種スキャン機能の使い方

ライセンススキャン

deps.devのデータを使用して、依存関係のライセンスをチェックします。

# 単純なライセンスリスト
osv-scanner --licenses path/to/repository

# 許可されたライセンスリストとのチェック
osv-scanner --licenses="MIT,Apache-2.0" path/to/directory

オフラインモード

ネットワーク接続なしでプロジェクトをスキャンするためのオフラインモードも提供されています。

# オフラインデータベースのダウンロード
osv-scanner --offline --download-offline-databases ./path/to/your/dir

# オフラインスキャンの実行
osv-scanner --offline scan source -r ./path/to/your/dir

ガイド付き修復(実験的機能)

脆弱性が見つかった場合に、パッケージのバージョンアップグレードの提案を受けることができます。

# npmの場合
osv-scanner fix \
    --max-depth=3 \
    --min-severity=5 \
    --ignore-dev  \
    --strategy=in-place \
    -L path/to/package-lock.json

# インタラクティブモード
osv-scanner fix \
    -M path/to/package.json \
    -L path/to/package-lock.json

実際の使用例とサンプルコード

実際のプロジェクトでOSV-Scanner V2.0.0を使用する例を示します。

Node.jsプロジェクトのスキャン例

以下のようなNode.jsプロジェクトがあるとします:

my-nodejs-project/
├── package.json
├── package-lock.json
└── src/
    └── index.js

このプロジェクトをスキャンするには、以下のコマンドを実行します:

cd my-nodejs-project
osv-scanner scan source -r .

スキャン結果は以下のように表示されます:

Scanning file(s) from the file system...

Scanned file(s) via [path/to/my-nodejs-project]

Found 3 vulnerabilities in 2 packages
┌────────────────────┬──────────────┬───────────────────┬──────────────────────────────────────────────────────────┐
│ Package            │ Version      │ ID                │ Fixed version                                            │
├────────────────────┼──────────────┼───────────────────┼──────────────────────────────────────────────────────────┤
│ express            │ 4.16.0       │ GHSA-29mw-wpgm-hmr9 │ 4.16.1+                                               │
│                    │              │ CVE-2022-24999    │                                                          │
├────────────────────┼──────────────┼───────────────────┼──────────────────────────────────────────────────────────┤
│ lodash             │ 4.17.15      │ GHSA-p6mc-m468-83gw │ 4.17.21+                                              │
└────────────────────┴──────────────┴───────────────────┴──────────────────────────────────────────────────────────┘

コンテナイメージのスキャン例

コンテナイメージをスキャンする例:

osv-scanner scan image node:16-alpine

スキャン結果は、コンテナの各レイヤーと含まれるパッケージの脆弱性を表示します。

「ぴょん!こんなに簡単にスキャンできるなんて、うさぎでも使えそう!」

OSV-Scanner V2.0.0のメリット・デメリット

他のセキュリティツールとの比較

OSV-Scanner V2.0.0と、同様の機能を持つ他のセキュリティツール(Grype、Trivyなど)を比較してみましょう。

ツール名 強み 弱み
OSV-Scanner ・オープンなデータベース(OSV.dev)を使用
・多言語サポート
・コンテナイメージのレイヤーレベル分析
・ガイド付き修復機能
・比較的新しいツールのため機能が発展途上
・一部の実験的機能は安定性に欠ける
Grype ・Syftとのシームレスな連携
・SBOMファイルの出力と活用
・豊富なデータソース
・OSV-Scannerと比較して言語サポートが少ない
・GUIがない
Trivy ・高速なスキャン
・コンテナイメージ、ファイルシステム、GitHubリポジトリなど様々なターゲットをサポート
・CI/CDとの統合が容易
・詳細な修復ガイダンスが少ない

OSV-Scanner V2.0.0の強み

OSV-Scanner V2.0.0の主な強みは以下の通りです:

  1. オープンなデータベース: オープンソースの脆弱性データベース(OSV.dev)を利用しているため、透明性が高く、コミュニティからのフィードバックにより品質が向上しています。

  2. 多言語サポート: Go、Java、Node.js、Pythonなど、11以上の言語エコシステムと19以上のロックファイルタイプをサポートしています。

  3. コンテナスキャン機能: コンテナイメージのレイヤーレベルでの分析が可能で、どのレイヤーで脆弱性が導入されたかを特定できます。

  4. ガイド付き修復: 脆弱性が見つかった場合に、パッケージのバージョンアップグレードの提案を受けることができ、修復作業を効率化できます。

  5. HTMLレポート: インタラクティブなHTMLレポートにより、脆弱性情報を視覚的に確認し、フィルタリングすることができます。

OSV-Scanner V2.0.0の弱み

一方で、OSV-Scanner V2.0.0にはいくつかの弱点も存在します:

  1. 比較的新しいツール: 2023年に初版がリリースされたばかりの比較的新しいツールであるため、機能や安定性が発展途上の部分があります。

  2. 実験的機能の安定性: ガイド付き修復などの一部の機能は実験的なものであり、完全な安定性は保証されていません。

  3. データベースの範囲: OSV.devデータベースは広範囲をカバーしていますが、すべての脆弱性が網羅されているわけではありません。

  4. パフォーマンス: 大規模なプロジェクトやコンテナイメージをスキャンする場合、他のツールと比較して処理時間が長くなる場合があります。

「ぴょん!どのツールも一長一短あるね。プロジェクトに合わせて選ぶのが大事かも!」

まとめ

OSSの危険性を理解することの重要性

現代のソフトウェア開発において、OSSの利用は不可欠となっています。しかし、その便利さの裏には、サプライチェーン攻撃などのセキュリティリスクが潜んでいることを理解し、適切な対策を講じることが重要です。

OSV-Scanner V2.0.0によるセキュリティ対策の有効性

OSV-Scanner V2.0.0は、オープンなデータベースを活用した脆弱性スキャナーとして、多言語サポート、コンテナスキャン機能、ガイド付き修復など、多くの有用な機能を提供しています。

これらの機能を活用することで、プロジェクトで使用しているOSSの脆弱性を早期に発見し、対処することが可能になります。特に、コンテナ技術やマイクロサービスアーキテクチャが普及する現代において、OSV-Scanner V2.0.0のようなツールを導入することは、セキュリティ対策の強化に大きく貢献するでしょう。

今後の展望

OSV-Scannerは今後も機能の拡張が期待されています。特に実験的機能の安定化や、より多くの言語・フレームワークのサポート、CI/CDパイプラインとの統合強化などが進むことで、より使いやすく効果的なツールになっていくでしょう。

また、オープンソースコミュニティの協力により、OSV.devデータベースの質と量も向上していくことが期待されます。

自社のプロジェクトやサービスのセキュリティを強化するためには、OSV-Scanner V2.0.0のようなツールを積極的に活用し、OSSの脆弱性リスクに対する継続的な監視と対策を行うことが重要です。

「ぴょん!OSSの脆弱性対策、OSV-Scannerでホップ・ステップ・ジャンプだね!」

Discussion