ソフトウェア サプライ チェーンの攻撃対象領域を制限

行動の意図が重要であることはよく議論されますが、なぜそれが重要なのでしょうか。例えば私が携帯電話に気を取られながら歩道を歩いていて、街灯にぶつかったとしたら、私は怪我をするかもしれませんが、そこには悪意はなく、また誰かによって行われた行為でもありません。これに対して、私が同じように携帯電話を見て気を取られながら歩いているときに、誰かが私を街灯に突き飛ばし、その結果私が怪我をしたとしたら、私たちはすぐにその加害者を非難するでしょう。しかし、結果は同じで、私は怪我をしたということに変わりはありません。同じ観点からみていきましょう。

攻撃者が悪意を持ってソース コードを変更し、悪名高いSolarWindsCodecovなどのソフトウェア サプライ チェーン攻撃を実行する場合、影響と悪意を即座に認識します。しかし、コアとなるフレームワークやライブラリに存在する脆弱性や欠陥が15年以上もパッチを適用されていない場合はどうでしょうか。そこには悪意はありません。脅威の主体が仕組んだものではありません。しかし、このような脆弱性はソフトウェアのサプライチェーンに存在し、仕組まれた問題よりもさらに多くのユーザーに影響を与える可能性があります。また、攻撃者はそれを知っているが、防御者はそれに気づかないというケースもあります。今日、Trellixは、新しい脆弱性ではなく、非常に古い脆弱性に関する研究を発表しました。CVE-2007-4559は、2007年にPythonプロジェクトに報告され、tarfileモジュールがパストラバーサル脆弱性を適切にチェックしていないことを指摘したものです。今日、この脆弱性は、チェックされないまま、世界中の何十万ものオープンソースおよびクローズドソースのプロジェクトに意図せず追加され、ソフトウェアのサプライチェーンに大きな攻撃対象領域を作り出しています。


調査内容

私たちのチームは、別の脆弱性を調査していたところ、ある企業向けデバイスに存在するこの問題に偶然遭遇しました。当初、私たちは新しいゼロデイ脆弱性を発見したと思っていました。この問題を調査していくうちに、これは実際にはCVE-2007-4559であることに気づきました。この脆弱性は当初6.8とされていましたが、ほとんどの場合、攻撃者は任意のファイルの書き込みからコードを実行できることを確認することができました。このCVEに関する詳細な技術的理解や攻撃による技術的影響については、Kasimir Schulzが書いたブログをご覧ください。

私たちが取り組んでいる分野で行われた過去の研究を理解することは、検証プロセスの重要な一部となっています。このことわざの糸を引き始めたとき、何が解き明かされたのか信じられませんでした。GitHubへの標準的な公開アクセスにより、Pythonのtarfileモジュールを含む30万以上のファイルを見つけることができ、この調査をした2022年の時点で、平均61%がCVE-2007-4559により攻撃に対し脆弱な状態であることが判明しました。そこで私たちは、この15年前の脆弱性が持つ足跡をより包括的に理解できないかと考え、GitHubに問い合わせました。GitHubの協力により、Pythonのtarfileモジュールを含むオープンソースファイルが、約588,000のユニークなリポジトリに約287万個あることを確認することが出来ました。大規模なデータセットのため、現在、結果を処理していますが、脆弱なインスタンスの61%は現在保持されており、35万以上のユニークなオープンソースリポジトリがこの攻撃に対して脆弱であると推定されます。このオープンソースのコードベースは、膨大な数の産業にまたがっています。これらの業界の概要は以下のグラフに示されており、すべてのソフトウェアのデータが入手可能であれば、さらに広範囲に及ぶと予想されます。


      図 1: オープンソース プロジェクトの影響を受ける業界

オープンソースプロジェクトのデータ収集と分析についてのより深い詳細については、私たちのリードOSINTエキスパートであるCharles McFarlandのブログをお読みください。


これまでの経緯

明確にすることから始めましょう – CVE-2007-4559の現状について非難すべき当事者、組織、担当者はいませんが、説明いたします。Pythonプロジェクトのようなオープンソースプロジェクトは、多くの場合、ボランティアのグループによって運営・維持されていることを考慮することから始める必要があります。この場合、Pythonは、非営利団体であるPython Software Foundation (PSF)によって運営・所有されています。この種のグループにとって、リソースを確保し、精力的にレビューを行い、一方的な決定を下し、この種の問題を追跡してタイムリーに修正することはしばしば困難なことです。

このような場合、モジュールの動作に正当なユースケースがあるかどうかという議論もしばしば行われます。このケースも含めて、ある機能のある側面が悪意のある目的に使われる可能性があるからといって、最終的にその機能を削除する必要があるのか、という議論を目にしたことがあります。冒頭の例で言えば、誰かに街灯へ向けて突き飛ばす可能性があるからといって、街灯を撤去する必要があるのでしょうか?この例では、私は、いくつかのコーナーケースに対応するための報酬よりも、リスクの方が大きいと考えています。PythonのZipfileモジュールのような類似のモジュールでは、この種の脆弱性に対して、起こりうる正当な使用に対する懸念なく、保護されていることがわかります。

最後に、ライブラリやソフトウェア開発キット(SDK)が、APIを安全に活用することを開発者の責任の一部と考えることは珍しいことではありません。私たちの場合、Pythonはこの関数を使用するリスクについて、ドキュメントに明確な警告を載せています。


        図 2: CVE-2007-4559 に関する開発者への警告

この警告は、この問題に対する認識を高めるための前向きな一歩ではありますが、この脆弱性がさらに蔓延することを防ぐ助けにはなりません。さらに、多くの開発者が、モジュールの使用方法を学ぶためにサードパーティのチュートリアルに依存しています。私たちの調査でレビューされたほとんどのチュートリアルは、tarfileモジュールの安全でない使い方を誤って示しています。これにはPython自身のドキュメントも含まれます。tutorialspoint, geeksforgeeks, askpython.com などの人気サイトはすべて、モジュールの使用方法の例を示していますが、安全に使用することはできません。これにより、脆弱性は、今後何年にもわたってサプライチェーンにプログラムされ続けることになります。


行動喚起

私たちは、脅威者がアップデートやコードリポジトリを侵害するサプライチェーン攻撃に焦点を当てることが多いのですが、基盤となるライブラリの脆弱性が、より悪化しないまでも同じ影響を与える可能性があることを必ずしも強調してはいません。私たちの研究は、GitHubやオープンソースプロジェクトに重点を置いているため、コードへのアクセスに制限があります。しかし、このプロジェクトは、ゼロデイ脆弱性を持つ企業向け製品を調査することから始まったことを思い出してください。オープンソースプロジェクトほど詳細な分析はできませんが、同じような傾向があると予想するのが妥当でしょう。オープンソース、クローズドソースを問わず、全プロジェクトの61%がこの脆弱性によって悪用される可能性があるとしたらどうでしょう。

あなたの組織にとって、またCVE-2007-4559の詳細については、恐ろしいことではないかもしれませんが、サプライチェーン攻撃は、平均して組織に446万ドルの損害を与え、特定するのに235日以上かかっています。業界として、私たちはこの種の基礎的な脆弱性を探し出し、根絶する必要性を無視することはできません。Trellixは、CVE-2007-4559の存在と悪用の可能性を探すために、1つまたは複数のコードリポジトリをスキャンするスクリプトをリリースしています。さらに、悪用可能であることが確認されたオープンソースプロジェクトへのプルリクエストの提出を自動化することにも取り組んでいます。

※本ページの内容は2022年9月21日(US時間)更新の以下のTrellix Storiesの内容です。
原文: Limiting the Software Supply Chain Attack Surface
著者: Douglas McKee