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 <kees@debian.org>
Copyright 2009-2013 Kees Cook <kees@debian.org>.
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 <cyril.brulebois@enst-bretagne.fr>,
2006
Thomas Huriaux <thomas.huriaux@gmail.com>, 2006
David Prévot <david@tilapin.org>,
2010-2013
Xavier Guimard <yadd@debian.org>, 2018-2021