Durcissement du Noyau Linux
Denis Ducamp / Hervé Schauer Consultants
Présentation au groupe SUR de l'OSSIR du 6 février 2001
Reproduction strictement interdite
- Le durcissement du noyau a pour buts :
- La restriction des droits des utilisateurs sur des systèmes sensibles :
- Limiter les appels systèmes pouvant être utilisés.
- Spécifier les données sensibles (récupèrables ou non)
- Donner certains privilèges à certains utilisateurs administrateurs
- La modification du noyau est systématiquement nécessaire :
- De nombreux patches existent mais le projet OpenWall est le plus
abouti.
- Il existe aussi la solution d'utiliser une distribution sécurisée.
- Site :
<http://www.openwall.com/linux/>
- Auteur : Solar Designer <solar@false.com>
- Tous les patches présentés existent pour les noyaux en version 2.0.39
et 2.2.18 .
Les versions 2.4.x ne seront pas supportées avant 2.4.10 .
2.1 Pile non exécutable
- Les exploitations de débordements de buffers se réalisent dans la
quasi totalité des cas par l'exécution de codes installés par un pirate sur
la pile du processus vulnérable :
- modifier l'adresse de retour d'une fonction vers l'emplacement de la
pile contenant le code à exécuter
- modifier l'adresse de retour d'une fonction vers une fonction d'une
librairie, généralement system() .
- Rendre la pile non exécutable :
- Ne protège pas contre certains débordements (backdoors)
- Empêche certains programmes de fonctionner : glibc 2 et l'optimisation
par saut de trampoline.
- Le noyau doit différencier les sauts par trampoline (à émuler) des
tentatives d'exploitation (à interdire)
- Le noyau peut être dupé par une exploitation malicieuse
2.2 Restrictions de /tmp
- /tmp est un répertoire partagé où de nombreux programmes crééent des
fichiers temporaires
- Les noms de ces fichiers temporaires sont généralement prévisibles
- Un pirate peut exploiter cela dans deux buts :
- Obtenir des privilèges ou une identité
- Empécher le système de fonctionner normalement : déni de service
- Il existe deux façons d'arriver à ce résultat :
- Créer un lien, symbolique ou dur, vers un fichier à créer (/.rhosts)
ou à modifier (/etc/passwd).
- Créer un tube nommé (FIFO) pour voler ou modifier des informations.
- Protections :
- Interdire tout accès à un lien ne vous appartenant pas dans un
répertoire +t .
- Interdire toute ouverture en écriture sans le drapeau O_CREAT, à un
tube nommé ne vous appartenant pas dans un répertoire +t .
2.3 Restrictions de /proc
- /proc est une partition virtuelle permettant d'accéder à des données
hébergées par le noyau :
- liste des processus,
- configuration physique de la machine,
- configuration du noyau,
- etc.
- Chaque utilisateur n'a accès qu'aux données concernant ses propres
processus
- Un groupe d'administration peut être désigné pour avoir accès :
- à toutes les données concernant tous les processus
- aux événements générés durant la période d'initialisation du système
(dmesg).
- à toutes les données concernant les connexions actives.
2.4 Existence des fichiers 0, 1 et 2
- Les fichiers 0, 1 et 2 jouent un rôle particulier :
- entrée standard (stdin)
- sortie standard (stdout)
- sortie d'erreur (stderr)
- De nombreux programmes utilisent ces fichiers sans vérification.
- Un processus père peut fermer ces fichiers et exécuter un processus
fils qui après ouvertures d'autres fichiers utilisera à tort ces numéros.
- Il est théoriquement possible :
- De voler des données (/etc/shadow) en redirigeant l'entrée standard
- De modifier des données (/.rhosts) en redirigeant une sortie.
- Trusted path support :
Phrack 53 Article 8
<http://phrack.infonexus.com/search.phtml?view&article=p53-8>
par Krzysztof G. Baranowski,
basé sur Phrack 52 Article 6
<http://phrack.infonexus.com/search.phtml?view&article=p52-6>
par route|daemon9
- Seuls les exécutables se trouvant dans un répertoire appartenant à
root peuvent être exécutés.
- GID split privilege patch : Phrack 52 Article 6 par
route|daemon9
- Donne aux groupes 16 à 18 les droits :
- d'ouvrir un port privilégié,
- d'ouvrir une socket raw (ping, traceroute),
- d'ouvrir une socket avec l'option SOCK_PACKET.
- linux-stealth :
<http://www.innu.org/~sean/>
- Rejette les paquets que les outils de détection de systèmes
d'exploitation utilisent pour interroger les piles TCP/IP.
- Linux Intrusion Detection System Patch (lids) :
<http://www.lids.org/>
- Restreint l'accès à /dev/kmem, rawdisks, ioports et umount.
- Restreint en lecture/ajout des fichiers/arborescences.
- Supprime des privilèges du système.
- Un mot de passe est nécessaire pour changer la configuration.
Son acceptation peut être limitée aux utilisateurs connectés directement
à la console.
- lcap :
<http://pweb.netcom.com/~spoon/lcap/>
- Depuis la version 2.2.11 , Linux permet de supprimer des privilèges
via l'entrée /proc/sys/kernel/cap-bound .
- lcap est un programme permettant de simplifier l'accès à
cette entrée.
- Michal Zalewski / lcamtuf
<http://dione.ids.pl/~lcamtuf/pliki.html>
- Plusieurs patches anciens mais bien écrits et commentés
(majoritairement en polonais).
3.1 subterfugue
- subterfugue permet de limiter les accès d'un processus et de ses
descendants.
-
http://subterfugue.org/ par Mike Coleman
<mkc@subterfugue.org>
téléchargement :
http://sourceforge.net/projects/subterfugue/
- Le noyau Linux supporte nativement subterfugue depuis 2.3.99-pre1 .
- il est possible :
- de restreindre les accès disques en spécifiant :
- les arborescences non accessibles
- les arborescences accessibles en lecture seulement
- les arborescences accessibles en lecture et écriture
- d'étendre les arguments à des noms de fichiers complets et d'y
appliquer des expressions rationelles (regexp)
- de comptabiliser le nombre d'appels systèmes et de signaux
- d'interdire ou de limiter les accès réseaux
- d'interdire la fermeture des entrées / sorties standards et d'erreur
- d'interdire l'envoi de signaux à des processus "étrangers"
- de tracer les appels systèmes (en se limitant éventuellement à
certains
appels seulement)
- de restreindre les positionnements de droits d'accès (interdire les
SUID, l'écriture pour tous...)
- bastille-linux
<http://bastille-linux.sourceforge.net/> : basée sur une
distribution RedHat, le but est de constituer une distribution utilisable
dans les universités et les établissements éducatifs.
- Le projet consiste aujourd'hui en un script de durcissement de
systèmes :
- Redhat 5.2 à 6.2 .
- Mandrake 7.0 & 7.1
- SlackWare 7.0 & 7.1
- Solaris 2.6 & 7 !!!
- La version 1.1.1 est disponible depuis le 19 octobre 2000 : bugs fixes...
undo, extensibilité à d'autres distributions, log only...
- Stack-Guard
<http://www.imunix.org/products.html#stackguard> : il s'agit
d'un patch au compilateur gcc 2.7.2.3 afin de générer du code auto-immune
aux exploitations de débordements de buffers par exécution de code dans la
pile.
- Cette méthode a montré à de maintes reprises son efficacité :
- les exploitations de faille de sécurité sont dans la quasi totalité de
ce type.
- Une version de RedHat 5.2 entièrement recompilée est disponible.
- Il s'agit d'une approche complémentaire à :
- l'utilisation d'une pile non exécutable
- l'audit des codes sources.
- La version 2.O de stackguard est un port pour egcs 2.91.66 et une
version d'Immunix OS 6.2 basé sur Red Hat 6.2 est disponible.
- Vulnérable si l'attaquant peut scanner le contenu de la pile :
vulnérabilités des chaines de formats. Ex : wuftpd 2.6.0 .
4.1 Autres distributions sécurisées
- Nexus Linux
<http://www.lemuria.org/Nexus/> : distribution s'adressant aux
administrateurs dont la première préocupation est la sécurité, elle fournit
par défaut openssh et apache avec le support ssl.
- slinux
<http://www.slinux.org/> : le but est de fournir
une distribution sécurisée "à tous les niveaux". Plus complète que les
autres distributions, elle devrait fournir toutes les fonctions comme la
gestion des privilèges, le chiffrement de partitions, etc.
- A l'heure actuelle, le développement de cette distribution n'a
toujours pas commencé.
- Il s'agit en fait de l'ancienne distribution securelinux
<http://www.reseau.nl/securelinux/>
- La dernière mise à jour du serveur web a été de rajouter un lien vers
le site de Nexus Linux.
- nmrcOS
<http://www.nmrc.org/nmrcOS/> : le but est de fournir un
système stable et sécurisé.
- Basée sur une distribution SlackWare avec un noyau 2.0.36, il intègre
plusieurs patchs de sécurité pour le noyau : "Solar Designer's patch",
"Trusted path support", "Probe Detection Patch", etc.
- Un script durcit les droits d'accès sur de nombreux fichiers
sensibles.
- En cours de portage sous Linux 2.2.12
® © Hervé Schauer Consultants 2000-2001 -
4 bis, rue de la gare -
92300 Levallois Perret
Téléphone : +33 1 41 40 97 00 -
Télécopie : +33 1 41 40 97 09 -
Courriel : <secretariat@hsc.fr>