GNU strip を悪用した Trusting-Trust 攻撃が Linux ディストリビューション全体を侵害
Trusting-Trust Attack against an Entire Linux Distribution
Ken Thompson の trusting-trust 攻撃は、コンパイラが生成するプログラムにバックドアを仕込み、自身の再ビルドにもそのバックドアを繁殖させるという、コンパイラ特有の脅威と広く考えられてきた。しかし、この攻撃はコンパイラに限らない。本研究では、ソースコードを検査も生成もしない一般的なビルドユーティリティである GNU strip に対して、完全な trusting-trust 攻撃を構築した。ELF ファイルの操作のみを用いて、NixOS Linux ディストリビューションのブートストラップ過程で、単一の改ざんされた strip がペイロードを注入し、それが世代を超えて伝播して最終的な標準環境にまで生き残ることを実証した。実際の nixpkgs リビジョンでは、この攻撃は完全なグラフィカルインストーラをエラーなく構築し、そのほぼすべてのバイナリにバックドアを仕込み、パッケージの任意の悪意ある動作を可能にした。
コンパイラに特有の脅威と広く考えられてきた trusting-trust 攻撃は、実際にはコンパイラに限らない。
HNでの議論
58- Jach
Wheeler の研究がセクション 7.2 で簡単に言及されているのは良いことだ。なぜなら、それは多くの人が知らないと思われる trusting-trust 攻撃に対する一般的な対策を提供するからだ。彼らはそれがこのケースには当てはまらないとして退けているが、私はその議論にあまり納得していない。確かに、コンパイラを置き換えて同じ環境で実行するだけでは役に立たないが、私の記憶が正しければ、Wheeler のアプローチは環境自体を多様化のパラメータとして扱う。つまり、コンパイラだけでなく、ホストや OS、さらにはハードウェアも対象となる。したがって、それを strip に拡張するのは簡単だ。悪意のあるディストリビューションのツールチェーンで binutils をソースからビルドし、ディストリビューションの strip で修正し、これをビルド A と呼ぶ。次に、多様な環境で binutils をソースからビルドする。これには多様なストリッパーによる修正も含まれ、これを B と呼ぶ。そして、同じ多様な環境で再ビルドを行うが、B のツールチェーンとストリッパーを使用し、これを C と呼び、C と A を比較する。不一致があれば攻撃を暴くことができる。
- colinsane
参考までに、x86_64-linux と i686-linux の nixpkgs ブートストラップシードは、https://github.com/NixOS/nixpkgs/pull/479322 により、25 個のバンドルされたバイナリではなく 181 バイトです。公開日時点では、この記事は aarch64-linux や riscv64-linux などの非 x86 プラットフォームに適用されるでしょう。もしこれを懸念していて x86 を使用していないなら、他のプラットフォームにも拡張することをお勧めします! 時間をかければ、musl 自体がサポートするすべての Linux プラットフォームに一般化できると信じています。
- fjfaase
参考までに、私は小さなシードから始まる live-bootstrap プロジェクトをレビューしました。stage0 で実行されるすべてのプロセスを示す T ダイアグラムについては、[1] を参照してください。私はより少ないステップで済むが、少し大きめのシードから始まるソリューションに取り組みました(ただし、ドキュメントはもう少し良いかもしれません)。[2] と [3] に T ダイアグラムがあります。x86_64 と arm64 のターゲットもあります。(RISC-V の作業も開始されています。)
[1] https://fransfaase.github.io/Emulator/tdiagram.html
[2] https://fransfaase.github.io/MES-replacement/
[3] https://fransfaase.github.io/MES-replacement/Tdiagram.html
- hardwaresofton
ちなみに、Guix には完全なソースブートストラップがあります:
https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-...
- rep_lodsb
これは基本的に ELF 実行可能ファイルに感染するウイルスであり、目新しいものは何もない。