Skip to main content

アプリケーションレベルの詳細なコンテキストで優先順位付けを最適化

著者

Michael Komraz

2020年7月28日

0 分で読めます

脆弱性の数が絶えず増加していることに加え、脆弱性がもたらすリスクの評価が複雑なため、修正の優先順位付けはますます難しくなっています。脆弱性のリスクは一律ではなく、その差は客観的・主観的なさまざまな要因に左右されます。効果的に優先順位を付けるには、これらの要因を正確に評価することが重要です。

この課題の解決にはCVSSがよく使われますが、固有の制約もあります。CVSS v3では基本スコアが拡張され、時間的・環境的な指標も含められるようになりました。しかし、アプリケーションのコンテキストは依然として考慮されません。CVSSは、アプリケーションと、アプリケーションが呼び出すオープンソースライブラリや関数との間にある、さまざまな固有の依存関係や相互作用を考慮しないのです。

そこで登場するのが、SnykのReachable Vulnerabilitiesです。

「到達可能性」が重要な理由

多くのソリューションはアプリケーションを分析し、取り込まれているオープンソースの依存関係を特定します。そして、その一覧を脆弱性データベースと照合し、脆弱な依存関係のレポートを作成します。

しかし、コードの一部に脆弱性があっても、ライブラリ全体が脆弱とは限りません。多くの場合、開発者がライブラリやパッケージの一部しか使用しないため、脆弱な関数がアプリケーションの実行パスで「到達」されない可能性は十分にあります。到達されない脆弱性は通常、アプリケーション全体を危険にさらすことはなく、到達される脆弱性と比べてリスクも低くなります。

自社コードとオープンソースの依存関係を示す図。脆弱な関数は、到達可能または到達不可能としてマークされています。

SnykのReachable Vulnerabilitiesは、アプリケーションのコードフローを詳細に分析し、脆弱な関数がアプリケーションから「到達」されるかどうかを判定できます。この分析結果を活用することで、より効果的な優先順位付けが可能になります。

Reachable Vulnerabilitiesを数字で見る

Reachable Vulnerabilitiesを支えるアルゴリズムとヒューリスティックは継続的に改善していますが、Reachable Vulnerabilitiesが提供するコンテキストによって、緊急対応が必要な脆弱性の数を大幅に減らせると自信を持って言えます。テストしたJavaのMavenプロジェクト300件では、検出された脆弱性のうち、アプリケーションから実際に到達可能だったのはわずか2%でした。さらに20%は、到達可能性があると判定されました。

残りの78%の脆弱性がすべて誤検知というわけではありません。むしろ、SnykのPriority Scoreやその他の優先順位付け機能を活用し、これらの脆弱性もトリアージして評価する必要があります。ただし、Reachable Vulnerabilitiesのコンテキストを活用すれば、最初に対処すべき脆弱性をすばやく特定できます。

仕組み

脆弱性に到達可能かどうかを判定するため、複数のアルゴリズムを用いて、アプリケーション独自のコードとオープンソースの依存関係の呼び出しグラフを作成します。呼び出しグラフはアプリケーション内のすべての実行パスを示すため、それらのパスが依存関係内の脆弱な箇所に実際に到達するかどうかを判断できます。

呼び出しグラフにマッピングされたさまざまな依存関係や関数を、業界でもっとも包括的かつ正確で、最新の脆弱性データベースであるSnyk Intel Vulnerability Databaseと照合します。依存関係や脆弱な関数について、専門家が精査し、情報を付加した実用的なコンテンツを収録するこのデータベースにより、Reachable Vulnerabilitiesの分析で正確な結果が得られます。

呼び出しグラフを作成するだけでは到達可能性を正確に判定できないケースでは、Snykのセキュリティに関する専門知識が活用されます。たとえば、実行時に使用される依存関係ツリーが外部要因の影響を受けるアプリケーションもあります。また、到達可能と判定された脆弱性が実際には無害な場合もあれば、呼び出しグラフにかかわらず、到達可能なものとして優先的に対応すべき脆弱性もあります。Reachable Vulnerabilitiesでは、追加のヒューリスティック手法と分析ロジックを適用し、正確な結果を実現します。

Reachable Vulnerabilitiesでプロジェクトをテストする

Reachable Vulnerabilitiesを使ったプロジェクトのテストは、Snyk CLIでsnyk testコマンドに--reachable-vulnsパラメーターを追加するだけで実行できます(注:テストの実行前にプロジェクトをコンパイルする必要があります)。

snyk test --reachable-vulns

Snykが分析を開始します。内部では、アプリケーションの呼び出しグラフを作成し、Snykの脆弱性データと照合します。

完了すると、テスト結果がCLIに表示されます。結果には、テストした依存関係の数、特定された脆弱性の数、そのうち到達可能と判定された脆弱性の数が含まれます。各脆弱性の横には到達可能性のレベルが表示され、その下にはアプリケーションのコードから脆弱な関数に至るパスが表示されます。

MavenプロジェクトのSnykテスト結果を表示したターミナル。59件の問題、59件の脆弱なパス、2件の到達可能な脆弱性が示されています。

到達可能性のレベルは次の3つです。

  • 到達可能 - アプリケーションから脆弱な関数に至る明確なパスが特定されています。この脆弱性を最優先で修正してください。

  • 到達可能性あり - 脆弱な関数に到達する可能性を示す部分的な証拠が見つかっています。この脆弱性を確認してください。

  • 情報なし - 脆弱性に到達可能かどうかを判断するための情報が不足しています。

Reachable Vulnerabilitiesを使った優先順位付け

Snyk UIでは、プロジェクト内およびプロジェクト間でReachable Vulnerabilitiesを使って、より簡単に優先順位を付けられます。Snyk UIでReachable Vulnerabilitiesを使うには、次のCLIコマンドを実行します。

snyk monitor --reachable-vulns

Snyk UIのProjectページでは、優先順位付けに使われる他の指標(深刻度やExploit Maturity)とともに、Issueカードに到達可能性の指標が表示されます。また、Reachable Vulnerabilitiesの新しいフィルターを使って、到達可能性に基づき脆弱性をすばやく絞り込めます。

到達可能な高深刻度の問題と、到達可能な脆弱性のフィルターを表示するSnykの脆弱性詳細画面。

到達可能な脆弱性をすばやく修正できるよう、脆弱な関数がアプリケーションから呼び出される正確なパスもSnykに表示されます。

Jackson databindの重大度の高いデシリアライズ脆弱性について、悪用方法と修正情報を表示するセキュリティ問題の詳細ページ

到達可能性データはReports > Issuesページでも確認できるため、脆弱性を継続的に監視し、経時的に追跡できます。

優先度、エクスプロイトの成熟度、ステータス、修正可能性、到達可能性のフィルターを表示した課題追跡ダッシュボード。

今すぐ始めましょう

効果的な優先順位付けには、正確かつ迅速な脆弱性リスクの評価が欠かせません。正確な評価には、脆弱性に関する客観的・主観的な要因の両方について、コンテキスト情報を入手できることが重要です。しかし、そうしたコンテキストを得るのは容易ではありません。

アプリケーションの実行パスを詳細に分析し、Snykの豊富なセキュリティデータと照合することで、SnykのReachable Vulnerabilitiesは、リスクを正確に評価し、それに応じて優先順位を付けるために必要な、アプリケーションレベルの詳細なコンテキストを提供します。

Reachable Vulnerabilitiesは、Standard以上のすべての有料Snykプランで、Java(Maven)プロジェクトを対象にベータ版としてご利用いただけます。無料アカウントに登録して、ぜひお試しください。

Capture the Flagを始めよう

オンデマンドのバーチャル入門ワークショップを見て、Capture the Flagの課題の解き方を学びましょう。