gcc no aplica relro parcial

gcc no aplica relro parcial

Intenté compilar el código fuente C para aplicar Partial RELRO, habilitando PIE y deshabilitando NX, pero fallé.

pasos para reproducir

solíachequesecscript para verificar la opción RELRO del binario.

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

¿Cuál es el comportamiento correcto esperado?

Esperaba que se mostrara el resultado de checksec para el binario compilado con la opción RELRO parcialRELRO parcialy existen algunas diferencias entre los resultados de objdump.

¿Me perdí algo? Si conoce una solución para obtener información binaria RELRO parcial o información relacionada, hágamelo saber.

Respuesta1

Parece que si fuerza la protección PIE (como la predeterminada en ubuntu 18.04), también fuerza el RELRO completo. Entonces configura -no-piela opción en lugar de-fPIE -pie

información relacionada