如何确定Ubuntu中的二进制文件来自应来自的源代码?


25

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

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

最好验证NSA /某人是否未与Ubuntu或Linode(我的VPS提供程序)合作以破坏二进制文件。如果我们可以验证二进制文件,那么他们一开始也不大可能尝试此操作,因为在二进制文件上调用它们很容易。


您可以使用来查看源代码,也可以apt-get source使用它来编译自己的源代码。看到这个问题:askubuntu.com/questions/28372/…–
Wilf

4
可能有用:如何验证软件包安装的文件与原始文件匹配?(Debian,但应该足够接近才能适用于Ubuntu)
CVn 2014年

@MichaelKjörling我正在寻找该问题的版本...
Braiam 2014年

1
@Braiam我认为在这种特殊情况下,Debian / Ubuntu并没有太大的区别。什么确实有所作为是提问的目的; 上面链接的一个文件的主要目的是在安装后的某个时刻检测损坏的文件,而该文件的目的似乎是检测恶意替换或更改的文件或与声称的源代码不匹配的二进制文件。不同的问题,这就是为什么我仅将链接标记为“可能有用”。
2014年

3
有趣的是,我认为甚至Gentoo都完全避免了这个问题:在那里,您必须信任下载的源代码档案。随便使用加密签名;如果您不相信所签署的内容是真实的,而且应该是所声称的真实内容,那么几乎没有什么可以做的。
2014年

Answers:


36

您可以下载源代码并自己编译。但是,等等-首先,您必须检查该源代码,因为如果Canonical与NSA合作,他们可能已经在某个地方输入了一些代码以允许键盘记录程序或可以远程激活的代码。

所以...

  1. 下载源代码后,
  2. 您必须检查所有代码,
  3. 然后编译它!

但是,等等- 您可以信任编译器吗?


15
“您可以信任编译器吗?” 那就是您切线并阅读以下问题的方法:如何从头开始编译C编译器,然后从头开始编译Unix / Linux(以及相关的答案)。
CVn 2014年

17
但是您可以信任您的硬件吗?也许您也应该从头开始构建计算机,而这就是您遇到的一些问题……
Thomas

并且您可以信任运行您的VM的管理程序吗?
Fernando Correia 2014年

1
我认为在不同作者的一些类似编译器上编译源代码并检查输出是否有差异时,没有任何用处。但是,您怎么知道作者在别名下并不是真正的同一个实体?或更可能的是,如果所有这些编译器都有一个共同的腐败祖先,该怎么办?无论如何,这些都不会帮助硬件信任问题。
Keen 2014年

6
但是,等等-您能相信Askubuntu并未被NSA过滤或完全控制,从而避免告诉您所有可能受到威胁的区域吗?
TheZ 2014年

9

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


2
我要补充一下,您可以通过比较校验和来[尝试]验证特定系统上的二进制文件是否与Ubuntu原始二进制文件匹配。当然,在任何情况下都很难从系统内部检测到正确的rootkit。
Peteris 2014年

2
仅当您相信“原始Ubuntu二进制文件”未被篡改时,该方法才有效。换句话说,如果您接受它们是好的,因为Ubuntu这样说。;)
fkraiem 2014年

5

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

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

实际上,恰好有一个小型研究社区围绕着这个问题-如何使编译可再现。

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

但是如上所述,还有一个信任编译器的问题。


4

在两台不同的计算机上创建完全相同的二进制文件是一个难题。TOR项目将此作为其构建的常规部分。有描述他们如何做到的。DebianFedora似乎有项目使这种发行成为可能,但它们仍处于早期阶段。它似乎并不像有在Ubuntu中所做的任何工作

要复制Ubuntu二进制包,您需要尽可能接近地复制它所创建的环境。首先,您首先需要了解在哪里以及如何编译此程序包。看起来好像不容易找到信息。


具体细节有哪些?
2014年

忽略我,与另一个帖子混淆:)
蒂姆

0

正在使用Ubuntu的MD5进行检查。如果您从文件中获得的MD5与Ubuntu发布的文件匹配,则没有人篡改过它们之间的二进制文件。


这不是OP的问题。他担心Ubuntu分发的源代码与Ubuntu分发的二进制文件不同。换句话说,他们说“这就是源”,但是他们从中构建二进制文件的源实际上有一些额外的NSA引入的代码。他并不担心二进制文件在构建后会被篡改。
John Chrysostom 2014年

OP发表了文章:“我如何验证自己这些二进制文件实际上来自Ubuntu的原始源代码?” 答案就是那个问题。另一个是荒谬的,谁能知道Linux内核是否未被任何人(NSA或曾经有人?)轻易篡改过,下载代码,阅读并在自己满意的情况下自行编译。除此之外,我的回答是关于我在本评论开始时复制的问题。
YoMismo

您尚未回答所引用的问题。仅使用MD5,他就可以验证计算机上的二进制文件与服务器上的二进制文件匹配。他们不允许他验证他下载的二进制文件是从Ubuntu提供的源代码编译而来的。现在,我同意由于您(和其他人)所说的原因,他的问题很荒谬。但这是他的问题。
John Chrysostom 2014年

0

这是一项艰巨的工作,我认为这里的信任比这项复杂的工作要好。但是问题你能相信吗?

由于开放源代码软件为用户提供了许多更改代码的自由,因此您不能信任任何人。

让我们为此目的创建一个方案,我想检查一下Ubuntu == source code,等等为什么不尝试将软件包与源进行比较?

  1. 从源代码为Ubuntu构建二进制软件包。
  2. 将自建二进制包与发行版发布的二进制包进行了比较。
  3. 使用apt-get -b source下载源。

但是对我来说,比较好,由于时间戳,环境不同,比较结果会稍有不同,但这是否证明不是源代码呢!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.