HSC
Cabinet de consultants en sécurité informatique depuis 1989 - Spécialisé sur Unix, Windows, TCP/IP et Internet
Mode texte : accès au contenu de la page
Hervé Schauer Consultants
Vous êtes ici : Accueil > Ressources > Brèves > Chrooter bind
Accéder au : Site HSC des formations
Télécharger le catalogue des formations
Recherche :  
English version
   Services   
o Domaines de compétences
o Conseil & Expertise
o Prestations ISO 27001
o Audit & Évaluation
o Tests d'intrusion
o Tests de vulnérabilités (TSAR)
o Analyse Forensique
o Certification ARJEL
o Formations
o E-learning
   Conférences   
o Agenda
o Interventions passées
o Tutoriels
   Ressources   
o Index thématique
o Brèves
o Présentations
o Cours
o Articles
o Outils (téléchargement)
o Veille en vulnérabilité
   Société   
o Hervé Schauer
o Equipe
o Offres d'emploi
o Références
o Historique
o Partenariats
o Associations
   Presse et
 communication
 
 
o Newsletter HSC
o Bulletin juridique HSC
o Revue de presse
o Communiqués de presse
o Publications
   Contacts   
o Coordonnées
o Requêtes particulières
o Accès à nos locaux
o Hôtels proches de nos locaux
|>|Chrooter bind  

par Denis Ducamp (13/02/2001)



Cet article montre comment installer une cage pour exécuter bind de façon
plus sécurisée.

Un article de référence est http://www.psionic.com/papers/whitep01.html
expliquant cela pour des systèmes OpenBSD et RedHat.

note : les commandes données sont pour Linux, certains paramètres changent
suivant les systèmes.

L'installation ici décrite nécessite de recompiler bind et donc ne peut être
réalisée à partir de packages binaires pré-compilés. L'installation se fera
dans le répertoire /var/named et bind sera chrooté dans ce répertoire. Les
différentes étapes à suivre dans notre installation sont réparties en deux
parties : compilation et installation.

* compilation

1- récupérer les sources depuis le site de ISC. Dans notre cas
   ftp://ftp.isc.org/isc/bind/src/8.2.3/bind-src.tar.gz

2- désarchiver les sources :
   mkdir bind-8.2.3
   cd bind-8.2.3
   tar xzvf ../bind-src.tar.gz
   cd src

3- appliquer le patch suivant :
--- port/linux/Makefile.set.orig        Fri Jun 11 08:01:35 1999
+++ port/linux/Makefile.set     Mon Feb 12 19:23:03 2001
@@ -1,12 +1,12 @@
 'CC=gcc -D_GNU_SOURCE'
-'CDEBUG=-O -g'
-'DESTBIN=/usr/bin'
-'DESTSBIN=/usr/sbin'
-'DESTEXEC=/usr/sbin'
+'CDEBUG=-O2'
+'DESTBIN=/var/named/usr/bin'
+'DESTSBIN=/var/named/usr/sbin'
+'DESTEXEC=/var/named/usr/sbin'
 'DESTMAN=/usr/man'
-'DESTHELP=/usr/lib'
-'DESTETC=/etc'
-'DESTRUN=/var/run'
+'DESTHELP=/var/named/usr/lib'
+'DESTETC=/var/named/etc'
+'DESTRUN=/var/named/var/run'
 'LEX=flex -8 -I'
 'YACC=yacc -d'
 'SYSLIBS=-lfl'

   Il faut bien sûr éditer le fichier qui correspond à votre système. Ici le
   but est de changer l'emplacement des fichiers pour qu'ils soient
   installés dans la cage et qu'ils aillent chercher leurs données dedans.

   Ici tous les répertoires, sauf celui des manuels, sont changés pour
   être placés dans l'arborescence /var/named .

4- compilation et installation des binaires
   make
   make install

* installation

1- créer un utilisateur et un groupe
   ici seront utilisés le compte daemon et le groupe daemon
   Il vous est par exemple possible de créer le compte bind avec un groupe
   du même nom.

2- créer une cage avec les sous répertoires etc, lib, dev, usr/sbin,
   var/named et var/run
   mkdir /var/named
   cd /var/named
   mkdir -p etc lib dev usr/bin usr/lib usr/sbin var/run

3- créer le fichier dev/null
   mknod -m 666 dev/null c 1 3
   sous FreeBSD utiliser "c 2 2"

4- créer le fichier dev/log
   mkfifo -m 666 dev/log
   ceci est inutile si /dev/log est une socket, celle-ci sera créée quand
   syslogd sera lancé.

5- recopier les fichiers de configuration : /etc/named.conf
   cp /etc/named.conf etc

   Les répertoires var/named/s (l'arborescence des fichiers secondaires) et
   var/run doivent être modifiables par l'utilisateur ou le groupe.

   Les autres fichiers ne doivent être modifiables ni par l'utilisateur, ni
   par le groupe et ne doivent pas appartenir à ceux-ci.

6- recopier les programmes en dehors de la cage
   cp usr/bin/* /usr/bin
   cp usr/sbin/* /usr/sbin

7- recopier les bibliothèques nécessaires dans lib
   . sous Linux glibc 2.1.x :
     cp /lib/libc.so.6 /lib/ld-linux.so.2 lib
   . sous FreeBSD 4.2 :
     mkdir -p usr/lib usr/libexec
     cp /usr/lib/libc.so.4 /usr/lib/libutil.so.3 usr/lib
     cp /usr/libexec/ld-elf.so.1 usr/libexec
   
   La liste des fichiers varie énormément suivant les systèmes et les
   versions de bibliothèques. Pour connaître les bibliothèques à recopier,
   il est possible d'utiliser la commande ldd :
   ldd usr/sbin/named-xfer 
        libc.so.6 => /lib/libc.so.6 (0x4001a000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

   Dans certains cas ce n'est pas suffisant et il est possible de recopier
   tout /lib puis après quelques jours d'exploitation de lancer la commande
   'ls -artlu lib' pour connaître la liste des derniers fichiers lus.

   Au format elf, les programmes ont besoin d'un programme leur permettant
   de charger les bibliothèques dynamiques. Ce programme peut se trouver
   dans le répertoire /lib (ld-linux.so.1 sous linux libc5, ld-linux.so.2
   sous linux glibc2) ou /usr/libexec (ld-elf.so.1 sous FreeBSD 3 et 4).

8- lancer syslogd pour écouter les événements générés dans la cage :
   syslogd -a /var/named/dev/log
   sous FreeBSD, l'option à utiliser est -l à la place de -a

   Avec de nombreuses versions de syslogd, il est inutile de créer un tube
   nommé puisque au lancement de syslogd celui-ci créé une socket.

9- lancer named avec les option '-u user -g group -t cage' .
   /usr/sbin/named -u daemon -g daemon -t /var/named

Il n'y a pas besoin ici de passer les options adéquates à named ou à ndc
puisque les programmes ont en dur le chemin correct vers tous les
utilitaires, ce qui n'aurait pas été le cas en recopiant les utilitaires
depuis le système vers la cage.

note : chrooter named sans changer son identité est inutile car il est alors
       possible pour root de sortir de la cage, voir
       http://www.bpfh.net/simes/computing/chroot-break.html pour
       l'explication et le programme d'exemple. Ceci était utilisé dans
       l'exploitation de la vulnérabilité de bind 8.2.0 à 8.2.2 afin de
       sortir de la cage et accéder à l'intégralité du disque.

       Voir aussi le tips http://www.hsc.fr/tips/chroot.html donnant la
       méthode pour chrooter un serveur apache installé en relais inverse.



Dernière modification le 12 novembre 2003 à 13:55:00 CET - webmaster@hsc.fr
Mentions légales - Informations sur ce serveur - © 1989-2013 Hervé Schauer Consultants