Google の新しい依存関係マッピング ツールを使用して、プロジェクトに潜むセキュリティ上の欠陥を見つける方法

Table of Contents

Google の新しい依存関係マッピング ツールを使用して、プロジェクトに潜むセキュリティ上の欠陥を見つける方法

Google は、何百万ものオープンソース ソフトウェア ライブラリのすべての依存関係をマッピングし、パッチが適用されていない脆弱性があればフラグを立てるオンライン ツールを構築しました。

これは、プログラミングプロジェクトで使用されているライブラリの内容を正確に把握するのに役立ちます。特に重要なのは、それらのライブラリに未修正のセキュリティバグが含まれているかどうかを確認することです。これにより、別のパッケージセットを選択したり、セキュリティホールの修正に協力したりすることで、アプリケーションが悪用されるリスクを回避することができます。

最近では、ライブラリをプロジェクトに組み込むと、そのライブラリの依存関係やサブ依存関係も数十個も取り込むことになります。そして、これらのコンポーネントのいずれかにセキュリティホールが含まれている可能性があり、実際にセキュリティホールが存在するため、親プログラムが攻撃に対して脆弱になる可能性があります。

これらの依存関係は壊れたり消えたりする可能性があり、コードのビルド、デプロイ、または期待どおりのビルドができなくなる可能性があります。プログラムは古いライブラリをインポートして最新の状態を維持できず、バグ修正、セキュリティパッチ、新機能の適用を逃してしまう可能性があります。

開発者がプロ​​ジェクトにライブラリを追加する際、自分が何に取り組んでいるのか、あるいはその裏にどんな問題が潜んでいるのかをほとんど理解していないと言っても過言ではありません。ソフトウェアエンジニアリングのこの脆弱な状態は、フリーソフトウェアだけでなく商用アプリケーションにも影響を及ぼしており、Google社員の間でもこの問題への批判が高まっています。

目標

そこで、本日発表され、deps.dev で公開されている、ウェブ界の巨人による実験的な依存関係調査ツール「Open Source Insights」に注目したいと思います。パッケージを検索し、その内容を表やグラフで閲覧できるほか、依存関係に存在する既知のセキュリティホールがあれば、その旨がフラグ付けされます。

このサービスは現在、npm内の163万個のJavaScriptライブラリ、62万4000個のGoモジュール、40万4000個のJavaコードのMavenアーティファクト、そして6万2000個のRust Cargoクレートをインデックス化し、スキャンし、監視しているとのことです。今後、PyPiとNuGetのパッケージも追加される予定です。利用は無料です。

「Open Source Insightsはオープンソースソフトウェアエコシステム内の何百万ものプロジェクトを継続的にスキャンし、ライセンス、所有権、セキュリティ問題、ダウンロード数、人気シグナル、OpenSSFスコアカードなどのメタデータを含むパッケージに関する情報を収集しています」とプロジェクトのAndrew Gerrand、Michael Goddard、Rob Pike、Nicky Ringlandは発表の中で述べている。

「そして、依存関係や依存関係の依存関係などを推移的に追跡する完全な依存関係グラフを構築し、メタデータを組み込んで公開します。これにより、ソフトウェアにどのような影響があるかを確認できます。また、提供される情報は継続的に更新されます。」

それはどれくらいうまく機能しますか?

この謙虚なハゲタカは、ライブラリを使ってサービスを試してみることにし、 と呼ばれる便利な Rust クレートを思いつきましたtui

このソフトウェアは、ターミナル内で見栄えの良いテキストベースのユーザーインターフェースを作成するために使用できます。GitHubでは5,100以上のスターが付けられ、多数の貢献者がおり、ターミナルベースのSpotifyクライアントを含む様々なアプリの構築に使用されています。

deps.devの検索バーに入りtui、Cargoクレートを選択すると、ライブラリのダッシュボードが表示されます。依存関係タブをクリックすると、検索可能なコンポーネントの表が表示され、右側のグラフボタンをクリックすると、tuiのライブラリの視覚化が表示されます。

Google の deps.dev サービスによって生成された tui の依存関係のグラフ

deps.dev によって生成された、tui 内の依存関係の壊れたクモの巣 ... クリックして拡大

グラフビューでは、スクロールして拡大・縮小したり、クリック&ドラッグでポイントを移動したりできます。 で始まる各クレートにはtui、依存関係を示す矢印の付いた線が引かれています。例えば、そのオペレーティングシステム上でWindows API呼び出しを処理するクレートへの依存関係の連鎖や、 に至るすべてのパスを確認できますlibc

さらに重要なのは、Rust プロジェクトとしては予想外のことですが、Google のサービスによれば、最新バージョンのtui0.15.0 にはいくつかのセキュリティ ホールがあることが示されています。

tui の依存関係におけるセキュリティ脆弱性のスクリーンショット

うわあ…Googleのサービスでセキュリティ問題が報告されました

しかし、これらが の依存関係にあることは明らかでありtui、アプリケーションでインターフェース ライブラリを使用するプログラマーは、埋もれたバグに気付かない可能性があります。

tuiこれらの脆弱性の一つは、の依存関係にあるRUSTSEC-2019-0005ですpancurses。このライブラリは、tuiLinuxでもWindowsでも、テキストベースのユーザーインターフェースを表示するために必要な文字列を端末に送信するバックエンドの一つです。

このバグは、「スタックメモリに任意のデータを簡単に書き込むことを可能にするフォーマット文字列攻撃」によって悪用される可能性があります。これは、最新バージョンである 0.16.1 に存在し、最新リリースでpancurses使用されているものです。tui

  • オープンソースの脆弱性にどう対処すべきか?Linux Foundationの専門家が語る「迅速に行動すべき」
  • Pythonのpip検索が機能しない理由:進行中のトラフィック過負荷についてインフラディレクターに聞く
  • Rust 2021版は「より一貫性のあるパニック」などの新機能を搭載して10月に登場予定
  • マイクロソフトはLinuxカーネルのeBPFスーパーツールを採用し、Windows向けに拡張

tuiこれは、前述のセキュリティ監視を利用して、特別に細工されたファイル名、ファイルの内容、ネットワークからの情報などの一連のデータを与えることで、 with を使用するアプリケーションを乗っ取ることが可能でpancursesある可能性があることを示唆しています。

もう一つの脆弱性はRUSTSEC-2019-0006で、これはCライブラリncursesを薄くラップするクレートに存在しますncurses。このバグは、ラッパークレートの最新バージョンである5.101.0と、で使用されているバージョンであるpancurses5.91.0に存在します。バッファオーバーフロー攻撃やフォーマット文字列攻撃によって悪用される可能性があり、上記の欠陥と同様に、悪意を持って作成された入力データを使用してアプリケーションを乗っ取るために使用される可能性があります。

ご興味のある方は、この2つのバグについて、概念実証のクラッシュエクスプロイトとともに詳細に解説しています。実際のアプリケーションで実際に悪用できるわけではありませんが、GoogleのOpen Source Insightsを活用して、プロジェクトの依存関係グラフに潜む潜在的なセキュリティ上の欠陥を発見する方法を示す例として役立ちます。

他にも依存性脆弱性スキャナーは存在します。GitHubが思い浮かびます。OWASPも提供しています。Snykもそうです。ぜひコメント欄でおすすめを共有してください。®

Discover More