GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo probar si un binario de Linux se compiló como código independiente de la posición?

Puedes usar el perl script contenido en el hardening-check paquete, disponible en Fedora y Debian (como hardening-includes ). Lea esta página wiki de Debian para obtener detalles sobre qué indicadores de compilación se verifican. Es específico de Debian, pero la teoría también se aplica a Red Hat.

Ejemplo:

$ hardening-check $(which sshd)
/usr/sbin/sshd:
 Position Independent Executable: yes
 Stack protected: yes
 Fortify Source functions: yes (some protected functions found)
 Read-only relocations: yes
 Immediate binding: yes

Simplemente usa file en el binario:

$ file ./pie-off
./pie-off: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=0dc3858e9f0334060bfebcbe3e854909191d8bdc, not stripped
$ file ./pie-on
./pie-on: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=962235df5bd188e1ec48c151ff61b6435d395f89, not stripped

Tenga en cuenta el tipo diferente impreso después de la información LSB.


Usé readelf --relocs para probar si la biblioteca estática o dinámica es PIC en x86-64 de la siguiente manera:

$ readelf --relocs /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a |\
      awk '$3~/^R_/ && $5!~/^\.debug/{print $3}' |sort -u
R_X86_64_32
R_X86_64_32S
R_X86_64_64
R_X86_64_DTPOFF32
R_X86_64_GOTPCREL
R_X86_64_PC32
R_X86_64_PLT32
R_X86_64_TLSLD
R_X86_64_TPOFF32

Vemos aquí R_X86_64_32 y R_X86_64_32S . Esto significa que el código no es independiente de la posición. Cuando reconstruyo una biblioteca con -fPIC obtengo:

$ readelf --relocs libstdc++.a |\
      awk '$3~/^R_/ && $5!~/^\.debug/{print $3}' |sort -u
R_X86_64_64
R_X86_64_DTPOFF32
R_X86_64_GOTPCREL
R_X86_64_PC32
R_X86_64_PLT32
R_X86_64_TLSGD
R_X86_64_TLSLD

Este método probablemente funcione para ejecutables, pero no lo he usado de esa manera.


Linux
  1. Cómo Linux preparó una escuela para una pandemia

  2. Cómo aprender Linux es nuestro lenguaje de amor

  3. Cómo instalar y probar Ansible en Linux

  4. Linux:¿cómo probar si un binario de Linux se compiló como código independiente de la posición?

  5. Cómo ordenar archivos en Linux usando el comando Ordenar

Cómo juego Tetris en el mainframe

Cómo ha crecido el escritorio de Linux

Cómo usar operadores de prueba de archivos Bash en Linux

Cómo probar la velocidad de carga del sitio web en Linux

Cómo ejecutar un paquete .run o .bin en Linux

¿Cómo puedo perfilar el código C++ que se ejecuta en Linux?