hardening-check - Vérifier les binaires pour des fonctionnalités
de sécurisation
hardening-check [options] [ELF ...]
Examiner un ensemble donné de binaires ELF et rechercher plusieurs
fonctions de sécurisation, échouant si toutes ne sont pas
trouvées.
Cet utilitaire recherche dans un ensemble de binaires ELF plusieurs
fonctionnalités de sécurisation qui peuvent avoir
été compilées dans un exécutable. Ces
fonctionnalités sont :
- Position Independent Executable
- Cela indique que l'exécutable a été
construit d'une manière telle (PIE) que la section
"texte" du programme peut être transférée
en mémoire. Pour tirer avantage de cette fonctionnalité, le
noyau exécuté doit prendre en charge la distribution
aléatoire de l'espace d'adressage (Address Space Layout
Randomization – ASLR) de texte.
- Stack Protected
- Cela indique qu'il y a des indices que l'ELF a
été compilé avec l'option -fstack-protector de
gcc(1) (par exemple utilisation de __stack_chk_fail). Le
programme sera résistant au dépassement de pile.
Quand un exécutable a été construit sans qu'une table
de caractères ne soit allouée dans la pile, cette recherche
mènera à des fausses alertes (dans la mesure où
__stack_chk_fail n'est pas utilisé), même s'il a
été compilé avec les bonnes options.
- Fortify Source functions
- Cela indique que l'exécutable a été
compilé avec -D_FORTIFY_SOURCE=2 et -O1 ou plus. Cela
provoque le remplacement de certaines fonctions non sûres de glibc
par leurs équivalents plus sûrs (par exemple strncpy
à la place de strcpy) , ou remplace des appels
vérifiables au moment de l'exécution par des versions
runtime-check (par exemple __memcpy_chk à la place de
memcpy).
Quand un exécutable a été construit de telle
manière que les versions renforcées des fonctions de glibc
ne sont pas utiles (par exemple, l'utilisation est vérifiée
comme sûre au moment de la compilation, ou l'utilisation ne peut
pas être vérifiée au moment de l'exécution),
cette recherche mènera à de fausses alertes. Pour tenter de
pallier cela, la recherche réussira si une fonction
renforcée est découverte, et échouera si uniquement
des fonctions non renforcées sont découvertes. Les
conditions non vérifiables réussissent aussi (par exemple,
aucune fonction qui peut être renforcée n'est
trouvée, ou n'est pas liée à glibc).
- Read-only relocations
- Cela indique que l'exécutable a été
construit avec les options -Wl,-z,relro pour que les marquages ELF
(RELRO) demandent que l'éditeur de liens au moment de
l'exécution marque toutes les zones de la table de
réadressage en "lecture seule" si les translations
d'adresses ont été résolues avant le début de
l'exécution. Cela réduit le nombre de zones de
mémoire d'un programme qui peuvent être utilisées par
un attaquant pour réaliser une exploitation efficace de corruption
de mémoire.
- Immediate binding
- Cela indique que l'exécutable a été
construit avec les options -Wl,-z,now pour que les marquages ELF
(BIND_NOW) demandent que l'éditeur de liens au moment de
l'exécution résolve toutes les réadressages avant de
démarrer l'exécution du programme. Si cette option est
combinée avec l'option RELRO ci-dessus, cela réduit encore
davantage les zones de mémoire accessibles aux attaques par
corruption de mémoire.
-
--nopie, -p
- N'exige pas que les exécutables
vérifiés soient construits comme PIE.
-
--nostackprotector, -s
- N'exige pas que les exécutables
vérifiés soient construits avec le protecteur de pile.
-
--nofortify, -f
- N'exige pas que les exécutables
vérifiés soient construits avec Fortify Source.
-
--norelro, -r
- N'exige pas que les exécutables
vérifiés soient construits avec RELRO.
-
--nobindnow, -b
- N'exige pas que les exécutables
vérifiés soient construits avec BIND_NOW.
-
--nocfprotection, -b
- N'exige pas que les exécutables
vérifiés soient construits avec le protecteur de pile.
-
--quiet, -q
- Ne fournir que des rapports d'échec.
-
--verbose, -v
- Fournir des rapports d'échec verbeux.
-
--report-functions, -R
- Après le rapport, afficher toutes les fonctions
externes nécessaires à l'ELF.
-
--find-libc-functions, -F
- Au lieu de faire un rapport normal, localiser le libc pour
le premier ELF sur la ligne de commande et rapporter toutes les fonctions
"renforcées" exportées par libc.
-
--color, -c
- Activer les sorties d'état colorées.
-
--lintian, -l
- Changer les rapports pour une sortie analysable par une
vérification de lintian.
- --debug
- Rapporter des données de débogage durant le
traitement.
-
--help, -h, -?
- Afficher un message d'aide bref et quitter.
-
--man, -H
- Afficher la page de manuel et quitter.
Quand toutes les fonctionnalités de sécurisation
vérifiables des exécutables examinés ont
été détectées, ce programme s'achève avec
un code de sortie de "0". Si une vérification échoue,
le code de sortie sera "1". Les vérifications individuelles
peuvent être désactivées avec des options en ligne de
commande.
Kees Cook <
[email protected]>
Copyright 2009-2013 Kees Cook <
[email protected]>.
Ce programme est un logiciel libre ; il est permis de le distribuer et/ou
de le modifier selon les termes de la GNU General Public License, telle que
publiée par la Free Software Foundation, version 2 ou
ultérieure.
gcc(1),
hardening-wrapper(1)
Cyril Brulebois <
[email protected]>, 2006
Thomas Huriaux <
[email protected]>, 2006
David Prévot <
[email protected]>, 2010-2013
Xavier Guimard <
[email protected]>, 2018-2021