hardening-check - prüft Binärdateien auf
Sicherheitshärtungsfunktionalitäten
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.
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.
-
--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.
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.
Kees Cook <
[email protected]>
Copyright 2009-2013 Kees Cook <
[email protected]>.
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.
gcc(1),
hardening-wrapper(1)