XZ Utilsのバックドア

本記事では、XZ Utilsのバックドアについて述べる。 
2024年3月29日、Linuxユーティリティであるxzのバージョン5.6.0と5.6.1に、悪意を持って仕掛けられたバックドアの発見が報告された。このバージョンは2024年2月に「Jia Tanこの名称がグループ名、個人名、個人のペンネームのいずれであるかは不明。」という名前を使用したアカウントによってリリースされ、ソフトウェア開発者のAndres Freundによってバックドアが発見された。
xzは多くのLinuxディストリビューション内に存在するにもかかわらず、発見された地点では、バックドアが含まれるバージョンはまだ広く本番環境のシステムには導入されていなかった。しかしながら、主要なディストリビューションの開発バージョン内には存在した。
このバックドアは、影響を受けるLinuxシステム上において、特定のEd448秘密鍵を持つ攻撃者によるリモートコード実行を可能にする。この脆弱性には、CVE番号2024-3094 が割り振られ、CVSSスコアは最高スコアの10.0が割り当てられた。

**背景**
Microsoftの社員でPostgreSQLの開発者の一人だったAndres Freundは、Debian SidDebianの開発者向けバージョン（不安定版）。で発生していたパフォーマンスリグレッションの調査を行う中で、バックドアを発見した。Freundは、SSH接続を行うと異常に高いCPU使用率が発生し、メモリデバッグツールであるValgrindのエラーも引き起こしていることに気が付いた。Freundはこの発見をOpenwall Projectのセキュリティーメーリングリストに報告すると、多くのソフトウェア開発者の注目を呼んだ。このバックドアは、連携して動作する複数の段階で構成するなど、攻撃者はコードが把握されないように努めていた。
汚染されたバージョンがOSに取り込まれると、systemdライブラリを悪用してOpenSSHのSSHサーバーデーモンの動作を改変し、攻撃者が管理者権限を獲得できるようになる。Red Hatの分析によると、このバックドアは「悪意のある者がsshdの認証を破り、リモートでシステム全体への不正アクセスを可能にする」という。
その後の調査で、XZ Utilsにバックドアを仕掛ける活動は、Jia Tan、そしてJiaT75と名乗るユーザーが、約3年をかけてプロジェクト内で信頼される地位を得るための努力の結晶であることが分かった。Jia Tanは設立者と主要メンテナーに対して、プロジェクトの支配権を引き渡すよう自作自演とみられるアカウントを用いて圧力をかけた。その後、XZ Utilsの共同メンテナーの地位を手に入れたことで、バックドアを仕込んだバージョン5.6.0と、OSのソフトウェアテストの中で起こる明らかに異常な動作を修正したバージョン5.6.1に署名することができた。
多重アカウントと疑われるユーザー名には、「Jigar Kumar」「krygorin4545」「misoeater91」などが含まれる。「Jia Tan」という名前も、バージョン5.6.0および5.6.1の作成者名である「Hans Jansen」も、活動の中で使われた偽名であると疑われている。どちらも数年という短い活動期間以前には、ソフトウェア開発において公の場に姿を現したことは全くない。
このバックドアは、その巧妙さと、犯人が信頼される地位を得るために長期間にわたって高度な作戦保全を実践していたという事実が注目された。米国のセキュリティ研究者Dave Aitelは、ロシア対外情報庁の代理として活動していると考えられている、持続的標的型攻撃ハッカーであるlabel=APT29に起因するパターンに合致することを示唆している。ジャーナリストのトーマス・クラバーンは、国家的活動家か、あるいは相当なリソースを持つ非国家的活動家である可能性を示唆した。

**仕組み**
悪意のあるコードは、XZ Utilsソフトウェアパッケージの5.6.0および5.6.1に含まれていることが確認されている。このエクスプロイトは、SSHサーバーの特定のサードパーティ製パッチが使用されない限りは、休眠状態のままである。しかし適切な状況下では、この干渉によって攻撃者がsshd認証を破り、リモートからシステム全体に不正アクセスできる恐れがある。この仕組みは、悪意のあるバイナリコードを含む2つの圧縮されたテストファイルで構成されている。これらのファイルはGitリポジトリに含まれているが、展開してプログラムに注入しない限り、休止状態のままである。このコードはglibc の IFUNCと呼ばれる仕組みを使い、OpenSSHのRSA_public_decryptという既存の関数を悪意のあるバージョンに置き換えている。OpenSSHは通常liblzmaをロードしないが、いくつかのLinuxディストリビューションで使用されている一般的なサードパーティのパッチにより、libsystemdをロードするようになり、libsystemdはlzmaをロードするようになる。GitHubにアップロードされたリリースのtarファイルには、build-to-host.m4の改変版が含まれており、liblzmaへの実際のインジェクションを実行するスクリプトの展開を行う。この改変されたm4ファイルはgitリポジトリには存在せず、メンテナーがgitとは別にリリースしたtarファイルからしか入手できなかった。このスクリプトがインジェクションを実行するのは、glibcとGCCを使用し、dpkgまたはrpmでビルドされたx86-64 Linuxシステム上のみであると思われる。

**反響**

**脆弱性の修正**
米CISAはセキュリティ勧告を公布し、影響を受けたデバイスを以前のバージョンに戻すよう促した。Red Hat、SUSE、Debianを含むLinuxソフトウェアベンダーは、影響を受けたパッケージを以前のバージョンに巻き戻した。GitHubはxzリポジトリのミラーを無効化し、その後復旧させた。
カノニカルはUbuntu 24.04 LTSとその派生OSのベータリリースを1週間延期し、ディストリビューションの全パッケージのバイナリを全てリビルドすることを選択した。Ubuntuの安定版は影響を受けなかったが、アップストリームのバージョンは影響を受けた。カノニカルは、追加パッケージのコンパイル中にこのバックドアの影響を受けていないことを、元のリリース期限までに保証できなかったためこのような予防措置を取った。
2024年5月30日、バックドアが取り除かれたバージョン5.6.2が公開され、本問題には一つの区切りがつけられた。

**世間の反応**
コンピュータ科学者のAlex Stamosは、「これは、あらゆるソフトウェア製品に仕掛けられたバックドアの中で、最も広範かつ効果的なものであった可能性がある」と評し、バックドアが発見されないままであれば、「SSHを実行する世界中の何億台ものあらゆるコンピュータへのマスターキーを、その作成者に与えていただろう」と指摘した。さらに、この事件は、サイバーインフラの重要な部分を無給のボランティアに依存させたことによって計画を実行できた可能性に関する議論も巻き起こした。

**脚注**

**出典**

**関連項目**
 XZ Utils

**外部リンク**
  Andres Freund's report to the Openwall oss-security mailing list