XZ Utilsに仕込まれたバックドアの詳細
2024年3月29日に報告されたXZ Utilsの
バックドア事件は、
Linuxユーティリティxzのバージョン5.6.0および5.6.1に悪意のあるコードが埋め込まれていたことを示しています。この問題は、2024年2月に「Jia Tan」という名義のアカウントによってリリースされたバージョンに由来し、
PostgreSQLの開発者であるAndres Freundによって発見されました。
xzは多くの
Linuxディストリビューションに広く使用されているにもかかわらず、これらの脆弱なバージョンが本番環境に導入されている場面は少なく、主に開発バージョン内で発見されました。発見された
バックドアは、特定のEd448秘密鍵を保有する攻撃者にリモートからコードを実行される可能性を与えるものであり、この脆弱性にはCVE番号のCVE-2024-3094が付与され、CVSSスコアは最大の10.0となっています。
背景と発見
Andres Freundは、Debian Sidで見つかったパフォーマンスの問題を調査している際に、この
バックドアを発見しました。彼はSSH接続時にCPU使用率が異常に高くなる現象や、メモリデバッグツールValgrindでエラーが発生していることに気づきました。彼はその発見をOpenwallプロジェクトのセキュリティメーリングリストに報告し、その他のソフトウェア開発者たちからの関心を呼び起こしました。
この
バックドアは、攻撃者が基盤となるシステムの管理者権限を得られるよう、systemdライブラリやOpenSSHのSSHサーバーの挙動を操作する仕組みを持っています。Red Hatの分析によると、悪意のある者がSSH認証を破り、不正アクセスが行える状況を可能にするものです。
さらに調査が進められる中で、この
バックドアがJia TanとJiaT75というユーザー名を使用して、約3年間にわたりプロジェクト内部で信頼を得るために操作を行っていたことが明らかになりました。これらの攻撃は、
バックドアを含むバージョンのリリースに至った背景事情を表しており、信頼を獲得するための巧妙な手法が用いられています。
悪意のあるコードはXZ Utilsのバージョン5.6.0と5.6.1に組み込まれていました。この悪用は、特定の条件が満たされない限りは機能せず、通常は休止状態にあります。しかし一旦条件が整うと、攻撃者はSSHの認証を突破し、リモートでの不正アクセスが可能になります。この仕組みは、悪質なバイナリコードを含む2つの圧縮ファイルから成り立っており、これらは
Gitリポジトリに含まれていますが、自動的には展開されません。
悪意のあるコードは、glibcのIFUNC機能を利用して、OpenSSHの既存関数であるRSA_public_decryptを改変しています。一般的にはliblzmaがロードされることはありませんが、一部の
Linuxディストリビューションのサードパーティ製
パッチによって、libsystemdがロードされ、この流れでliblzmaも読み込まれる仕組みになっています。
GitHubにアップロードされたリリースには、悪用を可能にする変更が加えられたスクリプトが含まれていました。在籍していたプロジェクトから未発表のtarファイルが利活用され、実体のインジェクションが行われる形で仕組みが完成していたのです。
反響と修正動き
この脆弱性が明らかになると、米国のCISAは、影響を受けたデバイスを以前のバージョンに戻すようにとの警告を発表しました。
Linuxの主要ベンダーであるRed Hat、SUSE、Debianなどは、影響のあるパッケージを適切な状態に戻すために迅速に動きました。また、
GitHubも関連するリポジトリのミラーを無効化し、その後復旧させています。
カノニカル社は、
Ubuntu 24.04 LTSおよびその派生版のベータリリースを1週間延長し、全パッケージを完全に再構築するという対応を決定しました。この際、安定版は影響を受けなかったものの、
バックドアの影響を防ぐための予防策が取られました。
最終的に、2024年5月30日に
バックドアが削除されたXZ Utilsのバージョン5.6.2が公開され、問題は解決を迎えました。
最後に
この
バックドア事件は、ソフトウェアに組み込まれる可能性のあるリスクを再認識させるものであり、コンピュータ科学者のAlex Stamosも指摘するように、「もし発見されなければ、世界中の何億台ものコンピュータに対するアクセスが可能になっていたかもしれない」という警告でもあります。サイバーインフラの重要な部分を無給のボランティアに依存させることが及ぼす影響が、再考されるべき課題として浮かび上がっています。