gcc não aplica relro parcial

gcc não aplica relro parcial

Tentei compilar o código-fonte C para aplicar o Partial RELRO, habilitando o PIE e desabilitando o NX, mas falhei.

Passos para reproduzir

eu useiverificaçãoscript para verificar a opção RELRO do binário.

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

Qual é o comportamento correto esperado?

Eu esperava que o resultado do checksec para o binário compilado com a opção RELRO parcial fosse exibidoRELRO Parciale existem algumas diferenças entre os resultados do objdump.

Eu perdi alguma coisa? Se você conhece uma solução para obter informações binárias RELRO parciais ou relacionadas, por favor me avise.

Responder1

Parece que se você forçar a proteção PIE (como padrão no Ubuntu 18.04), ela também forçará o RELRO completo. Então defina -no-piea opção em vez de-fPIE -pie

informação relacionada