2016-11-28 1 views
3

Я хочу ограничить выполнение двоичных файлов в Linux только теми, которые были скомпилированы мной. Допустим, моя система имеет gcc с версией 4.8.4, я хочу разрешить выполнение двоичных файлов ELF, которые скомпилированы gcc только в моей системе. Любой ELF, который даже скомпилирован той же версией 4.8.4, не должен выполняться в моей системе.Выполнение двоичных файлов, созданных конкретным компилятором

.comment раздел содержит версию и имя компилятора, используемого для компиляции ELF. Можем ли мы использовать эту информацию, если да, как? Любой идея и предложение очень ценятся

ответ

0

Я хочу, чтобы ограничить выполнение двоичных файлов в Linux, для тех, кто только составитель сам.

Предположим, что вам это удалось. Вы do понимаете, что ваша раковина, ваш gcc, ваш ls все сразу прекратит работать (если вы не построили их самостоятельно до, чтобы включить ограничение).

Но предположим, что вы создали всю систему, включая компилятор, ассемблер и компоновщик. В этом случае вы захотите изменить свой компоновщик и ваше ядро ​​таким образом, чтобы компоновщик подписал ссылки, которые он связывает, и ваше ядро ​​проверяет наличие действительной сигнатуры и отказывается запускать двоичный файл, если подпись недопустима. Вы можете узнать больше о подписании кода here.

.comment раздел содержит версию и имя компилятора, используемого для компиляции ELF.

Обычно он делает. Однако тривиально добавить раздел .comment с произвольным содержимым в уже связанный исполняемый файл, поэтому вы не можете основывать свое ограничение на содержимое .comment (если вы не хотите, чтобы ваше ограничение было тривиальным для обхода).

Может ли objcopy облегчить мою жизнь без смены компоновщика?

Да.

Я считаю, что вы неправильно думаете о своей проблеме (думая о механике, прежде чем думать о сути вашего решения).

Предполагая, что вы хотите сделать, подписание кода, вам нужно создать подпись для каждого двоичного файла, а затем:

  1. Есть какое-то средство для ядра, чтобы убедиться, что подпись действительна, и
  2. Прикрепите подпись к двоичной. Это может быть так же просто, как наличие foo.signature в том же каталоге, что и foo для каждого бинарного файла, который вы хотите запустить. Или вы можете использовать objcpy, чтобы сделать часть подписи самого двоичного файла (более удобно, если вы перемещаете свои двоичные файлы).
+0

да я тоже думаю такой же после некоторого чтения. может objcopy облегчить мою жизнь, не меняя линкер? Допустим, я могу добавить некоторый раздел с некоторой строкой и настроить ядро ​​(где и сколько?), Чтобы соответствовать строке перед выполнением. – shami

+0

@shami Я обновил ответ. –

Смежные вопросы