Я попытался скомпилировать исходный код на языке C, чтобы применить частичный RELRO, включив PIE и отключив NX, но это не удалось.
Действия по воспроизведению
я использовалчексекскрипт для проверки опции RELRO двоичного файла.
wisedier@ubuntu:~$ gcc --version
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
wisedier@ubuntu:~$ uname -a
Linux ubuntu 4.15.0-46-generic #49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
wisedier@ubuntu:~$ cat test.c
void main(){}
wisedier@ubuntu:~$ gcc -fPIE -pie -z execstack -Wl,-z,relro -o partial test.c
wisedier@ubuntu:~$ gcc -fPIE -pie -z execstack -Wl,-z,relro -Wl,-z,now -o full test.c
wisedier@ubuntu:~$ objdump -h full > full.log
wisedier@ubuntu:~$ objdump -h partial > partial.log
wisedier@ubuntu:~$ diff full.log partial.log
2c2
< full: file format elf64-x86-64
---
> partial: file format elf64-x86-64
wisedier@ubuntu:~$ checksec --file full
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
Full RELRO No canary found NX disabled PIE enabled No RPATH No RUNPATH 66 Symbols No 0 0 full
wisedier@ubuntu:~$ checksec --file partial
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
Full RELRO No canary found NX disabled PIE enabled No RPATH No RUNPATH 66 Symbols No 0 0 partial
Каково ожидаемое правильное поведение?
Я ожидал, что результат checksec для двоичного файла, скомпилированного с частичной опцией RELRO, покажетЧастичный RELROи есть некоторые различия между результатами objdump.
Я что-то пропустил? Если вы знаете решение для получения частичного двоичного файла RELRO или связанной с ним информации, пожалуйста, дайте мне знать.
решение1
Кажется, если принудительно включить защиту PIE (по умолчанию в Ubuntu 18.04), то она также принудительно включит полный RELRO. Так что установите -no-pie
опцию вместо-fPIE -pie