コンテンツに移動
デベロッパー

Open Source Insights データセットを使用し、依存関係のセキュリティとコンプライアンスを分析する

2022年11月30日
Google Cloud Japan Team

※この投稿は米国時間 2022 年 11 月 19 日に、Google Cloud blog に投稿されたものの抄訳です。

最近の Log4j 問題などのセキュリティ イベントにより、セキュリティ チームは社内で開発者が作成したコードだけでなく、コードが依存するオープンソース パッケージと、そのオープンソース パッケージが依存するコードなどについても、注意を怠らず評価する必要があることが浮き彫りになりました。この複雑に絡まり合った依存関係により依存関係グラフが形成され、グラフ内の各ノードでセキュリティ上の脆弱性や、その他の不測の事態が発生する可能性があります。こうした依存関係をすべて確認するのは、セキュリティ チームにとって非常に複雑な作業です。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2022-10-28_at_12.18.20_PM.max-1800x1800.png
Tensorflow 2.10 の依存関係グラフを可視化した画像

セキュリティ チームは一般に、脆弱性の依存関係を評価するための 2 つの一般的な方法のいずれかを使用しています。1 つ目の方法では、アプリケーション開発プロセスの最初に、それぞれの依存関係とそのセキュリティ対策をすべて調べます。プロジェクトの進行中は、各依存関係のセキュリティ対策の変化を継続的に監視し分析する必要があります。この方法の欠点は、セキュリティ チームにとって各依存関係を継続的にチェックするのが非常に単調で難しいことです。そのため多くのセキュリティ チームは、2 つ目の方法、つまりセキュリティ対策を評価する商用ソフトウェアを使用する方法を選択します。残念ながらこのアプローチでは、依存関係の評価をチームのワークフローに統合する方法をセキュリティ チームが十分に管理できません。

しかし現在、セキュリティ チームには、依存関係のセキュリティ対策を確認するための新しい選択肢があります。Google は最近、Open Source Insights データセットを発表しました。開発者はこのデータセットを使って、使用するソフトウェアの構造とセキュリティをより深く理解できます。また、オープンソース ソフトウェアの開発者、メンテナンス担当者、消費者が重要なソフトウェア サプライチェーン情報にアクセスすることも可能です。Open Source Insights プロジェクトは、npm、Go、Maven、PyPI、Cargo エコシステムの数百万ものオープンソース パッケージをスキャンし、依存関係グラフを計算します。そして、セキュリティ勧告、ライセンス情報、注目度の高い指標、その他のメタデータを使用して、グラフにアノテーション付けを行います。Google チームは、特に Open Source VulnerabilitiesOpenSSF Scorecard の情報を利用して、データセットを定期的に更新する取り組みを続けています。これにより、データの最新の状態と関連性を保つとともに、経時的な変更のスナップショット ビューを提供することができます。

では実際に、セキュリティ チームがこのデータセットを使用する方法をいくつかご紹介します。

Open Source Insights データセットを使用する

Open Source Insights データセットは、Google Cloud 一般公開データセット プログラムの一部として利用可能で、BigQuery の SQL または deps.dev のインタラクティブ UI を使用して確認できます。この UI は、依存関係グラフを可視化する際に特に有用です。また、BigQuery のオプションにより、データ分析のための複雑なカスタムクエリを作成できます。この投稿では、BigQuery でのデータへのアクセスと分析に焦点を当て、併せて採用、調整できるクエリの例をご紹介します。

エコシステム全体を調査する場合

Open Source Insights データセットは、エコシステム全体でパッケージを調査するために使用できます。Log4Shell を例にとると、勧告の時点で、Maven Central リポジトリの 8% を超える 35,000 以上の Java パッケージが Log4j の脆弱性の影響を受けたことが判明しています。Log4j を使用したすべてのパッケージの調査を今すぐ行う場合は、Open Source Insights データセットを使用してクエリを実行できます(下に例を示します)。このクエリのサイズが 4 TB 以上であることは、実際このデータセットが非常に複雑で、データセット作成のためにバックエンドでは膨大な作業が行われていることを示しています。依存関係テーブルが 4 TB あるのは、npm、maven central、PyPI、Cargo、Go の各パッケージの依存関係ごとに 1 行ずつ含まれているためです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen_Shot_2022-11-01_at_2.41.41_PM.max-1700x1700.png
2022 年 11 月 1 日のスナップショットの時点で Log4j パッケージに依存している Java パッケージ

脆弱性と、コードが使用するライセンスを探す場合

エコシステム全体の次は、コードベースに焦点を当てましょう。チームが npm を使用して JavaScript アプリケーションを構築しているとすると、依存関係を監査するには、それぞれの依存関係がコンプライアンスを遵守していて、脆弱性を含んでいないことを確認する必要があります。それには、たとえばロックファイルの一時的な依存関係をすべて抽出し、deps.dev データセットに対してクエリを実行して、それぞれのライセンスを確認します。それから、依存関係の深いところに潜んでいる可能性のある脆弱性を探します。この確認プロセスを手作業で行った場合、数日かかる可能性がありますが、自動化することにより、これよりはるかに短い期間で完了できます。

たとえば以下のクエリは、REACT、REACT DOMS、REACT IS、REACT Router、QS、SEND のパッケージの正しいライセンスをフェッチします。

読み込んでいます...

また同様に、このクエリは REACT、REACT DOMS、REACT IS、REACT Router、QS、SEND パッケージ内の脆弱性を見つけ出します。このクエリの情報を使用することでセキュリティ チームは、特に重大な脆弱性に最初に取り組むことができます。

読み込んでいます...

CI / CD パイプラインにクエリを統合する

アドホック分析のためにクエリを実行することに加え、BigQuery APICLI を使用して、これらのクエリの分析とインサイトを CI / CD パイプラインで運用化することも可能です。

次のステップ

Open Source Insights データセットを使用してコードベースの依存関係のセキュリティ対策を把握し分析する方法は数多く存在し、ここで紹介したのはほんの一例にすぎません。

Open Source Insights データセットの使用は、deps.dev のビジュアル UI で開始できます。たとえば、こちらのグラフは、昨年後半の Apache Pulsar のバージョンが log4j-core にどのように依存していたかを正確に表しています。また、BigQuery サンドボックスを作成したり、SQL クエリを BigQuery データセットに対して実行したりして、データセットの使用を開始することもできます。BigQuery サンドボックスを使用する場合、無料枠の制限内で、データに対してクエリを実行できます(クレジット カードは不要です)。課金を有効にして無料枠の基準を超えて使用した場合は、BigQuery の料金が適用されます。

Open Source Insights データセットの詳細については、Marketplace リスティングdocs.deps.dev の詳細なドキュメントをご確認ください。

プロダクト マネージャー Nicky Ringland
ソフトウェア エンジニア James Wetter

投稿先