実環境で悪用されているエクスプロイトとは?リスクに応じた優先順位付けの方法
Rachel Cheyfitz
Shani Gal
2019年11月21日
0 分で読めます脆弱性はすべて同じではありません。オープンソースの脆弱性を決して無視してはいけないのは確かですが、システムへの侵入に悪用されるまでに時間がかかるものもあります。一方で、既知の脆弱性の中には、現実に差し迫った大きなリスクをもたらすものもあります。
脆弱性が着実に増加する世界では、すべてを見つけて迅速に対処するのは困難です。脆弱性の数に圧倒され、取り組みを始める前に諦めてしまうメンテナーも少なくないでしょう。
脆弱性を見分け、優先順位を付けるには、それぞれがもたらすリスクを評価し、対処対象とするリスクの最低ラインを決めて、そこから着手する必要があります。
主なリスク要因の一つは、特定の脆弱性を悪用する難易度です。脆弱性をどのように悪用できるかを示すものを、エクスプロイトと呼びます。ブログ記事、フォーラム、exploit-db、metasploitのようなエクスプロイトフレームワークなどを通じて広く公開されたエクスプロイトは、一般に実環境で悪用されているエクスプロイトと呼ばれます。
既知の脆弱性のうち、システムへの侵入に悪用されるのはごく一部です。最もリスクの高い脆弱性は悪用される可能性が高く、そのため優先して対処すべきです。図をご覧ください。

この記事では、実環境で悪用されているエクスプロイトがリスクを高める仕組みと、その評価方法、脆弱性に優先順位を付けて迅速に対処する方法をご紹介します。
Apache Struts:実際の攻撃につながったエクスプロイト
大手信用情報会社Equifaxから、顧客1億4,550万人分のきわめて個人的な情報が流出した情報漏えい事件をご存じの方も多いでしょう。この事件は、Apache Strutsパッケージの既知の脆弱性が原因でした。この脆弱性に関するエクスプロイトが攻撃のわずか数日前に公開されていたのです。エクスプロイトコードが入手可能だったことで、ハッカーはその後Equifaxのシステムに侵入できました。エクスプロイト公開から2か月後に発生した攻撃の被害は甚大でした。以下のタイムラインで、Apache Strutsへの攻撃をご覧ください。

エクスプロイトコードの成熟度とは?脆弱性のリスクにどう影響するのか
エクスプロイトコードの成熟度(以下、エクスプロイト成熟度)とは、脆弱性が現実の環境でどれほど実際に悪用可能かを、次の点から測るものです。
エクスプロイトが公開されているか(「実環境で悪用されている」か)
公開されたエクスプロイトが実際にどれほど「役立つ」か、つまり公開によって脆弱性をより簡単に悪用できるようになるか
つまり、エクスプロイトがまったく入手できない場合、脆弱性の悪用はより困難になる可能性が高い一方、エクスプロイトが入手可能であっても、脆弱性が必ずしも簡単に悪用されるとは限りません。
公開されたエクスプロイトがもたらすリスクを左右する要因
この記事では、エクスプロイトコードの成熟度に影響する2つの要因を取り上げます。
要因1:この脆弱性はどれほど現実的に悪用できるか?
1つ目の要因は、理論と実際の実装との間にどれほど隔たりがあるかです。実環境で悪用されているエクスプロイトがもたらすリスクを理解するには、次の点を評価します。
現実の環境で実際に利用できるのか、それとも現時点では理論上のものにすぎないのか
すべてのケースに適用できるのか、それとも特定の条件に制限されるのか
理論上でしか議論されていないエクスプロイトは、テストされ有効性が確認された公開エクスプロイトに比べて、リスクがはるかに低い可能性があります。同様に、脆弱性が現れるケースの1%にしか適用できないエクスプロイトは、状況を問わず簡単に脆弱性を悪用できることを示すエクスプロイトより、リスクがはるかに低いといえます。
要因2:どの程度の専門知識が必要か?
2つ目の要因は、脆弱性を実際に悪用するために必要な専門知識のレベルです。脆弱性を悪用するには熟練したハッカーでなければならないのでしょうか。それとも初心者でも実行できるのでしょうか。使い方が簡単であるほど、実際に悪用される可能性は高まります。
ここまでを踏まえると、公開されたエクスプロイトと、最終的に実際の攻撃を受ける脆弱性に相関があることがよくわかります。この調査によると、エクスプロイトが公開されている脆弱性は、実際に悪用される可能性が4倍高いことが示されています。さらに、エクスプロイトの公開によってリスクが7倍に高まるという調査結果もあります。
CVSSがあるのに、なぜエクスプロイト成熟度も必要なのか?
共通脆弱性評価システム(CVSS)は、関連する公開エクスプロイトコードの有無を測るコード成熟度など、複数のリスク要因をスコアに反映しています。しかし、既知の脆弱性の数が時間とともに指数関数的に増加するなか、包括的なスコアリングシステムだけでは、個々の脆弱性が実際にもたらすリスク(あるいはリスクの低さ)が常に反映されるとは限りません。Liran Talは、今年初めのブログ記事で、「脆弱性スコアは複数の公的機関によって評価されるが、その複雑なシステムは12を超える主要な特性で構成されている。適切な指針、経験、補足情報がなければ、誤りは起こりやすい」と述べています。
エクスプロイト成熟度に基づく優先順位付けは、適切であるだけでなく効果的
エクスプロイト成熟度に基づいて優先順位を付けると、最もリスクの高い脆弱性を効果的に特定でき、優先対応が必要なものを全体の約10%に絞り込めます。Snykの顧客では、成熟したエクスプロイトが存在する脆弱性は全体の4~12%にとどまり、この割合はエコシステムによって異なります(下表参照)。この結果は、公開された脆弱性のうち実環境で悪用されたことが確認されているエクスプロイトを持つものは5.5%というこちらの統計など、他のデータとも一致しています。
悪用可能な脆弱性が全体に占める割合は、パッケージの利用状況に応じてエコシステムごとに異なります。以下の表は、主なエコシステムのサンプルにおけるSnyk顧客の平均データです。
エコシステム | 悪用可能な脆弱性 |
|---|---|
JavaScript | 19.1% |
Java | 3.9% |
Python | 11.6% |
他の脆弱性も修正すべきでしょうか?もちろんです。どの脆弱性にもリスクがあります(リスクの高低はありますが)。優先順位付けにはほかにもさまざまな方法があり、今後ご紹介していきます。要点は、すべての脆弱性がリスクを伴う以上、慎重に優先順位を付ける必要があり、エクスプロイトコードの成熟度を評価することが最適な第一歩だということです。
自分の脆弱性が実環境で悪用されているかどうかを知るには?
ユーザーを支援し保護するため、プロジェクトで検出された脆弱性をエクスプロイト成熟度に基づいて優先順位付けできるようになりました。
調査結果とCVSSに基づいて、次の3つの評価軸を採用しました:
成熟:この脆弱性を簡単に悪用できる、公開済みのエクスプロイトコードが存在する。
概念実証:この脆弱性の悪用方法を示す、公開済みの理論的な概念実証(PoC)または詳細な説明が存在する。
既知のエクスプロイトなし:この脆弱性の概念実証コードやエクスプロイトが見つかっていない、または公開されていない。
プロジェクトの脆弱性を表示すると、個々の脆弱性が実環境で悪用されているかどうかを確認できるようになりました。スキャン結果をフィルタリングして優先順位を付け、適切に修正できるほか、集計レポートも確認できます。これにより、最も重要でリスクの高い脆弱性から優先して対処できます。

今すぐ始めましょう!
簡単に始められます。
1. Snykにログインし、任意のプロジェクトの詳細Projectsページを開きます。

2. 左側に新しいフィルターが表示されます。

3. Matureをクリックして、エクスプロイト成熟度に基づく最もリスクの高い脆弱性を表示したら、修正を始めましょう。
詳しくはドキュメントをご覧ください。
次のステップ
エクスプロイト成熟度に基づく優先順位付け機能をリリースしました。今後も、依存関係を効果的に保護できるよう、脆弱性修正のための優先順位付け方法を追加していきます。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。
