31 ポイント 投稿者 GN⁺ 2024-04-03 | 7件のコメント | WhatsAppで共有
  • 2年以上にわたり「Jia Tan」という名前を使う攻撃者が、xz圧縮ライブラリに対して誠実で効果的な貢献者として活動し、最終的にコミット権限と管理者権限を付与された。
  • その権限を使って、Debian、Ubuntu、Fedoraおよびその他のsystemdベースLinuxシステムで、OpenSSH sshd の依存関係でもあるxzの一部 liblzma に、非常に巧妙かつ注意深く隠されたバックドアを仕込んだ。
  • このバックドアはSSHセッション開始時に、攻撃者が隠しコマンドを送るのを監視し、ログインしなくても標的システム上で任意のコマンドを実行できる機能を攻撃者に与えた。未認証の標的に対するリモートコード実行である。
  • この攻撃は2024年3月29日に公に公開され、広く使われるオープンソースソフトウェアに対する初の深刻なサプライチェーン攻撃とみられる。
  • オープンソースのサプライチェーンセキュリティにおける分水嶺となる事件である。
  • この投稿は、2021年末までさかのぼるとみられるこの攻撃のソーシャルエンジニアリング面について構成した詳細なタイムラインである。

序幕

  • 2005〜2008年、Lasse Collinが他者の助けを得ながら、gzipよりもファイルを約70%のサイズに圧縮するLZMA圧縮アルゴリズムを用いて .xz ファイル形式を設計した。
  • この形式は時間とともに、tarファイル、Linuxカーネルイメージなどの圧縮に広く使われるようになった。

Jia Tanの登場と支援者たち

  • 2021-10-29: Jia Tanがxz-develメーリングリストに最初の無害なパッチを送る。
  • 2021-11-29: Jia Tanが2つ目の無害なパッチを送る。
  • 2022-04-19: Jia Tanがさらに別の無害なパッチを送る。
  • 2022-04-22: 「Jigar Kumar」がJia Tanのパッチがまだマージされていないと不満を表明する。
  • 2022-05-19: 「Dennis Ens」がXZ for Javaのメンテナンス状況を問い合わせる。
  • 2022-05-19: Lasse Collinが返信の遅さを詫び、「Jia TanがオフリストでXZ Utilsを手伝っており、少なくともXZ Utilsでより大きな役割を担えるだろう」と答える。
  • 2022-05-27: Jigar Kumarがパッチスレッドに圧力をかけるメールを送る。
  • 2022-06-07: Jigar KumarがJavaスレッドに圧力をかけるメールを送る。
  • 2022-06-08: Lasse Collinが、関心を失ったわけではないがメンタルヘルスの問題により対応が制限されていると答える。
  • 2022-06-10: Lasse CollinがJia Tan作成の最初のコミットをマージする。
  • 2022-06-14: Jugar Kumarがさらに別の圧力メールを送る。
  • 2022-06-21: Dennis Ensがメンテナンスを他者へ引き継ぐよう提案する圧力メールを送る。
  • 2022-06-22: Jigar KumarがCパッチスレッドに圧力メールを送る。
  • 2022-06-29: Lasse Collinが、「Jia Tanがプロジェクトでより大きな役割を担える可能性がある」と示唆して返信する。

Jia Tanがメンテナーになる

  • LasseはJia Tanとより密接に協力し始めたように見える。Jigar KumarとDennis Ensは架空の人物である可能性が高い。
  • 2022-09-27: Jia Tanが5.4.0リリースの要約を提供する。
  • 2022-11-30: Lasse Collinが、バグレポート用メールアドレスを個人アドレスからJia Tanと共有する別名に変更する。
  • 2022-12-30: Jia Tanがxzリポジトリに直接、最初のコミットをマージする。
  • 2023-01-11: Lasse Collinが最後のリリースとなる v5.4.1 をタグ付けしてビルドする。
  • 2023-03-18: Jia Tanが最初のリリースとなる v5.4.2 をタグ付けしてビルドする。
  • 2023-03-20: Jia TanがGoogle oss-fuzzの設定を更新し、バグ報告が自分に届くようにする。
  • 2023-06-22: Hans Jansenが「GNU indirect function」機能を使う一対のパッチを送り、Lasse Collinがそれを作り直し、Jia Tanがマージする。
  • 2023-07-07: Jia Tanがoss-fuzzビルド中のifuncサポートを無効化する。
  • 2024-01-19: Jia TanがWebサイトをGitHub Pagesへ移行し、XZ UtilsのWebページを管理下に置く。

攻撃開始

  • 2024-02-23: Jia Tanがテスト入力ファイル内に隠されたバックドアのバイナリコードをマージする。
  • 2024-02-24: Jia Tanが v5.6.0 をタグ付けし、悪意ある build-to-host.m4 を含む xz-5.6.0.tar.gz 配布物を公開する。
  • 2024-02-24: Gentooで5.6.0のクラッシュが発生し始める。
  • 2024-02-26: Debianが xz-utils 5.6.0-0.1 をunstableに追加する。
  • 2024-02-28: Debianが xz-utils 5.6.0-0.2 をunstableに追加する。
  • 2024-02-29: GitHubで @teknoraverliblzmalibsystemd にリンクしないようにするプルリクエストを送る。
  • 2024-02-28: Jia Tanが、Landlockサポート確認に使われるCプログラムへ微妙なタイプミスを加え、configure スクリプトのLandlock検出を壊す。
  • 2024-03-04: RedHat系ディストリビューションで、liblzma_get_cpuid におけるValgrindエラーが発生し始める。
  • 2024-03-05: libsystemd のPRがマージされ、liblzma が削除される。
  • 2024-03-05: Debianが xz-utils 5.6.0-0.2 をtestingに追加する。
  • 2024-03-05: Jia Tanがifuncのバグ修正をコミットする。
  • 2024-03-08: Jia TanがValgrind修正のためのコミットを行う。
  • 2024-03-09: Jia Tanがバックドアファイルを更新するコミットを行う。
  • 2024-03-09: Jia Tanが v5.6.1 をタグ付けし、xz 5.6.1配布物を公開する。
  • 2024-03-20: Lasse Collinが、カーネル内のxz圧縮コードのメンテナーとして自分とJia Tanを追加するパッチセットをLKMLに送る。
  • 2024-03-25: Hans Jansenが、xz-utils を5.6.1へ更新するためのDebianバグを起票する。
  • 2024-03-28: Jia TanがUbuntuのバグを起票し、Debianから xz-utils を5.6.1へ更新するよう促す。

攻撃の検知

  • 2024-03-28: Andres Freundがバグを発見し、Debianと distros@openwall に非公開で通知する。RedHatが CVE-2024-3094 を割り当てる。
  • 2024-03-28: Debianが5.6.1をロールバックし、5.6.1+really5.4.5-1 を導入する。
  • 2024-03-29: Andres Freundが「ここ数週間で」発見したと述べ、公開の oss-security@openwall リストにバックドア警告を投稿する。
  • 2024-03-29: RedHatが、Fedora RawhideとFedora Linux 40ベータでバックドア入りのxzが配布されていたと発表する。
  • 2024-03-30: Debianがビルドを停止し、Debian stableを使ってビルドマシンを再構築する。

GN⁺の見解

  • この事件は、オープンソースソフトウェアに対するサプライチェーン攻撃の重要な転換点になるだろう。長期間にわたる共犯者のソーシャルエンジニアリング的アプローチによって信頼を獲得し、アクセス権を確保したうえで、広範に使われる中核ライブラリへ密かにバックドアを仕込んだからだ。
  • オープンソースプロジェクトのガバナンスと権限移譲プロセスを見直す必要がある。中核メンテナーの個人的事情にプロジェクトが左右されないよう、分散型ガバナンスモデルを検討する価値がある。
  • 主要なオープンソースプロジェクトに対するセキュリティ監査とコードレビューは、さらに重要になるだろう。不審な変更を検出し、権限の悪用を防ぐための自動チェックツールも必要だ。たとえばバイナリデータ追加への警告などである。
  • 公開で開発され、誰でも貢献できるというオープンソース方式の利点を損なわずに、悪意ある貢献者を見分け、攻撃を早期に遮断できる技術的・制度的手段を整備する必要がある。
  • セキュリティ的に脆弱な言語やツールを使うオープンソースプロジェクトほど、リスクは大きいだろう。メモリ安全性、静的解析、Fuzzingなど多面的に安全性を高める取り組みとともに、現代的なツールへの移行も求められる。
  • バックドアの隠された有効化条件、拡散経路、影響範囲などの詳細な分析結果に注目が集まるだろう。今後、同様の攻撃を防ぐための洞察が得られるはずだ。

7件のコメント

 
sagee 2024-04-09

この事件をきっかけに心配になったのですが…
オープンソース開発者のPCがハッキングされたり、拉致・監禁されたり、あるいは金で買収されて悪意あるコードを仕込まれたりすることもあるのではと…。
お金のことを考えると、オープンソース開発者はちゃんと生活できているのかな、という気もしますね。

 
botplaysdice 2024-04-05

自分はセキュリティ関係の仕事をしているんですが、コードレビューしていてバグを見つけると、「このコードを仕込むために5年前にここへ入社したのか?」みたいな冗談が出ますね(笑)

 
aer0700 2024-04-04

Lesser Collinはいろいろと大変だったでしょうね…

 
xcutz 2024-04-03

うん、Arch Linux はとっくにパッチ済みだよ〜おいでおいで、うん、バックドアはアウト、最新の Arch は最高〜

 
tpdns90321 2024-04-07

pacman -Syu

 
sdkfile 2024-04-03

Lasse Collin がこの事件を整理した文章を公開しています。
https://tukaani.org/xz-backdoor/

 
GN⁺ 2024-04-03
Hacker Newsの意見
  • 事件の優れた要約であり、すべてのリンクが一か所にまとまっているため、ソーシャルエンジニアリングによる攻撃が実際にどのように展開されるのかを学びたい人にとって完璧な資料である。

    • 「攻撃開始」の部分では Ubuntu と Debian には触れられているが、Fedora が抜けているため、完成度を高めるために追加できる。
    • Fedora に対するソーシャルエンジニアリング的な圧力は、2024年3月4日より前の週に始まっていたようだ。
  • Fedora のタイムラインが欠けていることを指摘している。

    • 「Jia Tan」という人物が2月27日から3月27日の間に接触を試み、Fedora 40 と 41 に新しい xz を含めようとしていた。
  • システム内にある理解しづらいコードは、もうこれ以上容認すべきではないという意見。

    • M4 と複雑なシェルスクリプトを排除すべき時だと主張している。
  • アップグレードに対する保守的な姿勢が強まる可能性が、前向きな結果の一つとして見られる。

    • 開発者を含む多くの人が、アップグレードを常に良いものと受け取るのではなく、リスクと利点を慎重に比較検討すべきである。
  • FOSS コミュニティで無礼なユーザーを組織的に排除したり、コミュニティの認識を高めて無礼な振る舞いにより強く対処する文化的変化が起こり得ると提案している。

  • メールアドレスの形式に関する観察は誤っているという指摘。

    • Jigar Kumar と Dennis Ens のメールアドレスの形式は異なっており、これは両者が同一人物(ソックパペット)であることの証明にも反証にもならない。
  • 社会的圧力が、人にどれほど簡単に統制を手放させてしまうのかへの懸念を示している。

    • XZ の原作者にとってこの事件がどれほど衝撃的だったか想像もつかず、この事件が他のオープンソース関係者にとって、他人からの圧力に屈してはならないという強い教訓になることを願っている。
  • メンテナーとして、貢献者やユーザーがしつこく要求してくるほど、その要求を受け入れる可能性は低くなると強調している。

  • Joe Cooper の意見を引用し、プロジェクトメンテナーへの圧力に関する彼の見解を共有している。

  • 隠されたバックドアのバイナリコードが、バイナリのテスト入力ファイルの中に巧妙に隠されており、これらのファイルの大半は手作業でヘックスエディタを使って作られているため、ファイル自体が最高の「ソースコード」だと説明している。

    • これは、オープンソースソフトウェアでサポートされていないハードウェア向けのバイナリブロブを擁護する人々への警告となる。
    • ソース形式で再現可能であるべきであり、そうでなければ存在すべきではないと主張している.