prelink - prelink

редактировать

В computing, prebinding, также называемое prelinking, метод оптимизации времени загрузки приложения путем разрешения символов библиотеки перед запуском.

Содержание
  • 1 Фон
  • 2 Mac OS
    • 2.1 Mac OS X
  • 3 Linux
    • 3.1 рандомизация предварительной ссылки
  • 4 Проблемы
  • 5 См. Также
  • 6 Ссылки
  • 7 Дополнительная литература
  • 8 Внешние ссылки
Предпосылки

Большинство компьютерных программ состоят из кода, для выполнения которого требуются внешние разделяемые библиотеки. Эти библиотеки обычно интегрируются с программой во время выполнения с помощью загрузчика в процессе, называемом динамическое связывание.

. Хотя динамическое связывание имеет преимущества в размере кода и управлении, есть и недостатки. Каждый раз, когда программа запускается, загрузчику необходимо разрешить (найти) соответствующие библиотеки. Поскольку библиотеки перемещаются в памяти, разрешение снижается по производительности. Этот штраф увеличивается для каждой дополнительной библиотеки, требующей разрешения.

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

Mac OS

Mac OS хранит исполняемые файлы в формате файла Mach-O .

Mac OS X

Mac OS X выполняет предварительную привязку этого на этапе «Оптимизация» установки системного программного обеспечения или определенных приложений.

Предварительная привязка менялась несколько раз в серии Mac OS X. До версии 10.2 предварительная привязка выполнялась только во время процедуры установки (вышеупомянутый этап «Оптимизация»). С 10.2 по 10.3 ОС проверяла предварительную привязку во время запуска для приложений, и при первом запуске приложения она была предварительно привязана, что ускоряло последующие запуски. Это также можно было запустить вручную, что и делали некоторые установки на уровне ОС. В 10.4 предварительно были привязаны только библиотеки ОС. В 10.5 и более поздних версиях Apple заменила предварительное связывание механизмом dyld shared cache, который обеспечил лучшую производительность ОС.

Linux

В Linux предварительное связывание выполняется с помощью программы prelink, free программы, написанной из Red Hat для ELF двоичных файлов.

Результаты производительности были неоднозначными, но, похоже, это помогает системам с большим количеством библиотек, таких как KDE.

предварительная ссылка randomization

prelink будет (при запуске с опцией "-R") случайным образом выбрать базу адресов, по которой загружаются библиотеки. Это затрудняет выполнение атаки return-to-libc на систему, поскольку используемые адреса уникальны для этой системы. Причина, по которой предварительная ссылка делает это, заключается в том, что средства ядра, обеспечивающие рандомизацию макета адресного пространства (ASLR) для библиотек, не могут использоваться в сочетании с предварительной ссылкой без нарушения цели предварительной ссылки и принуждения динамического компоновщика выполнять перемещения во время загрузки программы.

Как указано, предварительная ссылка и рандомизация адресов библиотеки для каждого процесса не могут использоваться вместе. Чтобы избежать полного удаления этого улучшения безопасности, prelink предоставляет собственную рандомизацию; однако это не помогает утечке общей информации, вызванной prelink. Злоумышленники, имеющие возможность читать определенные произвольные файлы в целевой системе, могут обнаружить, где загружены библиотеки в привилегированных демонах; часто бывает достаточно libc, поскольку это наиболее распространенная библиотека, используемая в атаках с возвратом к libc..

Читая файл разделяемой библиотеки, такой как libc, злоумышленник с локальным доступом может обнаружить адрес загрузки libc в каждом другом приложение в системе. Поскольку большинство программ ссылаются на libc, файл библиотеки libc всегда должен быть доступен для чтения; любой злоумышленник с локальным доступом может собирать информацию об адресном пространстве процессов с более высокими привилегиями. Локальный доступ обычно может быть получен с помощью учетных записей оболочки или учетных записей веб-сервера, которые позволяют использовать сценарии CGI, которые могут читать и выводить любой файл в системе. Уязвимости, связанные с обходом каталогов, могут использоваться злоумышленниками без учетных записей, если доступны уязвимости сценария CGI.

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

Якуб Елинек указывает, что независимые от позиции исполняемые файлы (PIE) игнорируют предварительную ссылку на Red Hat Enterprise Linux и Fedora, и рекомендует SUID программы должны быть построены PIE для обеспечения более безопасной среды.

Проблемы

Иногда предварительное связывание может вызывать проблемы с контрольной точкой приложения и перезапускать библиотеки, такие как , а также другие библиотеки (например, OpenMPI ), которые используют blcrвнутри. В частности, при установке контрольной точки программы на одном хосте и попытке перезапуска на другом хосте перезапущенная программа может завершиться с ошибкой segfault из-за различий в рандомизации адресов памяти библиотеки для конкретных хостов.

См. Также
Ссылки
Дополнительная литература
Внешние ссылки
Последняя правка сделана 2021-06-02 04:39:13
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте