2016-11-28 52 views
3

我想将Linux中的二进制文件的执行限制为仅由我自己编译的二进制文件。假设我的系统具有4.8.4版本的gcc,我想允许执行仅由我的系统安装的gcc编译的ELF二进制文件。任何由相同版本4.8.4编译的ELF都不应该在我的系统上执行。由特定编译器创建的二进制文件的执行

.comment部分包含用于编译ELF的编译器的版本和名称。如果是,我们可以使用这些信息吗? 任何想法和建议,非常感谢

回答

0

我想限制在Linux中的二进制文件的执行只有我自己编译的。

假设你成功了。你认识到你的外壳,你的gcc,你的ls都将立即停止工作(除非你已经建立它们全部自己之前打开限制)。

但假设你已经构建了整个系统,包括编译器,汇编器和链接器。在这种情况下,您需要修改链接器和内核,以便链接器签署它所链接的二进制文件,并且您的内核将验证是否存在有效签名,并且如果签名无效,则拒绝运行该二进制文件。您可以阅读更多关于代码签名here的信息。

.comment部分包含用于编译ELF的编译器的版本和名称。

通常情况下,然而,将含有任意内容的.comment部分添加到已链接的可执行文件中并不重要,因此,您不能将限制条件限制在.comment的内容上(除非您希望将限制忽略)。

objcopy可以在不改变链接器的情况下缓解我的生活吗?

是的。

我相信你正在以错误的方式思考你的问题(在思考解决方案的实质之前考虑力学)。

假设你想要做的代码签名,你需要生成每个二进制签名,然后:

  1. 有一些手段为内核,以确认签名是有效的,
  2. 将签名附加到二进制文件。这可能与foo.signaturefoo所在的目录相同,只要您希望运行每个二进制文件。或者,您可以使用objcpy来制作二进制文件的签名部分(如果您移动二进制文件,则更方便)。
+0

是的我在读完一些东西后也会这么想。 objcopy可以在不改变链接器的情况下缓解我的生活吗?比方说,我可以添加一些部分的字符串和调整内核(在哪里和多少?)匹配字符串执行之前 – shami

+0

@shami我已经更新了答案。 –

相关问题