2009-07-21 3 views
2

Цель: загрузить .so/.bundle, которая была подтверждена для подписи (или проверки на произвольный алгоритм).Проверить подпись пакета OSX перед загрузкой

Я хочу, чтобы иметь возможность проверить .so/.bundle либо с помощью встроенных инструментов бинарных подписей OSX или какого-либо собственного алгоритм, а затем загрузить .so/.bundle с dlopen ...

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

Поскольку блокировки файловой системы являются рекомендательными в OSX, они не так полезны для этой цели.

ответ

1

Вы можете сохранить sha256sum файла * .so или * .dylib в подписи. После проверки сертификата вы можете скопировать * .so или * .dylib в случайное временное место, а затем проверить, что скопированная * .so или * .dylib имеет заданную контрольную сумму. Если да, то вы можете динамически загружать копию. Возможно, все еще может быть небольшое окно, чтобы перезаписать случайный временный файл, но я думаю, что он был бы совсем небольшим. Полагаю, вы могли бы перечитать контрольную сумму после вызова dlopen, но прежде, чем вы вызовете dlsym. Если контрольная сумма не соответствует, вы можете вызвать dlcose, чтобы выгрузить библиотеку, не выполняя никаких функций в ней.

+1

dlopen выполнит функции init в библиотеке при загрузке ... так что код будет выполнен ... – harningt

+0

Вправо. Хорошая точка ... Возможно, если библиотека была загружена отдельным процессом, работающим с ограниченным набором разрешений, а другой процесс взаимодействовал с библиотекой через IPC .... Код мог быть выполнен, но он не был бы способен нанести большой урон. –

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

  • Нет связанных вопросов^_^