酒呑ガジェット

〜静かな環境であなたに...こちらは音のでないコンテンツです。〜

【悲報】0.5秒の違和感が世界を救った。Linux崩壊寸前「XZ事件」究極ステルスウイルスの全貌

【悲報】0.5秒の違和感が世界を救った。Linux崩壊寸前「XZ事件」究極ステルスウイルスの全貌

世界中のサーバーが乗っ取られる0.5秒前だった。2024年3月、PostgreSQLの開発者アンドレス・フロイント氏が、サーバーへのログインがいつもより0.5秒だけ遅いことに気づかなければ、世界のインフラは一斉に陥落していた。きっかけは、CPUが異常に計算資源を消費しているという、ごくわずかな違和感だった。そこから暴かれたのは、3年越しの潜入工作、巧妙な隠蔽、そして透明人間のような究極のステルスウイルス「XZバックドア」事件だ。CVE-2024-3094、危険度10.0の全貌を追う。

狙われたのは、世界中のLinuxで広く使われるデータ圧縮ライブラリ「XZ Utils」バージョン5.6.0と5.6.1。圧縮処理という地味な部品に、遠隔から最高権限を奪えるリモートコード実行(RCE)の仕掛けが密かに埋め込まれていた。しかもそれは、Red Hat Enterprise LinuxやDebianといった基幹OSの正式アップデートに含まれる寸前だった。

0.5秒の執念が暴いた、圧縮がログインを乗っ取る異常

フロイント氏は、ログイン処理のどこで時間がかかっているかを探る「プロファイリング」という解析手法で、徹底的に調べた。すると、データ圧縮を行う「liblzma」という部品の中に、不審なプログラムが隠されているのを発見した。圧縮処理が、なぜかログイン認証を司る「sshd」に介入し、おかしな動作をしていたのだ。

本来、sshdとliblzmaは直接関係がない。だが、多くの環境では利便性を高めるために様々なプログラムが複雑に連携している。システムの起動を管理する「libsystemd」が、ログを圧縮する機能としてliblzmaに依存していた。その結果、sshdがlibsystemdを呼び出し、libsystemdがliblzmaを呼び出すという「下請けの連鎖」が発生し、sshdが起動するだけで、バックドアも一緒にメモリに読み込まれてしまう状態だったのだ。

この依存関係の複雑化は、セキュリティ用語で「アタックサーフェスの拡大」と呼ばれる。便利さを追求して機能を連携させた結果、無関係な場所まで攻撃の入り口が広がった。事件後、sshdがlibsystemdを直接呼び出さないように設計が見直され、必要な機能だけを自前で実装することで、この危険な連鎖は断ち切られた。

Linuxサーバーに潜むXZバックドアのイメージ、0.5秒の遅延から世界規模の攻撃が発覚する図解

3年越しの潜入と、人間の心を折るソーシャルエンジニアリング

この攻撃を仕掛けた「Jia Tan」というアカウントは、約3年もの時間をかけて準備を進めていた。プログラムの弱点ではなく、人間の弱点を突く攻撃だ。

第一フェーズは、無害で役に立つ修正を何度も提出し、開発者からの信頼を少しずつ獲得すること。第二フェーズでは、本来の管理者であるLasse Collin氏に対する心理的圧迫だ。別の名前を使った偽アカウントを複数作り、「更新が遅い」「早く別の管理者に権限を渡せ」とクレームを送り続けた。長年の無償ボランティアで疲弊し、メンタルヘルスも悪化していたCollin氏は、限界を迎え、熱心に活動していたJia Tanにプロジェクトの管理権限を渡してしまった。これが第三のフェーズであり、攻撃がシステムの中枢権限を完全に掌握した瞬間だった。

権限を得たJia Tanは、セキュリティの自動検査機能をこっそり無効化するなどの下工作を始めた。単独の愉快犯ではなく、国家の支援を受けたような専門的で組織的なグループの犯行だという見方が有力だ。

設計図には毒がない。完成品にだけ毒を盛る二重の隠蔽

不正なプログラムの隠蔽は、極めて巧妙だった。誰でも中身を確認できる公開リポジトリには、「テスト用ファイル」という名目で、一見無害なデータだけを配置した。それだけを見ても、ただのテストデータにしか見えないように偽装されていた。

しかし、実際に配布されるリリース用パッケージを作成する最終段階でだけ、悪意のある指示書が挿入される仕組みになっていた。公開されている設計図には問題がないのに、完成品にだけ毒が入っている状態だ。さらに、この毒は特定の条件が揃った環境でしか発動しないように作られていた。特定のOSかつ64bit CPUアーキテクチャでのみ動作し、セキュリティ研究者が使うMac環境や解析用の特殊環境では、一切異常を起こさない。発覚のリスクを極限まで下げるため、攻撃対象を明確に絞り込んでいたのだ。

初期設定の隙を突くIFUNC悪用と、GOT書き換えの魔術

なぜ、圧縮ライブラリがログイン認証を乗っ取れるのか。その鍵が「IFUNC」というLinuxの機能の悪用だ。これは、プログラムが動き出す前の初期設定の段階で、動作環境に合わせて最適な処理を選択するためのものだ。攻撃者は、この準備体操の時間を狙った。メインのプログラムが本格的に動き出す前に、バックドアの不正な処理を先に実行させることに成功したのだ。

具体的には、「GOT(Global Offset Table)」と呼ばれるプログラムの住所録のようなテーブルを直接書き換えた。sshdがパスワードや鍵を確認するために呼び出す「RSA_public_decrypt」という正規の認証処理の宛先が、攻撃者が用意したバックドアの関数へと書き換えられたのだ。システムが本格稼働した時には、すでに認証の最も重要な部分が掌握されていた。メモリアクセスやシンボル解決という深い階層の知識がなければ不可能な、極めて高度な技術だ。

魔法の鍵だけに開く、究極のステルスRCE

このバックドアの最も恐ろしい点は、単に誰でも入れる裏口を作ったわけではないことだ。特定の「魔法の鍵」を使った時だけ反応するように設定されていた。

SSHの通信時に送られる公開鍵の中に、特殊な方法で暗号化された司令が隠されている。バックドアはそれを受け取ると、ハードコードされた固有の鍵で復号を試みる。もし普通のユーザーがアクセスしてきても、Ed448という強力な電子署名が一致しない場合は、何事もなかったかのように正規の認証処理に戻る。そのため、一般ユーザーには通常のログイン画面と全く同じように振る舞い、さらに不正なアクセスの記録が残らないようにログを書き換える機能まで備わっていた。

魔法の鍵を持つ攻撃者だけが、最高権限で任意のコマンドをこっそり実行できる。外部から調査しても、バックドアの存在自体を検知するのは数学的に不可能だと言われるほど、透明人間のようなウイルスだった。もしインフラに定着していれば、気づかれることなく情報を盗まれ続けていたはずだ。

たった一人のボランティアが支える世界のインフラ。単一障害点という病

なぜ、こんな事件が起きてしまったのか。その背景には、オープンソースが抱える構造的な病がある。XZ Utilsは世界中の巨大なシステムを支える極めて重要なプログラムだが、現実にはたった一人の無償ボランティアが、ほとんどの保守管理を担っていたのだ。これを「単一障害点」と呼ぶ。そこが機能停止すると、システム全体が致命傷を負う。

大企業がオープンソースを利用して莫大な利益を上げる一方で、開発現場には資金やリソースが全く足りていない。開発者は日々の要望やクレーム対応に追われ、バーンアウト状態に陥りやすい。攻撃者は、技術的な抜け穴を探すより、疲弊した管理者を狙う方が確実だと考えたのだ。

便利なシステムを無償で使える裏側には、誰かの過酷な労働がある。巨大なビルの基礎工事を一人のボランティアに任せきりにしているような状態だったのだ。

最悪を防ぐ三つの壁。依存削減、追跡可能性、持続可能な支援

再発を防ぐため、三つの対策が提唱されている。一つ目は「依存関係の削減」だ。本当に必要なプログラムだけを連携させ、無駄な繋がりを断ち切る。二つ目は「追跡可能性」だ。作成されたプログラムが、公開されている安全な設計図から正しく作られたかを証明できる仕組み「Reproducible Builds」や「SLSA」といった、ビルド工程を完全に透明化するフレームワークの導入だ。部品表だけでなく、製造工程全体の安全性を検証しなければならない。

三つ目は「持続可能な支援」だ。企業とコミュニティが連携し、重要なプロジェクトを資金面でも人的にも支援することだ。ボランティアに頼りきるのではなく、皆で支え合う仕組みを作り、単一障害点をなくすことが、最強の防壁になる。技術的な対策だけでなく、エコシステム全体を健全に保つ包括的な取り組みが求められている。

ネットの反応

0.5秒の遅延で気づくとか神すぎる。普通はスルーするわ

3年かけて信頼得て乗っ取るとかホラーすぎる。人間の方が脆弱だった

オープンソースをタダで使ってる大企業はもっと金出すべきだよな

テストファイルに偽装するとか、完成品だけに毒盛るとか頭良すぎて怖い

AIの所感

技術的な巧妙さもさることながら、人間の心理を突いたソーシャルエンジニアリングの恐ろしさに背筋が寒くなる。疲弊した一人の善意につけ込むという、最も非人間的な方法で、最も人間的な弱点を突いた。0.5秒という、本来ならノイズとして切り捨てられるような微細な違和感を、執念深く追いかけたエンジニアの姿勢がなければ、世界はどうなっていたか。便利さの裏側で、誰かの無償の労働に依存しているという現実は、Linuxだけでなく、私たちが使う全てのテクノロジーに共通する問いだ。コードだけでなく、人と仕組みをどう守るかという、社会全体の課題が突きつけられた事件だと感じた。

-パソコン