Skip to main content

XZバックドア CVE-2024-3094

著者
feature XZ Backdoor

2024年3月31日

0 分で読めます

2024年3月29日、Linuxディストリビューションを介して複数のOSにアクセスするため、Linuxソフトウェアライブラリliblzmaにバックドアを仕込む多額の投資と長期にわたる工作が、悪意ある攻撃者によって実行されました。そして、好奇心旺盛なエンジニアが不具合に気づくまで、工作はほぼ成功していたと言えるでしょう。

現時点で判明している影響対象の上流ソフトウェアと、推奨される対策:

アセット

侵害されたバージョン

安全なバージョン

CVE 

xz

5.6.0 - 5.6.1

5.4.6にダウングレード

liblzma

5.6.0 - 5.6.1

5.4.6にダウングレード

XZとは?

XZ(XZ Utilsとも呼ばれます)は、圧縮・展開機能を提供するコマンドラインインターフェースです。DebianやUbuntuなど、多くのLinuxディストリビューションに標準で含まれています。

// Example usage of XZ for context:
$ xz llm_rag_context.json

// Results in a new compressed file on disk:
$ ls -al llm_tag_context.json.xz
.rw-r--r--   81k lirantal 31 Mar 10:29   -N  llm_tag_context.json.xz

Liblzmaとは?

Liblzmaは、LZMA圧縮・展開アルゴリズムを実装したソフトウェアライブラリです。他のプログラミング言語から利用できるバインディングも提供しており、xz CLIプログラムなどで使用されています。

CVE-2024-3094とは?

CVE-2024-3094という脆弱性識別子は、liblzmaパッケージに深刻度スコア10.0の重大な脆弱性があることを示すものとして、2024年3月29日に公開されました。

CVEレポートによると、セキュリティリスクの原因はliblzmaソフトウェアライブラリで見つかった悪意あるコードです。このコードは、ライブラリのコードと連携した際にデータを改ざんし、完全性を損なうことで、さらに深刻な結果を招く可能性がありました。

XZバックドアの影響とは?

LinuxのSSHプロトコルと関連ツールを使うと、ホスト間のリモートアクセスが可能になります。XZバックドアはデータの傍受や改ざんを可能にし、一部のLinuxディストリビューションではSSHプログラムからliblzmaを利用できるため、CVE-2024-3094の影響の一つとして、sshdプログラムで認証を回避される可能性が考えられます。

簡単に言うと、RSAキーを持つ人物が、バックドアが仕掛けられたSSHサーバーにリモートから認証できるということです。

現在、XZバックドアによってリモートコード実行が可能になるとの見方が出ています。ただし、liblzmaに仕込まれたバックドアコードを解析し、関与した悪意ある攻撃者につながるすべての貢献をたどる調査が続いています。

経緯を把握するための時系列:

  • 悪意あるビルドファイルは、2024年2月24日にDebianのxz-utilsに追加されました。

  • 5.6.0版のxz-utils tarballは2024年2月24日に、5.6.1版は同年3月9日にリリースされました。

  • 5.6.0版は、2024年2月27日にFedoraに追加されました。

XZバックドアの経緯

2024年3月29日、広く利用されているXZ Utilsパッケージの一部であるliblzmaライブラリが侵害された可能性について、Openwallのoss-securityメーリングリストに投稿していた貢献者、Andres Freund氏が公表し、重大なセキュリティ侵害が明らかになりました。

Freund氏がsshdプロセスのCPU使用率が異常に高いことに気づき、詳しい調査を始めたことで、この問題が発覚しました。

問題の核心は、liblzmaのバージョン5.6.0および5.6.1に埋め込まれた、悪意を持って細工された圧縮テストファイルにあります。tarファイルのconfigureスクリプトを改変してバックドアを仕込むことが目的でした。このエクスプロイトは通常の条件下では休眠状態ですが、SSHサーバーに特定のパッチを適用したシステムで作動し、sshdの認証を回避して不正なリモートアクセスを可能にします。

以下のスクリーンショットは、Andres氏がOpenwallのOSS-Securityメーリングリストに投稿したXZマルウェアの分析からのものです。

SSHプログラムの動作を遅くするバックドアの影響を示すスクリーンショット

この高度なエクスプロイトは、GNU Cライブラリ(一般にglibcと呼ばれる)のIFUNCメカニズムを利用し、crc64_resolveメソッドのリゾルバーを追加します。これにより監査フックがインストールされ、OpenSSHのRSA_public_decrypt関数が侵害された関数に置き換えられます。OpenSSHは通常liblzmaを必要としません。しかし、このエクスプロイトは、サードパーティ製パッチによってlibsystemdが読み込まれ、その後、影響を受けるソフトウェアライブラリliblzmaが読み込まれる、連鎖的な読み込みの状況を悪用します。執筆時点では、このバックドアがsystemd通知を有効にするためにこのパッチを適用した一部のLinuxディストリビューションで、sshdにのみ影響しています。

この攻撃で特に悪質だったのは、GitHubでホストされているtarリリースに、改変されたbuild-to-host.m4ファイルが追加されていたことです。このファイルはGitリポジトリには存在せず、ソース管理をたどって元の作成者を特定することができませんでした。

このM4ビルドファイルは、特定のシステムでビルドプロセス中に悪意あるコードを抽出・注入します。対象はx86-64 Linuxプラットフォームのうち、glibcとGCCを使用し、DebianおよびRed Hat Linuxディストリビューションで広く使われるパッケージビルドツールdpkgまたはrpmでビルドされたものです。

この侵害を受け、GitHubは利用規約違反を理由にXZ Utilsをホストしていたリポジトリをアーカイブしました。バックドアの起源を調査したところ、xzプロジェクトのメンテナーであるJia Tan氏が関与した可能性が浮上しています。ただし、意図的な行為だったのか、メンテナーのアカウントが侵害されたのかは、まだ明らかになっていません。このメンテナーアカウントの背後にいる人物の実在性も、今後確認する必要があります。

このサプライチェーン攻撃は、Debian 13やunstable、Fedora Rawhide、Fedora 40、Kali Linux、OpenSUSE Tumbleweedなど複数のLinuxディストリビューションに影響しました。Arch Linuxは、ユーザーに速やかなアップデートを呼びかけています。一方、安定版リリースの更新プロトコルに従う大半のディストリビューションは、影響を受けない古いXZバージョンを使用していたため、被害を免れました。FreeBSDも、インシデント発生前のXZバージョンを採用しており、攻撃対象がLinuxのglibcだったことから影響を受けていません。しかし、たとえばFedoraやDebianの最新アップデートを使ってコンテナイメージのデプロイを自動化していた場合、脆弱なXZプログラムを含むイメージを配布していた可能性があります。

CVE-2024-3094として追跡され、最高値のCVSSスコア10と評価されたこのインシデントは、サプライチェーンセキュリティの重要性と、オープンソースへの信頼や貢献の検証にまつわる複雑さを改めて浮き彫りにしました。

被害の修復:XZのクリーンアップ作戦

事件の詳細が明らかになると、XZ Utilsライブラリの元メンテナーであるLasse Collin氏は、ライブラリのビルド設定を修正するソースコードを急いでコミットしました。このコードの差分から、悪意ある攻撃者がバックドアを仕込むために行った、巧妙で手の込んだ工作がわかります。ドット(.)文字によってビルドツールにエラーが発生し、セキュリティサンドボックスが無効化されて、セキュリティ制御が回避されました。

CMakeビルドツールのセキュリティ回避を元に戻すLasse CollinのGitコミット。

SnykでXZの脆弱性を検出する

Snykを使えば、無料でXZの脆弱性を検出する方法がいくつかあります。Snyk CLIを使って、プロジェクトをローカルでテストできます。

  • アプリケーションの場合は、Snyk CLIでsnyk test --unmanagedを実行し、リポジトリ内の管理対象外の依存関係を比較して、個々のパッケージとその脆弱性を検出します。

  • コンテナの場合は、snyk container testを実行して、脆弱なバージョンのXZに依存する、サポート対象のOSパッケージを検出します。

Gitリポジトリ内のすべてのプロジェクトをスキャンして、利用中の直接依存関係と推移的依存関係のレポートを作成することもできます。 

このレポートでは、XZへの依存の有無と、依存関係グラフ内でXZが使われている経路の数を確認できます。すべてのプロジェクトを対象に「CVE-2024-3094」をすばやく検索することもできます。 

サプライチェーンセキュリティとオープンソースの交差点

XZバックドアは、オープンソースやサイバーセキュリティのコミュニティ全体に波紋を広げ、オープンソースソフトウェアの完全性や、常に存在するサプライチェーン攻撃のリスクについて、議論と懸念を巻き起こしました。このインシデントはSolarWindsの侵害や、npmやPyPIなどのソフトウェアレジストリで発見された数々の悪意あるパッケージを想起させます。世界のサイバーセキュリティに重大な影響を及ぼす、サプライチェーン脆弱性のパターンを浮き彫りにしています。

GitHubでJiaT75というハンドルネームを使っていたJia Tan氏と、Jigar Kumar氏やDennis Ens氏などの関連人物は、多くのLinuxディストリビューションで使われる必須のソフトウェアユーティリティXZ Utilsに悪意あるコードを埋め込む、巧妙で複数年にわたる工作を展開していたことが明らかになりました。当初は無害に見える貢献から始まり、プロジェクトのメンテナーに直接圧力をかけてコミット権限を得ようとするまでにエスカレートしました。オープンソースコミュニティに根付く信頼と協働の性質を悪用するため、技術的手法とソーシャルエンジニアリングの両方を駆使した巧妙な手口です。

Jia Tan氏がXZ Utilsに関与するまでの経緯をたどると、libarchiveなど他のプロジェクトでの不審な活動が確認され、CVE-2024-3094の発見に至るまでの計画的な行動が浮かび上がります。テスト環境の構築や、ifunc実装を悪用して悪意を隠そうとする意図的な試みからは、周到な計画と巧みな操作がうかがえます。

このインシデントは、オープンソースソフトウェアにおける信頼とセキュリティを持続させる方法について、重要な問いを投げかけています。オープンソースの本質である公開性とコミュニティからの貢献への依存は、害を及ぼす意図を持つ攻撃者が侵入したとき、アキレス腱になり得ます。また、プロジェクトの安全性と最新性を保つために大きなプレッシャーのもとで時間と専門知識を提供するメンテナーが、強いストレスやメンタルヘルス上の課題に直面していることも浮き彫りになりました。

大規模なSolarWinds侵害や、公開ソフトウェアリポジトリで有害なパッケージが相次いで見つかった過去の事例との類似点を無視することはできません。どの事例にも共通するのは、信頼の悪用と、現代のソフトウェアサプライチェーンの複雑さです。こうした事件は、サイバー攻撃者の巧妙さと、私たちがますます依存するデジタルインフラに内在する脆弱性を、改めて強く意識させます。

CVE-2024-3094と過去の事例を踏まえ、オープンソースコミュニティとテクノロジー業界全体は、ソフトウェア開発と配布を取り巻くセキュリティ対策を再評価し、強化する必要があります。貢献内容の精査を強化し、メンテナーに対するより堅牢な検証プロセスを導入するとともに、セキュリティのベストプラクティスに関する連携を深めることが重要です。さらに、メンテナーがソフトウェアを効果的に保護するためのリソースやツールを確保できるよう、オープンソースプロジェクトの持続可能な資金調達モデルも早急に求められています。

このインシデントや同様の事件による影響に向き合う中で、オープンソースの理念とセキュリティの必要性のバランスについて、率直で批判的な議論を続ける必要があります。オープンソースソフトウェアとデジタルエコシステム全体のレジリエンスは、それを損なおうとする脅威に対し、私たちが力を合わせて適応し、防御を強化できるかどうかにかかっています。

Jia Tan氏とは何者なのでしょうか。個人なのか、それとも国家が支援する攻撃者なのでしょうか。ほかにどのプロジェクトを侵害し、バックドアを仕掛けた可能性があるのでしょうか。セキュリティ研究者や開発者は、Jia Tan氏のgitコミットの履歴や出所、タイムゾーンなど、手がかりとなる情報をたどり、全体像の解明に取り組んでいます。

SBOMはCVE-2024-3094の緩和にどう役立つか

  • ソフトウェア部品表(SBOM)を使うと、推移的依存関係も含め、ソフトウェアのコンポーネントとバージョンを把握できます。

  • SBOMを活用すると、影響を受けたすべてのプロジェクトが修正されたことを確認しながら、修復対応の進捗を追跡できます。

  • SBOMを更新したら、必要なパッチや修正が正常に適用されたことを証明するために活用できます。

次にすべきこと

  • CVE-2024-3094の更新に関する、米国サイバーセキュリティ・インフラストラクチャ安全保障庁(CISA)によるこちらのレポートのガイダンスに従ってください

  • SnykのSBOM CheckerでSBOMをテストしましょう

  • Dark Readingによるこちらの最新情報をご覧ください