如何确认我的 Ubuntu 中的二进制文件来自它应该来自的源代码?

mar*_*111 25 security

像 99% 的用户一样,我从现成的二进制文件安装 Ubuntu。

我如何验证自己这些二进制文件实际上来自 Ubuntu 的原始源代码?

最好确认 NSA/某人没有与 Ubuntu 或 Linode(我的 VPS 提供商)合作来处理二进制文件。如果我们可以验证二进制文件,他们也不太可能首先尝试这样做,因为很容易在上面调用它们。

SPR*_*BRN 36

You can download the sourcecode and compile it yourself. But wait - first you have to check that sourcecode, because if Canonical collaborated with the NSA, they probably have entered some code somewhere to allow for a keylogger or something that can be activated remotely.

So...

  1. after downloading the sourcecode,
  2. you have to check all code,
  3. and then compile it!

但是等等——你能相信编译器吗?

  • 但是你能相信你的硬件吗?也许您还应该从头开始构建您的计算机,这就是您遇到一些问题的地方...... (17认同)
  • *“你能信任编译器吗?”* 那是当你偏离正题并阅读问题[如何从头编译 C 编译器,然后从头编译 Unix/Linux](http://unix.stackexchange.com) /q/89897/2465)(和相关的答案)。 (15认同)
  • 但是等等 - 你能相信 askubuntu 没有被 NSA 过滤或完全控制以避免告诉你所有可能受到威胁的区域吗? (6认同)

fkr*_*iem 9

如果您不愿意接受“因为 Ubuntu 这么说”,那么您就不能。

  • 我想补充一点,您可以[尝试]通过比较校验和来验证特定系统上的二进制文件是否与 Ubuntu 原始二进制文件匹配。当然,在任何情况下都不容易从系统内部检测到正确的 rootkit。 (2认同)
  • 只有当您相信“原始 Ubuntu 二进制文件”没有被篡改时,这才有效。换句话说,如果你接受它们是好的,因为 Ubuntu 是这么说的。;) (2认同)

小智 5

Ubuntu 提供了在您自己的机器上编译软件包的便捷方法。但是,无法检查您下载的二进制包中的可执行文件是否是从该源代码中获得的。Ubuntu 使用的签名过程大大降低了第三方篡改软件包的风险,但您仍然必须相信在编译之前没有添加任何未在可下载源代码中反映的有害代码。

原因是要获得与编译包中完全相同的二进制文件非常困难,因为它们取决于精确的编译器版本、它的选项,并且可能还有一些路径或环境变量被编译到二进制文件中。因此,您在自己编译时将无法获得完全相同的二进制文件,这将“验证”下载的二进制文件。

实际上有一个小型研究社区正是围绕这个问题——如何使编译具有可重现性。

话虽如此,手动比较下载的二进制文件和自编译的二进制文件可以检测添加/修改的代码,因此提供二进制文件和源代码的人在二进制文件中隐藏某些内容是有风险的,因为这可以被检测到。

但是,正如已经提到的那样,还有信任编译器的问题......