BEZEICHNUNG
hardening-check - prüft Binärdateien auf Sicherheitshärtungsfunktionalitäten
ÜBERSICHT
hardening-check [Optionen] [ ELF …]
untersucht einen angegebenen Satz von ELF-Binärdateien und prüft auf mehrere Sicherheitshärtungsfunktionalitäten. Das Programm schlägt fehl, wenn sie nicht alle gefunden werden.
BESCHREIBUNG
Dieses
Hilfswerkzeug prüft eine angegebene Liste von
ELF-Binärdateien auf mehrere
Sicherheitshärtungsfunktionalitäten, die in ein
ausführbares Programm einkompiliert werden können.
Diese Funktionalitäten sind:
Positionsunabhängiges Programm
Dies zeigt an, dass das Programm so gebaut wurde ( PIE ), dass der Abschnitt »text« des Programms nicht im Speicher an andere Stelle geschoben werden kann. Um die Vorteile dieser Funktionalität vollständig zu erlangen, muss der ausführende Kernel Address Space Layout Randomization ( ASLR, Adressverwürfelung) unterstützen.
Geschützter Stapelverarbeitungsspeicher
Dies zeigt an, dass es Anzeichen gibt, dass das ELF mit der gcc(1)-Option -fstack-protector kompiliert wurde (benutzt z.B. __stack_chk_fail). Das Programm wird widerstandsfähig gegen Stapelverarbeitungsspeicherüberläufe sein.
Wenn ein Programm gebaut wurde ohne dass irgendwelche Zeichenkettenfelder auf dem Stapelverarbeitungsspeicher reserviert wurden, wird diese Prüfung zu Fehlalarmen führen (da dort __stack_chk_fail nicht benutzt wird), obwohl es mit korrekten Optionen kompiliert wurde.
Quellfunktionen verstärken
Dies zeigt an, dass das Programm mit -D_FORTIFY_SOURCE=2 und -O1 oder höher kompiliert wurde. Dies sorgt dafür, dass bestimmte unsichere Glibc-Funktionen durch ihre sicheren Gegenstücke (z.B. strncpy statt strcpy) oder Aufrufe, die zur Laufzeit überprüfbar sind, durch die zur Laufzeit prüfende Version (z.B. __memcpy_chk statt memcpy) ersetzt werden.
Wenn ein Programm so gebaut wird, dass die verstärkten Versionen der Glibc-Funktionen nicht nützlich sind (z.B. Benutzung wird zu Kompilierungszeit als sicher befunden oder die Benutzung kann nicht zur Laufzeit überprüft werden), wird diese Prüfung zu Fehlalarmen führen. Im Versuch, dies zu mildern, wird die Prüfung positiv abgeschlossen, falls eine verstärkte Funktion gefunden wird und fehlschlagen, falls nur unverstärkte Funktionen gefunden werden. Unprüfbare Bedingungen führen auch zu positiven Ergebnissen (z.B. es werden keine verstärkten Funktionen gefunden oder sie sind nicht gegen Glibc gelinkt).
Nur lesende Verlagerungen
Dies zeigt an, dass das Programm mit -Wl,-z,relro gebaut wurde, um ELF-Kennzeichen ( RELRO ) zu haben, die vom Laufzeit-Linker verlangen, dass er einige Bereiche der Verlagerungstabelle als »nur lesbar« kennzeichnet, falls sie aufgelöst waren, bevor die Verarbeitung begann. Dies vermindert die möglichen Speicherbereiche in einem Programm, die von einem Angreifer benutzt werden können, der mit einem Exploit erfolgreich Speicherinhalt verfälscht.
Sofortanbindung
Dies zeigt an, dass das Programm mit -Wl,-z,now gebaut wurde, um ELF-Kennzeichen ( BIND_NOW ) zu haben, die vom Laufzeit-Linker verlangen, dass er alle Verlagerungen auflöst, bevor die Programmausführung beginnt. Wenn es mit obigem RELRO kombiniert wurde, vermindert dies weitere Bereiche des Speichers, die für Angriffe, die dessen Inhalt verfälschen, zur Verfügung stehen.
OPTIONEN
--nopie, -p
erfordert nicht, dass die geprüften Binärdateien als PIE gebaut wurden.
--nostackprotector, -s
erfordert nicht, dass die geprüften Binärdateien mit Stapelverarbeitungsschutz gebaut werden.
--nofortify, -f
erfordert nicht, dass die geprüften Binärdateien mit Fortify Source gebaut werden.
--norelro, -r
erfordert nicht, dass die geprüften Binärdateien mit RELRO gebaut werden.
--nobindnow, -b
erfordert nicht, dass die geprüften Binärdateien mit BIND_NOW gebaut werden.
--nocfprotection, -b
Do not require that the checked binaries be built with control flow protection.
--quiet, -q
meldet nur Fehlschläge.
--verbose, -v
meldet Fehlschläge detailliert.
--report-functions, -R
zeigt nach dem Bericht alle externen Funktionen, die vom ELF benötigt werden.
--find-libc-functions, -F
statt des normalen Berichts wird die Libc für das erste ELF auf der Befehlszeile geortet und alle bekannten »verstärkten« Funktionen, die von der Libc exportiert werden, gemeldet.
--color, -c
aktiviert eingefärbte Statusausgabe.
--lintian, -l
schaltet das Berichten auf »lintian-check-parsable«-Ausgabe (durch Lintian auswertbare Ausgabe).
--debug |
meldet während des Ausführung einige Fehlersuchausgaben. |
--help, -h, -?
gibt eine kurze Hilfenachricht aus und wird beendet.
--man, -H
gibt die Handbuchseite aus und beendet sich.
RÜCKGABEWERT
Wenn in allen geprüften Programmen alle Härtungsfunktionalitäten entdeckt wurden, wird dieses Programm mit einem Exit-Code von 0 beendet. Falls irgendeine Prüfung fehlschlägt, wird der Exit-Code 1 sein. Individuelle Prüfungen können über Befehlszeilenoptionen deaktiviert werden.
AUTOR
Kees Cook <kees [AT] debian.org>
COPYRIGHT UND LIZENZ
Copyright 2009-2013 Kees Cook <kees [AT] debian.org>.
Dieses Programm ist freie Software; Sie können es unter den Bedingungen der GNU General Public License, Version 2 oder neuer, wie sie von der Free Software Foundation veröffentlicht wurde, weitergeben und/oder ändern.