Linux Daily Topics

xzパッケージに仕込まれた3年がかりのバックドア⁠スケール直前に見つけたのはMicrosoftの開発者

“アップストリームのxzリポジトリとxz tarballsはバックドア化されている(The upstream xz repository and the xz tarballs have been backdoored)⁠―2024年3月29日、Microsoftに所属する開発者 Andres Freundが「Openwall.com」メーリングリストに投稿したポストは世界中のオープンソース関係者に衝撃を与えた。

主要なLinuxディストリビューションにはほぼ含まれているデータ圧縮プログラム「xz(XZ Utils⁠⁠」の特定のバージョン(5.6.0および5.6.1)で、コミッターのひとりが意図的に関与したと思われるバックドアが発見されたのだ。このバックドアが機能すると、悪意ある攻撃者がsystemdを介したsshd認証を突破し、リモートからシステム全体に不正アクセスする可能性がある。Freundの報告を受け、この脆弱性はCVE‐2024‐3094として識別され、影響を受ける可能性のあるRed HatやSUSEなどはすでに対策を発表した。

今回のxzの脆弱性により、影響を受けるとされるおもなディストリビューションは以下の通り。

  • Fedora …開発中の「Fedora Linux 40」および「Fedora Linux 41」⁠rawhide)
  • openSUSE …ローリングリリースの「openSUSE Tumbleweed 20240328」移行のスナップショット(すでにバックドア削除のためのコンパイル済み)
  • Debian …開発中(unstable)「Debian sid」

いずれも最新のパッケージを取り込んでいる開発中のディストリビューションに集中しており、現時点では実稼働中のバージョンでは影響は認められていない。また、影響を受けたバージョンもすでにxzのダウングレードやリコンパイルなどの処置が完了している。

それは2021年に始まった

今回の騒動で驚かされたのは、主要開発者が直接、約3年もの長い時間をかけてバックドア化を図っていたという点だ。xzにバックドアを仕込んだのは、2人のxz主要開発者のうちのひとりであるJia Tanだと見られている。ある人物のブログによれば、Tanは2021年にGitHubアカウントを作成、2022年4月にメーリングリスト経由でxzのパッチを送信するが、ここで突然Jigar Kumarという謎の人物が登場し、このパッチを統合するようxz開発者のLasse Collinに圧力をかけ始めたという。加えてKumarは「別のメンテナーを追加するよう⁠⁠、つまりTanをメンテナーに昇格させるようCollinを精神的に追い込んでいったようだ。この圧力の3日後、Tanは最初のコミット(ハードウェア機能のテスト)を行っており、以降、じわじわと主要開発者としてxzのコミット&マージに入り込んでいくことになる。なお、Tanがコミッターとなって以来、Kumarなる人物はxz界隈に現れなくなっている。

PostgreSQL開発者が感じた“違和感”が最悪の事態になるのを救う

また、バックドアを発見したのがセキュリティエキスパートではなく、Microsoftに在籍するPostgreSQL開発者という点も興味深い。発見したFreundは「マイクロベンチマークを行っていた際、sshdプロセスが驚くべき量のCPUリソースを使っていた」ことを不審に思い、調べてみるとliblzma(xzのライブラリパッケージ)がインストールされているとssh経由のログインが大幅に遅くなっていたという。

OpenSSHはliblzmaを直接使用しないが、Debianなどいくつかのディストリビューションではsystemdの通知をサポートするためにOpenSSHにパッチを適用しており、libsystemdはlzmaに依存している。なおFreundによれば「最初にsystemdの外部でsshdを起動すると、バックドアが一時的には呼び出されるが、速度の低下は見られなかった。これは解析を難しくするための(ハッカー側の)対策の一環と思われる」ということから、かなり周到にバックドアを仕込んでいたことがうかがえる。さらにxzのバックドアのコードには難読化が施されており、Gitではなくtarball(ダウンロードパッケージ)のみに含まれていたという点も発見を難しくしていた。Freundは「数週間前、パッケージの更新後にPostgreSQLの自動テストでValgrind(メモリデバッグやメモリリーク検出などを行うツール)の苦情が出ていたことを思い出した。本当に多くの偶然が必要だった(Really required a lot of coincidences.⁠⁠」と振り返っているが、UbuntuやFedoraなどメジャーなディストロのリリース前にバックドアを見つけられたことはたしかに幸運だったと言わざるを得ない。なお前述のブログによれば、Tanおよびその周辺はDebianやFedoraなどのコミュニティに対してxz 5.6.0/5.6.1を含めるようにリクエストを出していたともされている。

2021年12月に発見された「Apache Log4j」の脆弱性の例を引くまでもなく、オープンソースを介したサプライチェーン攻撃への懸念はここ数年、急速に高まっている。一方でLog4jやxzも含め世界中で使われている重要なコンポーネントであっても、ひとつひとつのオープンソースプロジェクトのコミッターの数は少なく、彼らの疲弊はコミュニティでもたびたび議論されているが、有効な打開策はなかなか見えていないのが現状だ。今回の⁠犯行グループ⁠はそうした現在のオープンソースコミュニティが抱える⁠脆弱性⁠を効果的に突いたともいえる。

だがそうした困難を乗り越えていくのもまたオープンソース開発者自身であることをFreundのケースが示している。Microsoft CEOのSatya Nadellaは自社の開発者の発見をXでこう称賛している。

@AndresFreundTec(Andres Freund)がその好奇心と職人技で我々全員をどのように助けてくれたのか、その様子を振り返るのは本当に楽しく誇らしい。セキュリティはチームスポーツであり、これこそが我々があらゆる場所で必要としている文化である。

おすすめ記事

記事・ニュース一覧