Предварительная ссылка
-
Основы предварительной привязки
- Предварительная привязка оптимизирует время загрузки приложений, преобразуя символы библиотек перед запуском.
- Программы состоят из кода, который требует внешних разделяемых библиотек, которые динамически компонуются во время выполнения.
- Динамическая компоновка имеет преимущества в размере кода, но имеет недостатки в производительности из-за необходимости разрешения библиотек.
-
Применение в Mac OS
- Mac OS хранит исполняемые файлы в формате Mach-O и выполняет предварительную привязку во время установки или оптимизации.
- В Mac OS X предварительная привязка менялась несколько раз, начиная с версии 10.2, ускоряя последующие запуски.
- В версии 10.4 были подключены только системные библиотеки, а в 10.5 и последующих версиях Apple заменила предварительную привязку общим кэшированием dyld.
-
Применение в Linux
- В Linux предварительная привязка выполняется с помощью программы prelink, которая ускоряет запуск систем с большим количеством библиотек.
- Результаты предварительной привязки в Linux неоднозначны, но она может быть полезна для систем с большим количеством библиотек, таких как KDE.
-
Предварительная рандомизация ссылок
- Prelink может рандомизировать адреса библиотек, затрудняя атаки с возвратом к libc.
- Рандомизация расположения адресного пространства (ASLR) для библиотек не может использоваться совместно с prelink без нарушения ее целей.
- Prelink предоставляет собственную рандомизацию, но это не предотвращает утечку информации.
-
Уязвимости и рекомендации
- Злоумышленники могут обнаружить адреса загрузки библиотек в привилегированных демонах, что может привести к утечке информации.
- Prelink часто выполняется периодически, что может привести к изменению адресов библиотек со временем.
- Рекомендуется использовать независимые от позиции исполняемые файлы (PIE) и встроенные в PIE сетевые программы и SUID для повышения безопасности.
-
Проблемы и рекомендации
- Предварительная привязка может вызывать проблемы с библиотеками checkpoint и restart, а также с другими библиотеками, использующими blcr.
- При установке контрольной точки на одном хосте и перезапуске на другом хосте могут возникать ошибки segfault из-за различий в рандомизации адресов.
-
Ссылки и дополнительные ресурсы
- В статье есть ссылки на руководства по администрированию Linux, официальные релизы Якуба Елинека и проект Yocto-перекрестная.