Skip to main content

Snyk CodeがPriority Scoreを使って脆弱性に優先順位を付ける方法

著者

Frank Fischer

blog feature snyk code priority score

2021年11月9日

0 分で読めます

すべての脆弱性が同じくらい重大に見えると、エンジニアは対応に追われ、重要でない問題に時間を費やしてしまうことがあります。そのため、開発者向けセキュリティツールには、明確でシンプルな優先順位付け機能が欠かせません。ご存じのとおり、Snyk Codeでは概要パネルの右上にPriority Scoreが表示されます。スコアにカーソルを合わせると、算出方法の説明が表示されます。また、すばやく優先順位を付けるには、右上のメニューでPriority Score順に並べ替えることができます。

重大度の高いクロスサイトスクリプティング(XSS)の検出結果と、脆弱なJavaScriptが強調表示されたSnyk Codeの問題ビュー。

しかし、Priority Scoreは単なる数字ではありません。この記事では、スコアの算出に込められた考え方と、効果的に活用するための実践的なヒントをご紹介します。

注:ご覧のとおり、スコアの算出方法には、私たち独自の判断が反映されています。別の方法を選ぶ方もいるかもしれませんが、それで問題ありません。唯一の正解はなく、建設的なフィードバックをいつでもお待ちしています。

Priority Scoreの基本

まず、Priority Scoreは1〜1,000の整数です。数値が高いほど、Snyk Codeがその脆弱性への対処を強く推奨していることを示します。Snyk Open SourceやSnyk ContainerのPriority Scoreも似たように見えますが、製品間でスコアを比較することは推奨していません。比較する場合は、Snyk Codeのスコア同士に限ってください。

Priority Scoreは、アプリケーションのセキュリティを効率よく高めるために役立ちます。Snykでは、これを「影響」と「対処のしやすさ」の観点から捉えています。脆弱性の深刻度は重要ですが、それだけではありません。影響については、1つの修正で複数の脆弱性に対処できるかを確認します。対処できる場合、Priority Scoreは上がります。対処のしやすさについては、脆弱性をどれだけ簡単に修正できるかをSnyk Codeが判断します。修正がすばやく簡単に行える場合、Priority Scoreは上がります。

こうした詳細な分析により、エンジニアの時間を最大限に活かせる形で、修正の優先順位を付けることができます。

Priority Scoreの算出方法

Priority Scoreは、問題に関する事実に基づいてポイントを加算する数式で算出されます。スナップショットの取得とスキャンを行うたびに、スコアは再計算されます。そのため、スナップショットを短い間隔で取得した場合でも、Priority Scoreが異なることがあります(その理由は後ほど説明します)。Priority Scoreの算出に使用されたすべてのデータポイントは、JSONデータファイルで確認できます。

注:以下は、2021年9月時点の算出方法です。私たちは常に調査と学習を続けており、サイバーセキュリティを取り巻く状況も急速に変化しています。そのため、将来、算出方法を変更する可能性があります。Snykでは、進化する脅威の状況において業界をリードする有効性を保つため、Priority Scoreのロジックを常に評価しています。

深刻度

スキャンエンジンが問題に割り当てた深刻度は、Priority Score全体の50%を占めます。深刻度が`High`なら500ポイント、`Medium`なら250ポイント、`Low`なら100ポイントです。エンジンはヒューリスティックを用いて深刻度を割り当てている点にご注意ください。コンテキストを認識するエンジンは、周辺の状況も考慮します。たとえば、テストファイル内で見つかった、またはテストファイルに起因する問題の場合、深刻度は調整されます。

残りの50%は、さまざまな要素から算出されます。

発生件数

対象の脆弱性の相対的な発生件数がポイントに反映されます。たとえば、プログラムに3種類の問題が合計10件あり、その内訳がAが5件、Bが2件、Cが3件だとします。この場合、Cには30ポイントが付与されます。ここでは問題の種類ごとにまとめ、一度の修正ですべてに対処できるものを優先します。1件を修正できれば、同じ種類の問題すべてを修正できるからです。

ホットファイル

ホットファイルとは、複数の問題の原因となっているファイルです。Snyk Codeは、問題の発生箇所がホットファイルにある場合に100ポイント、コードフローがホットファイルを通る場合に50ポイントを割り当てます。ホットファイルに関係しない場合は0ポイントです(エンジンがテストファイルと判定したファイルなどは対象外です)。アプリケーション内のホットスポットに集中して取り組むことで、複数のファイル間を行き来するコンテキストスイッチを減らすのが狙いです。また、1つの問題を修正すると、近接する別の問題も解決する可能性を考慮しています。

修正例

Snyk Codeが、オープンソースプロジェクトで問題がどのように修正されたかを示す有効な例を把握している場合、200ポイントが加算されます。これは、そうした例があると問題への対処が格段に容易になると考えているためです。過去の修正例を参考にすれば、問題にすばやく簡単に対処できます。さらに、早期に成果を上げることは、チームのモチベーション維持にも役立ちます。

OSSでよく修正されている問題

これは興味深い要素です。エンジンがオープンソースの学習用データセット内で1,000を超えるリポジトリに脆弱性を検出すると、100ポイントが加算されます。これにはいくつかの理由があります。

  1. 脆弱性が広く見られるほど、スクリプトキディによるものも含め、悪用される可能性が高まり、危険性が増すためです。

  2. すでに何百回も対処されている脆弱性には、適用できるベストプラクティスが確立されているためです。 

Priority Scoreを活用するためのベストプラクティス

ここまで見てきたように、Priority Scoreは修正作業の指針となる強力なツールです。ぜひ活用してください。最後に、Priority Scoreを使う際のベストプラクティスをいくつかご紹介します。

  1. Snyk UIでは、Priority Scoreの上限と下限を指定して結果を絞り込めます。

  2. Priority Scoreはスキャンのたびに再計算され、コードの変更によっても変わるため、常に最新のスコアを使うことをおすすめします。たとえば、スキャン後に上位10件をJiraチケットにするのではなく、まず1件を修正して再スキャンしましょう。前回の修正によって異なる可能性がある、新しいPriority Scoreの最上位の問題から対応できます。

  3. 異なるSnyk製品のPriority Scoreを比較しないでください。スコアが示す内容も、算出の根拠となるロジックも異なり、相互に比較できません。

  4. スコアにカーソルを合わせて、Priority Scoreの決定理由を確認しましょう。まずは簡単に修正できる問題から始めるのも一つの方法です。最初に成果を得られれば、モチベーションにつながります。

Capture the Flagを始めよう

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

続きを読む

blog feature ai lilac
Blog

エージェント型修正で脆弱性バックログをプルリクエストに変える

Evo Remediation Agentがオープンプレビューで利用可能になり、Evo Agentic AppSecに依存関係の自動解決機能が加わりました。AppSecチームは継続的な修正キャンペーンを実施できるようになりました

AI Background min crop
Blog

AIが、あなたが受け入れてきたあらゆるリスクを一気に顕在化させる:AI Security Panel: Unfilteredから得た7つの洞察

AIによって攻撃はより安価かつ高速になり、組織がすでに抱えているリスクが露呈しています。4人のセキュリティリーダーが、機械の速度に対応する防御と迅速な修復が今不可欠である理由を語ります。

blog feature ai violet
Blog

VulnBump:AIエージェントはビルドを壊さずに脆弱な依存関係を修正できるか?

VulnBumpでは、実際の依存関係のアップグレード307件をAIエージェントで検証します。脆弱性が解消され、ビルドとテストが正常に通った場合にのみ、修正成功と判定します。