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.
- --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.
Cyril Brulebois <cyril.brulebois@enst-bretagne.fr>,
2006
Thomas Huriaux <thomas.huriaux@gmail.com>, 2006
David Prévot <david@tilapin.org>,
2010-2013