11 ポイント 投稿者 GN⁺ 2024-03-30 | 8件のコメント | WhatsAppで共有
  • Debian sid のインストールで、liblzma(xz パッケージの一部)に関連するいくつかの異常な症状(SSH ログイン時の CPU 使用率上昇、valgrind エラー)が観測された
  • 問題の原因として、xz の上流リポジトリと tarball がバックドアに感染していたことが判明した。バックドアの一部は配布された tarball にのみ存在する
  • tarball に含まれるスクリプトは configure の最後で実行され、特定の条件が満たされると $builddir/src/liblzma/Makefile を変更して悪意あるコードを挿入する。

リポジトリ内のバックドア

  • バックドアの主要部分は、リポジトリ内の tests/files ディレクトリに暗号化された形で存在する。
  • これらのファイルは 5.6.0 バージョンのテストでは使用されておらず、5.6.1 バージョンではバックドアによる valgrind エラーとクラッシュを修正する試みがあった。

影響を受けるシステム

  • バックドアスクリプトは configure 後に最初に呼び出され、特定の条件(例: x86-64 Linux システム、gcc および GNU リンカの使用、Debian または RPM パッケージのビルド中)でのみビルドプロセスを改変する。

OpenSSH サーバーへの影響

  • バックドアが導入された liblzma を使用すると、SSH 経由のログインが遅くなる。
  • OpenSSH は直接的には liblzma を使用しないが、Debian を含むいくつかのディストリビューションでは systemd 通知をサポートするために OpenSSH にパッチを適用しており、libsystemd は lzma に依存している。

注入されたコードの分析

  • セキュリティ研究者やリバースエンジニアリングの専門家ではない観察者の視点から分析している。
  • バックドアは ifunc resolver を通じて実行をフックし、sshd の初期化中にシンボルを解決して RSA_public_decrypt シンボルを自身のコードに変更する。

sshd への影響

  • RSA_public_decrypt@....plt がバックドアコードを指すように変更され、公開鍵ログイン中にバックドアコードが呼び出される。
  • これにより、認証の回避やリモートコード実行が可能になると推定される。

バグ報告

  • 上流リポジトリの関与が疑われたため、バグは報告されなかった。
  • Red Hat はこの問題に CVE-2024-3094 を割り当てた。

脆弱なインストールの検出

  • システムの ssh バイナリが脆弱かどうかを検出するスクリプトが提供されている。

8件のコメント

 
[このコメントは非表示になっています。]
 
depth221 2024-03-30

xzバックドアについて私が知っていることのすべて
このバックドアを発見した Andres Freund が書いた記事です。

 
edunga1 2024-04-01

非常に計画的に動いていたのが驚きですね;; 経緯がドラマみたいです。

 
carnoxen 2024-03-30

八つ裂きにしても安いくらいです

 
roxie 2024-03-31

なぜですか?

 
keepworking 2024-04-01

オープンソースに意図的にバックドアを仕込んだ行為ですからね……その過程で、ひそかに世論工作のようなことまでしていましたし。
以前にも Linux カーネルに悪意を持って脆弱性を入れた事例がありましたが、やりきれない気持ちになります。

 
roxie 2024-04-01

ああ、ようやくそのニュアンスを理解できた気がします。ありがとうございます。

 
GN⁺ 2024-03-30
Hacker Newsの意見
  • 関連リンク:

  • 要約:

    • バックドア作成者が Fedora 40 と 41 に xz 5.6.x を追加しようとして、数週間にわたりやり取りしていた。このバックドアによって発生した valgrind の問題を解決するために協力していたが、最終的にバックドアが問題の原因だったことが判明した。公開禁止期間が誤って破られたあと、問題を緊急に解決する必要があった。
    • バックドア作成者の一人が、偶然の発見を防ぐため、oss-fuzz でバックドアに依存する機能を直接無効化していた。
    • バックドア作成者が xz-java プロジェクトに SECURITY.md ファイルを追加していた。そこには、セキュリティ脆弱性を見つけても公開せず、非公開で報告するよう求める指針が含まれている。別の見方をすれば、作成者が自分のエクスプロイトを調整し、標的を利用する時間を稼ぐ意図だったとも解釈できる。
    • openssh は直接 liblzma を使っていないが、debian と複数のディストリビューションが systemd 通知サポートのために openssh にパッチを適用している。このため libsystemd が liblzma に依存することになり、openssh のようなセキュリティ上重要なデーモンに追加の依存関係が生まれ、サプライチェーン攻撃のリスクが高まっている。
    • パニック状態の人のための主な確認事項:
      • 最近の liblzma5 のバージョン(5.6.0 または 5.6.1)を使用している場合。これはここ1か月ほどの間に追加されたもの。
      • debian または RPM ベースの Linux ディストリビューションを使用している場合。これはリバースエンジニアリングを難しくしようとする試みのように見える。
      • systemd 上で OpenSSH の sshd を実行している場合。一部のディストリビューションでパッチが当てられた OpenSSH は、ロギング機能のために libsystemd を使っており、これが脆弱な liblzma5 を引き込む。
      • Debian testing はすでに 5.6.1+really5.4.5-1 というバージョンになっており、これは実際には旧バージョンの 5.4 を新しいバージョンとして再パッケージしたもの。
    • GNU autoconf で何か怪しいものを隠したいなら、curl | sh スクリプトではなくそこに隠すだろう。今回の事件の配布担当者は以前から配布を担っており、2022年からコミットを始めている。実際の変更を多く含むコミットがあり、libarchive のような関連プロジェクトにもコミットしている。バックドアを挿入するには多大な労力が必要だった。
    • 数年前に Go ライブラリを書いて xz の C コードをラップし、Go から xz 圧縮を行えるようにした。約1週間前、そのリポジトリに 5.6.1 へアップグレードする最初の PR が届いた。これは上流の GitHub アカウントとは別のものだった。
    • セキュリティ研究者やリバースエンジニアではない貢献者が、技術的な文章を書くことを好んでいる。彼の発見を要約したレポートは、共有に消極的な主流のデバッグ界隈の外にいる貢献者たちにとって、優れたテンプレートだと見なされている。
    • xz(1) に対するさらに巧妙なバックドアの試みを想像すると、これほど早く見つからなかっただろう。xz はほとんど至る所で使われている。特定のビルドプロセスの基盤として使われる .tar.xz ソフトウェア tarball のようなファイルのごく一部だけを選択的に改変する xz を作ることもできる。ソースコード tarball ではなく、事前コンパイル済みバイナリを配布する tarball を標的にするものだ。