Product SiteDocumentation Site

Annexe B. Annexe

B.1. La procédure de durcissement étape par étape

Vous trouverez ci-dessous une procédure post-installation pour durcir un système Debian 2.2 GNU/Linux. Il s'agit d'une approche possible pour une telle procédure et celle-ci est orientée sur le renforcement des services réseaux. Elle est incluse pour présenter le processus entier que vous pouvez utiliser pendant la configuration. Veuillez également consultez Section B.2, « Liste des contrôles de configuration ».
  • Faire une installation du système (tenez compte des informations dans ce manuel concernant le partitionnement). Après l'installation du système de base, allez dans l'installation personnalisée, ne sélectionnez pas de paquets par tâches (task). Sélectionnez les mots de passe cachés (shadow).
  • Passer les paquets en revue avec dselect et retirer les paquets non nécessaires mais sélectionnés auparavant avant de faire [I]nstall. Laisser le strict minimum de logiciels sur le système.
  • Actualiser tous les logiciels à partir des paquets les plus récents disponibles sur security.debian.org comme décrit précédemment dans Section 4.2, « Faire une mise à jour de sécurité ».
  • Appliquer les suggestions présentées dans ce manuel concernant les quotas par utilisateur, les définitions des connexions et lilo.
  • Faire une liste de services actifs sur le système. Exécuter ceci :
      $ ps aux
      $ netstat -pn -l -A inet 
      # /usr/sbin/lsof -i | grep LISTEN
    Vous devrez installer lsof-2.2 pour que la troisième commande fonctionne (à exécuter en tant que superutilisateur). Vous devriez faire attention car lsof peut traduire le mot LISTEN en fonction des paramètres régionaux.
  • Afin de retirer les services non nécessaires, déterminer avant tout les paquets fournissant ces services et la façon de les démarrer. Cette tâche peut être facilement réalisée en vérifiant le programme qui écoute la « socket », l'exemple suivant le montre en utilisant ces outils et dpkg :
    #!/bin/sh
    # FIXME : c'est du vite fait, mal fait ; à remplacer par un bout
    # de script plus robuste
    for i in `sudo lsof -i | grep LISTEN | cut -d " " -f 1 |sort -u` ; do
      pack=`dpkg -S $i |grep bin |cut -f 1 -d : | uniq`
      echo "Le service $i est installé par $pack";
      init=`dpkg -L $pack |grep init.d/ `
      if [ ! -z "$init" ]; then
        echo "et démarré par $init"
      fi
    done
  • Une fois les services indésirables trouvés, supprimer le paquet (avec dpkg --purge) ou utiliser update-rc.d (consultez Section 3.5.1, « Désactivation de services démon ») de façon à le retirer du système de démarrage.
  • Pour les services inetd (démarrés par le superdémon), vérifier les services activés dans /etc/inetd.conf avec :
      $ grep -v "^#" /etc/inetd.conf | sort -u
    et désactiver ceux qui ne sont pas nécessaires en commentant la ligne qui les inclut dans /etc/inetd.conf, en supprimant le paquet ou en utilisant update-inetd.
  • Si des services sont « encapsulés » (« wrapped ») (ceux utilisant /usr/sbin/tcpd), vérifier que les fichiers /etc/hosts.allow et /etc/hosts.deny sont configurés d'après les règles de services.
  • Si le serveur utilise plus d'une interface externe, vous pourriez limiter les services pour n'en écouter qu'une seule. Par exemple, pour un accès FTP interne, paramétrez le démon FTP pour n'écouter que sur l'interface désirée et non toutes les interfaces (c'est-à-dire 0.0.0.0:21).
  • Redémarrez la machine ou passez en mode utilisateur unique puis revenez en mode multiutilisateur avec :
      # init 1
      (...)
      # init 2
  • Vérifiez que les services sont maintenant disponibles et, si nécessaire, répétez les étapes ci-dessus.
  • Installez maintenant les services nécessaires si ce n'est pas encore fait et configurez les correctement.
  • Utilisez la commande d'interpréteur suivante pour déterminer l'utilisateur utilisé pour exécuter chaque service disponible :
      # for i in `/usr/sbin/lsof -i |grep LISTEN |cut -d " " -f 1 |sort -u`;\
      > do user=`ps ef |grep $i |grep -v grep |cut -f 1 -d " "` ;\
      > echo "Le service $i a été démarré en tant qu'utilisateur $user"; done
    Pensez à modifier les utilisateur et groupe lançant ces services pour un couple utilisateur et groupe donné, et utilisez éventuellement chroot pour augmenter le niveau de sécurité. Vous pouvez procéder en changeant les scripts de démarrage de services de /etc/init.d. La plupart des services dans Debian utilisent start-stop-daemon qui propose des options (--change-uid et --chroot) pour faire cela. Un petit avertissement concernant l'utilisation de chroot pour des services est nécessaire : tous les fichiers installés par le paquet (consultez la sortie de dpkg -L) fournissant le service ainsi que les paquets dont il dépend peuvent être nécessaires dans l'environnement chroot. Des renseignements sur la mise en place d'un environnement chroot pour le programme ssh sont disponibles en Section B.7, « Environnement de chroot pour SSH ».
  • Répéter les étapes ci-dessus afin de vérifier que seuls les services désirés sont en cours d'exécution et qu'ils fonctionnent avec une combinaison utilisateur et groupe désirée.
  • Tester les services installés afin de voir si leur fonctionnement est bien celui souhaité.
  • Vérifier le système en utilisant un scanner de vulnérabilités (comme nessus) de façon à déterminer les vulnérabilités du système (mauvaise configuration, services vieux ou non nécessaires).
  • Mettre en place des mesures contre les intrusions de réseau et d'hôte comme snort et logcheck.
  • Répéter l'étape du scanner de réseau et vérifier que le système de détection d'intrusion fonctionne correctement.
Pour les personnes vraiment paranoïaques, les considérations suivantes sont à envisager.
  • Ajouter au système des possibilités de pare-feu, acceptant les connexions entrantes uniquement pour les services définis et limitant les connexions sortantes à celles autorisées.
  • Revérifier l'installation avec une nouvelle évaluation de vulnérabilité à l'aide d'un scanner de réseaux.
  • Vérifier les connexions sortantes en utilisant un scanner de réseaux depuis le système jusqu'à un hôte à l'extérieur et vérifier que les connexions non voulues ne trouvent pas leur sortie.
FIXME : Cette procédure considère le durcissement de service, mais pas le renforcement du système au niveau utilisateur, incluant des informations à propos de la vérification des droits d'utilisateurs, les fichiers setuid et le gel des changements dans le système en utilisant le système de fichiers ext2.