XZ Utils バックドア汚染:Rust Crate liblzma-sys 侵害から手口を辿ってみる

Popular Rust Crate liblzma-sys Compromised with XZ Utils Backdoor Files

2024/04/12 TheHackerNews —XZ Utilsのバックドアに関連する “テストファイル” が、liblzma-sys という名の Rust crate に紛れ込んでいることが、Phylum の新たな調査で明らかになった。この liblzma-sys は、現時点において 21,000回以上もダウンロードされており、XZ Utils データ圧縮ソフトウェアの一部である、基礎ライブラリ liblzma 実装へのバインディングを、Rust 開発者に提供している。問題のバージョンは、0.3.2 である。


2024年4月9日に Phylum は GitHub で、「現時点における Crates.io のディストリビューション ver 0.3.2 には、バックドア (CVE-2024-3094) を取り込んだ XZ のテスト・ファイルが含まれている。このテストファイル自体は、GitHub の.tar.gz にも .zip タグにも含まれておらず、Crates.io からインストールされる liblzma-sys_0.3.2.crate にのみ存在する」と、提起された問題について指摘している。

この問題に関する情報開示を受けた後の、4月10日にリリースされた liblzma-sys バージョン 0.3.3 から、問題のファイルである “tests/files/bad-3-corrupt_lzma2.xz “と “tests/files/good-large_compressed.lzma” が削除された。また、以前のバージョンの crate はレジストリから削除された。

Snyk は独自のアドバイザリで、「悪意のテストファイルがアップストリームにコミットされたが、悪意のビルド命令はアップストリーム・リポジトリに存在しなかった。したがって、このテストファイルは、呼び出されることも実行されることもなかった」と述べている。

XZ Utils のバックドアとは、2024年2月/3月にリリースされたバージョン 5.6.0/5.6.1 に影響を与える、コマンドライン・ユーティリティへの悪意のあるコミットであり、Microsoft のエンジニアである Andres Freund により3月下旬に発見されたものだ。この人気パッケージは、多くの Linux ディストリビューションに組み込まれている。

XZ Utils Backdoor


現在はアカウントが停止されている、JiaT75 (別名 Jia Tan) という GitHub ユーザーにより、この悪意のコードはコミットされた。基本的に、SSH 内の認証制御を回避して、リモートからのコード実行を可能にし、悪意のオペレーターによるシステムの乗っ取りへといたる恐れがある。

SentinelOne の研究者である Sarthak Misraa と Antonio Pirozziは、今週発表された分析で、「全体的な侵害は、2年以上にわたっていた。この脅威アクターは、Jia Tan という偽名で、2021年10月29日から xz プロジェクトに貢献し始めていた。当初において、彼のコミットは無害で軽微なものだった。しかし、この脅威アクターは、プロジェクトに対して積極的に貢献するようになり、コミュニティ内での評判と信頼を着実に獲得していった」と述べている。

ロシアの Kaspersky は、「このトロイの木馬化されたコードは、多段階の操作の形をとっている。最終的なパッケージを生成する、ビルド・インフラのソースコードは、テストケース・ファイル “bad-3-corrupt_lzma2.xz” に隠されている、次のステップのスクリプトを抽出するために、わずかに変更されている。具体的に言うと、”build-to-host.m4″ というファイルが追加で導入されている」と解説している。

XZ Utils Backdoor


これらのスクリプトは、正規のライブラリとリンクされた、別のテストケース・ファイル “good-large_compressed.lzma” から、コンパイル時に悪意のバイナリ・コンポーネントを抽出して、Linuxリポジトリへ向けて提供する。

ペイロードであるシェルスクリプトが、バックドアの抽出と実行を担当し、バックドアは特定の関数 “RSA_public_decrypt、EVP_PKEY_set1_RSA、RSA_get0_key” をフックすることで、感染されたマシンに対する、すべての SSH 接続を監視できるようになる。

liblzma に組み込まれたバックドアの主な目的は、Secure Shell Daemon (ssgd) を操作し、SSH セッション開始時に攻撃者が送信するコマンドを監視することで、リモートでコードを実行する方法を効果的に導入するというものだ。

このバックドアが早期に発見されたことで、Linux エコシステムの広範囲に及ぶ危険は回避された。しかし、この展開が示すのは、ソフトウェアのサプライチェーン攻撃を目的とするソーシャルエンジニアリング・キャンペーンにおいて、オープンソースのパッケージ・メンテナーたちが標的にされていることである。

このケースは、いくつかの偽装アカウントを介して調整された、活動のかたちで実現したのだろう。長年にわたりプロジェクトを運営してきたメンテナーたちに、より多くの機能を追加することでプレッシャーを与え、それらの問題に対処するために共同メンテナーを参加させるというキャンペーンを組織していた。

ReversingLabs は、「これまでは無名だった開発者のアカウントからコントリビュートされる OSS コードと、それに関連する圧力キャンペーンの慌ただしい動きが、広く使用されている OSS プロジェクトに対して、悪意のコードを忍び込ませている。つまり、偽の開発者アカウントを使用した、協調的なソーシャルエンジニアリング・キャンペーンが行われたことを示唆している」と述べている。

バージョン 5.6.0〜5.6.1 の間で、JiaT75 により行われた微妙なコード変更により、バックドアのモジュール性が強化された。それにより、より多くのマルウェアを仕込むための設計が施されたと、SentinelOne の研究者たちは示唆している。

2024年4月9日の時点において、XZ Utils に関連するソースコード・リポジトリは、GitHub上で復元されている。なぜなら、同社の利用規約違反による無効化から、ペネルティである2週間が経過したからである。

この悪意のオペレーションの意図や標的は、現時点では不明であるが、その背後にある計画性と巧妙さを考慮すると、脅威の主体は国家に支援された組織だろうと疑われている。

Kaspersky は、「このバックドアは非常に複雑であり、また、検出を回避するための、洗練された手法を採用している」と述べている。