Trusting-Trust攻击:strip工具如何渗透整个Linux发行版

Trusting-Trust Attack against an Entire Linux Distribution

Ken Thompson的Trusting-Trust攻击曾被视为编译器专属威胁,但这项新研究证明,普通构建工具同样能引发连锁后门。研究人员利用GNU strip工具,在NixOS的构建种子中植入篡改版本,使恶意载荷从一代strip传递到下一代,最终渗透至整个图形化安装程序。攻击无需触碰源代码,仅通过操作ELF文件即可实现,几乎为所有二进制文件植入后门。这一发现揭示了构建工具链中潜在的巨大风险,挑战了传统安全假设。

我们展示了一个完整的Trusting-Trust攻击,围绕GNU strip构建,仅通过操作已完成的ELF文件,无需检查或生成任何源代码。
  1. Jach

    很高兴他们在 7.2 节中简要提到了 Wheeler 的工作,因为这提供了一个针对 trusting-trust 攻击的通用对策,而很多人似乎并不知道这一点。他们声称这种方法不适用于此案例,但我对他们的论点并不完全信服。确实,如果你只替换编译器并在同一环境中运行,那确实没用;但据我所记,Wheeler 的方法是将环境本身视为一个需要多样化的参数。所以不仅仅是编译器,还包括主机/操作系统,甚至硬件。因此,将其扩展到 strip 工具是微不足道的。用你被污染的发行版工具链从源码构建 binutils,再用你发行版的 strip 进行修复,称这个构建为 A。然后在多样化的环境中从源码构建 binutils,该环境包括使用多样化的 strip 进行修复,称这个构建为 B。接着在同样的多样化环境中进行重建,但使用 B 的工具链和 strip,称这个构建为 C,然后比较 C 和 A。如果不匹配,攻击即告失败。

  2. colinsane

    顺便提一下,x86_64-linux 和 i686-linux 的 nixpkgs 引导种子不再是 25 个捆绑的二进制文件,而是 181 字节,参见 https://github.com/NixOS/nixpkgs/pull/479322。在本文发布时,该文章仅适用于非 x86 平台,如 aarch64-linux、risvc64-linux 等。

    如果你对此感到担忧且不在 x86 平台上,我鼓励你将其扩展到其他平台!我相信,随着时间的推移,这可以推广到 musl 本身支持的每一个 Linux 平台。

  3. fjfaase

    顺便提一下,我审查了从一个小种子开始的 live-bootstrap 项目。若要查看显示 stage0 中执行的所有进程的 T 图,请参见 [1]。

    我也做了一项解决方案的工作,它需要的步骤更少,但起始种子稍大一些(不过文档可能写得更好),关于 T 图请参见 [2] 和 [3]。同时也支持 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

  4. hardwaresofton

    顺便说一句,Guix 拥有完整的源码引导:

    https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-...

  5. rep_lodsb

    这基本上就是一个感染 ELF 可执行文件的病毒,没什么新鲜的。

同日更多故事

2026-09-07