2020年12月08日
WhiteSourceの仕組みを説明します(前編)奥村 和彦 Kazuhiko Okumura
こんにちは。今日は オープンソースコンポーネントの脆弱性とライセンスの管理を行うツール 「WhiteSource」のお話です。 WhiteSourceをご利用されているお客様から 「スキャンしたのに結果が表示されない。」「設定したはずなのにソースコードがスキャンされない。」などのご質問がありました。 原因の多くは 「目的にあったスキャン設定がされていないため。」ではあるものの、これをご理解頂くためには WhiteSourceがどのようなルールで、みなさんのプロジェクトで利用されている オープンソースコンポーネントを特定しているのかを知ることが大事です。
そこで、WhiteSourceを仕組みを理解して正しく効果的に利用するために、2回に分けて WhiteSourceが オープンソースコンポーネントの特定と脆弱性の有無をレポートする仕組みを説明します。
初めに「WhiteSource」について簡単に紹介すると、プロジェクト内のファイル(ソースファイル、実行ファイル、ライブラリファイル)を検索し、利用しているオープンソースコンポーネントを特定することができるツールとなります。
また特定したオープンソースコンポーネントは、以下の2つの情報を付加してユーザーに通知します。
WhiteSourceが特定するオープンソースコンポーネントの定義は次の通りです。
また次のようなコンポーネントはWhiteSourceでは管理対象外となります。
WhiteSourceがファイルをスキャンして、オープンソースコンポーネントを特定し、結果の集計・分析を行う過程は、3つのモジュールが基本となります。
本ブログでは、オープンソースコンポーネントの特定にフォーカスを当てていますので、"脆弱性データベース" と "Unified-Agent" の仕組みについて説明します。
脆弱性データベースでは、発見された脆弱性を識別する CVE について NVDを中心としたアドバイザリーから詳細な情報を収集・登録しています。更にはまだCVE で識別されていない脆弱性や WhiteSourceで独自に識別した脆弱性が管理される場合もあります。オープンソースコンポーネントは、ファイル単位に "SHA-1 チェックサム"、 "メタ情報"、"脆弱性情報" を収集します。これらのファイルは、ベンダー公式のダウンロードサイトやGithubなどの公開リポジトリから取得します。
一般的に「脆弱性データベース」と呼ばれていますが、脆弱性を持たない オープンソースコンポーネントの"SHA-1 チェックサム" / "メタ情報"も管理しています。
WhiteSourceでは、NVD などのアドバイザリーを常時監視しており、CVEの公開や更新が行われると 即座に脆弱性データベースにその脆弱性情報を登録します。また これとは別に オープンソースコンポーネント も前述の公開リポジトリを監視しており、ファイルの追加や更新を検知してSHA-1 チェックサムやメタ情報を取得します。
このようにして登録された 脆弱性情報とオープンソースコンポーネントの関連付けは、WhiteSource独自の機械学習アルゴリズム と WhiteSource社のリサーチチームのレビューによって検証し登録されます。
ちなみに この脆弱性データーベースは GitHub のリポジトリ内の脆弱性検知にも利用されているそうです。
WhiteSourceが みなさんのプロジェクトに含まれる オープンソースコンポーネントをスキャンするときは、通常 Unified-Agentと呼ばれる wss-unified-agent-x.y.z.jar を実行することから始めます。 この Unified-Agent (以下、UA) が行っていることは プロジェクトが利用しているオープンソースコンポーネントを特定するために、プロジェクト配下にあるファイルを順番に検索して、そのファイルから読み取れる "SHA-1 チェックサム" や "ファイル名" などのファイルのメタ情報の収集となります。(オープンソースコンポーネントのメタ情報ではありません。)
UAは収集した情報をユーザーが利用する WhiteSourceサーバーの指定プロジェクトに送信します。その後は WhiteSourceが受信した"SHA-1 チェックサム" を使って 脆弱性データベースの"SHA-1 チェックサム" と突き合わせてオープンソースコンポーネントを特定します。
"SHA-1 チェックサム" のひとつの特徴として、同じファイルであれば常に同じ値が算出できますので、、プロジェクトがダウンロードしたオープンソースコンポーネントと、脆弱性データベースが取得していたオープンソースコンポーネントのファイルと同じであれば、"SHA-1 チェックサム"が一致します。これを基に一致した "SHA-1 チェックサム" をキーに脆弱性データベースに登録されたオープンソースコンポーネントのメタ情報や脆弱性情報を特定していきます。(尚、WhiteSourceの "SHA-1 チェックサム" は、独自の値を付加して計算するため、通常求められる値とは異なります。)
オープンソースコンポーネントを特定する過程で UAがプロジェクトのファイルの内容をスキャンする場合があります。これは次のような場合ですが、オープンソースコンポーネントを特定するための 前処理や後処理として実施されます。ここでスキャンしたコード情報および ソースコードファイルは、WhiteSourceのサーバーを含む外部に送信されることはありません。
このようにWhiteSourceは、オープンソースコンポーネントのファイルの"SHA-1 チェックサム"を 脆弱性データベース と Unified-Agent で計算し、突き合わせることでプロジェクトが利用しているオープンソースコンポーネントを特定しています。
この仕組みの中で、オープンソースコンポーネント および 脆弱性が特定できない場合「脆弱性データベース」と「Unified-Agent」のそれぞれの視点で原因が考えられます。
これは 「オープンソースコンポートネントの当該ファイルがデータベースに登録されていない」ためで、UAで検索したファイルの "SHA-1 チェックサム" とマッチする ファイルが存在しないためです。
ファイルが脆弱性データベースに登録されていない要因としては次のようなケースがあります。
これは「プロジェクト内の当該ファイルの "SHA-1 チェックサム" が計算できなかった」ためです。つまり、当該ファイルが検索できなかったことで起こります。
その理由としては以下のような事象が該当します。
WhiteSourceの脆弱性データベース および Unified-Agent は定期的に 改善されていますが、それでも漏れを0にすることは出来ません。そのため 原因が特定できない場合は WhiteSourceに問い合わせて 調査を依頼することが必要となります。
更にはWhiteSourceの設定を変更して、スキャン対象を見直したり、詳細なスキャン結果を出力することができます。
本情報はブログを公開した時点の情報となります。
ご不明な点やその他製品に関しましては下記よりお問い合わせください。
アトラシアン社ではサポート範囲外となっているサードパーティ製のアドオンをリックソフトのサポートではサポートします。
リックソフトのサポートは開発元が提供するサポート以上の価値があります。
ツールを導入しただけでは成功とはいえません。利用者が効果を感じていただくことが大切です。独自で制作した各種ガイドブックはツール活用を促進します。
リックソフトからライセンス購入を頂いたお客様にはガイドブックを無料進呈いたします。
ツール操作の研修だけでなく「ウォータフォール型開発」「アジャイル型開発」のシミュレーション研修も提供。
日本随一の生産性向上にも効果のある研修サービスです。
リックソフトからライセンス購入を頂いたお客様には無料招待や割引特典がございます。