Relro
Reading time: 3 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Relro
RELRO означає Relocation Read-Only, і це функція безпеки, що використовується в бінарних файлах для зменшення ризиків, пов'язаних з переписуванням GOT (Global Offset Table). Існує два типи захисту RELRO: (1) Частковий RELRO і (2) Повний RELRO. Обидва вони реорганізовують GOT і BSS з ELF файлів, але з різними результатами та наслідками. Конкретно, вони розміщують секцію GOT перед BSS. Тобто, GOT знаходиться за нижчими адресами, ніж BSS, що унеможливлює переписування записів GOT шляхом переповнення змінних у BSS (пам'ять записується з нижчих адрес до вищих).
Давайте розглянемо концепцію в її двох різних типах для ясності.
Частковий RELRO
Частковий RELRO використовує простіший підхід для підвищення безпеки без значного впливу на продуктивність бінарного файлу. Частковий RELRO робить .got тільки для читання (не-PLT частина секції GOT). Майте на увазі, що решта секції (як .got.plt) все ще може бути записуваною і, отже, підлягає атакам. Це не запобігає зловживанню GOT з вразливостей довільного запису.
Примітка: За замовчуванням, GCC компілює бінарні файли з Частковим RELRO.
Повний RELRO
Повний RELRO підвищує захист, роблячи всю GOT (як .got, так і .got.plt) та секцію .fini_array повністю тільки для читання. Як тільки бінарний файл запускається, всі адреси функцій вирішуються і завантажуються в GOT, після чого GOT позначається як тільки для читання, ефективно запобігаючи будь-яким змінам під час виконання.
Однак, компроміс з Повним RELRO полягає в продуктивності та часі запуску. Оскільки потрібно вирішити всі динамічні символи під час запуску перед тим, як позначити GOT як тільки для читання, бінарні файли з увімкненим Повним RELRO можуть мати довший час завантаження. Це додаткове навантаження під час запуску є причиною, чому Повний RELRO не увімкнено за замовчуванням у всіх бінарних файлах.
Можна перевірити, чи увімкнено Повний RELRO у бінарному файлі за допомогою:
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
Bypass
Якщо увімкнено Full RELRO, єдиний спосіб обійти його - знайти інший спосіб, який не потребує запису в таблицю GOT для отримання довільного виконання.
Зверніть увагу, що GOT LIBC зазвичай є Partial RELRO, тому його можна змінити за допомогою довільного запису. Більше інформації в Targetting libc GOT entries.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.