Sie können den perl
verwenden Skript, das in hardening-check
enthalten ist Paket, verfügbar in Fedora und Debian (als hardening-includes
). Lesen Sie diese Debian-Wiki-Seite für Details darüber, welche Kompilier-Flags überprüft werden. Es ist Debian-spezifisch, aber die Theorie gilt auch für Red Hat.
Beispiel:
$ 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
Verwenden Sie einfach file
auf der Binärdatei:
$ 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
Beachten Sie den unterschiedlichen Typ, der nach den LSB-Informationen gedruckt wird.
Ich habe readelf --relocs
verwendet Um zu testen, ob die statische oder dynamische Bibliothek PIC auf x86-64 ist, gehen Sie folgendermaßen vor:
$ 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
Wir sehen hier R_X86_64_32
und R_X86_64_32S
. Das bedeutet, dass der Code nicht positionsunabhängig ist. Wenn ich eine Bibliothek mit -fPIC neu aufbaue, erhalte ich:
$ 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
Diese Methode funktioniert wahrscheinlich für ausführbare Dateien, aber ich habe sie nicht auf diese Weise verwendet.