Проверьте подпись пакета OSX перед загрузкой

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

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

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

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


person harningt    schedule 21.07.2009    source источник


Ответы (1)


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

person Michael Aaron Safyan    schedule 21.07.2009
comment
dlopen будет выполнять функции инициализации в библиотеке при загрузке... поэтому код будет выполняться... - person harningt; 22.07.2009
comment
Верно. Хороший вопрос... Возможно, если бы библиотека загружалась отдельным процессом, работающим с сильно ограниченным набором разрешений, а другой процесс взаимодействовал бы с библиотекой через IPC... Код мог бы выполняться, но не мог бы нанести большой ущерб. - person Michael Aaron Safyan; 23.07.2009