GNU/Linux >> Tutoriels Linux >  >> Linux

Comment tester si un binaire Linux a été compilé en tant que code indépendant de la position ?

Vous pouvez utiliser le perl script contenu dans le hardening-check package, disponible dans Fedora et Debian (en tant que hardening-includes ). Lisez cette page du wiki Debian pour plus de détails sur les drapeaux de compilation vérifiés. C'est spécifique à Debian, mais la théorie s'applique également à Red Hat.

Exemple :

$ 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

Utilisez simplement file sur le binaire :

$ 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

Notez le type différent imprimé après les informations LSB.


J'ai utilisé readelf --relocs pour tester si la bibliothèque statique ou dynamique est PIC sur x86-64 de la manière suivante :

$ 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

On voit ici R_X86_64_32 et R_X86_64_32S . Cela signifie que le code n'est pas indépendant de la position. Lorsque je reconstruis une bibliothèque avec -fPIC j'obtiens :

$ 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

Cette méthode peut probablement fonctionner pour les exécutables, mais je ne l'ai pas utilisée de cette façon.


Linux
  1. Comment installer et tester Ansible sur Linux

  2. Comment tester un paquet sans l'installer sous Linux

  3. Linux - Comment tester si un binaire Linux a été compilé en tant que code indépendant de la position ?

  4. Linux - Comment tester si un périphérique bloc est en lecture seule depuis /sys ou /proc ?

  5. Comment trier des fichiers sous Linux à l'aide de la commande Sort

Comment je joue à Tetris sur le mainframe

Comment le bureau Linux s'est développé

Comment utiliser les opérateurs de test de fichiers Bash sous Linux

Comment exécuter un package .run ou .bin sous Linux

Comment puis-je profiler du code C++ exécuté sous Linux ?

Comment comparer des fichiers binaires sous Linux ?