Convert to GutenPalm
or to PalmDoc |
par
L´auteur:
Frédéric Raynal prépare une thèse en informatique sur le tatouage d'images à l'INRIA. Il participe également au développement de Bastille-Linux.
Sommaire:
|
Bastille-Linux
Résumé:
Sortie début Juin, la version 1.1 de Bastille-Linux n'est pas une nouvelle distribution de Linux mais un ensemble de scripts qui permet de mieux protéger son système de vulnérabilités potentielles. La démarche des auteurs étant très pédagogique, on apprend énormément uniquement en installant ces scripts.
Introduction
En terme de sécurité, Linux est plus performant que certains autres systèmes d'exploitation. Toutefois, toutes les distributions ne sont pas égales devant cette question. Bastille-Linux propose un ensemble de mesures à prendre pour protéger son système. Initialement écrit pour la distribution Red Hat, la dernière version fonctionne également avec d'autres distributions.
Le projet est dirigé par Jon Lasser (coordinateur principal) et Jay Beale (développeur principal). Sont également impliqués de nombreux autres développeurs, beta-testeurs et concepteurs.
Avant toute chose, soyons clair : Bastille-Linux N'est PAS une nouvelle distribution de Linux ! Il s'agit en fait d'un ensemble de scripts, écrits en perl et destiné à renforcer la sécurité de Linux.
Le terme de sécurité se limite ici à l'aspect informatique : comment éviter que des personnes indésirables accèdent à votre machine ? Bastille-Linux apporte un élément de réponse en modifiant les installations initiales qui sont réalisées par les diverses distributions.
Une tâche de base de tout administrateur est de connaître les besoins de ses utilisateurs, non seulement pour les satisfaire, mais également pour éviter de laisser tourner des programmes qui ne servent à personne sur le réseau ... mais qui peuvent contenir des vulnérabilités dangereuses pour celui-ci. Comme le répétait sans cesse un de mes mentors en informatique : moins tu en fais, mieux c'est ;-] Il parlait certes de complexité des algorithmes, mais ceci reste terriblement vrai pour l'administration : l'opulence nuit car elle fournit de nouveaux angles d'attaques. Pour limiter les vulnérabilités sur un système, il ne faut donc y installer que les choses dont on a réellement besoin.
Bastille-Linux cherche à minimiser les possibilités d'attaques d'une machine Linux. Pour y parvenir, les concepteurs de ce logiciel ont une démarche très pédagogique : ils expliquent pas à pas le rôle de ce qu'ils proposent de faire.
Présentation
Au moment où j'écris cet article, Bastille-Linux en est à la version 1.1.0, sortie dans la première quinzaine du mois de Juin.
Indépendamment de son évidente utilité, Bastille-Linux se montre extrêmement pédagogique. Les scripts fonctionnent en posant des questions précises. Souvent, avec ce genre d'approche, les questions sont au moins aussi incompréhensibles que les réponses et l'utilisateur ne sait pas quoi faire. Ici, les concepteurs cherchent à éduquer l'utilisateur. Ils expliquent le contexte de la question, ainsi que les conséquences liées aux réponses possibles. Ceci fait de Bastille-Linux un outil facilement accessible.
Pour les utilisateurs plus avancés, les sources, écrites en perl, constituent un modèle de clarté (si, si, c'est possible ;-) : les commentaires qui les parsèment décrivent précisément la manière dont les actions sont entreprises.
Voici quelques caractéristiques de la version 1.1.0 :
- les scripts fonctionnent maintenant sur des systèmes non vierges ;
- une fonction undo est apparue: chaque fichier modifié par Bastille-Linux est sauvegardé dans son état initial pour être restauré si le besoin s'en fait sentir ;
- initialement, Bastille-Linux était réservé aux distributions Red Hat et Mandrake : ce n'est plus le cas. Un module contient maintenant les chemins des fichiers nécessaires en fonction de la distribution sur laquelle les scripts sont exécutés.
Bastille-Linux est découpé en modules. Dans l'esprit, on distingue les modules d'utilité générale (au nombre de 4) et ceux inclassables parmi les précédents, plutôt destinés à des aspects précis ( des logiciels comme sendmail, FTP, ... ou des particularités comme le boot ou des démons inutiles)
Les modules généraux concernent les aspects suivants :
- installation d'un garde-barrière (firewall)
- mise à jour des versions des logiciels du système
- réalisation d'un audit sur les programmes SUID-root
- désactivation et restriction des services inutiles
Les autres modules portent sur des aspects plus spécifiques. Certains se consacrent aux failles ouvertes par des logiciels lorsqu'ils sont mal configurés (sendmail ou FTP par exemple), d'autres reconfigurent quelques services de manière moins permissive (PAM, syslog, ...)
Certaines mesures se recoupent offrant ainsi plusieurs niveaux de protection (ceci s'oppose au précepte de mon mentor ... mais il faut aussi savoir s'émanciper ;-) Il faut protéger chaque service, ou chaque vulnérabilité potentielle, par l'intermédiaire de tous les moyens possibles. Dans ce cas, si l'un échoue, les méthodes restantes se dressent à nouveau pour empêcher votre système d'être compromis.
Installation ou "promenons nous dans les scripts tant que le loup n'y est pas"
Les versions antérieures de Bastille-Linux ne fonctionnent que sur des systèmes vierges, ce qui n'est plus le cas de la dernière. Toutefois, il faut bien comprendre que tout ce que fait Bastille n'est d'aucune utilité (ou presque) si votre système est déjà compromis. Il est donc préférable, non pas vis-à-vis du logiciel mais bien pour une question de sécurité, d'installer Bastille-Linux sur un nouveau système. Ceci étant clairement établi, passons maintenant aux choses sérieuses : l'installation !
Bastille-Linux est disponible sous forme d'archive .tgz sur le site bastille-linux.sourceforge.net. Cette archive ne fait que 134 Ko. Un fois téléchargée, il faut la décompresser (tar xzf Bastille-1.1.0.tgz).
Quatre scripts gèrent Bastille-Linux :
- InteractiveBastille.pl: ce script pose plusieurs questions à l'utilisateur pour définir les opérations à effectuer sur le système. Une fois terminé, il crée un fichier config qui résume toutes les réponses données ;
- AutomatedBastille.pl : installe la configuration par défaut, en laissant le choix sur l'utilisation d'un garde-barrière, à partir d'un fichier de configuration fourni. A noter que ce script n'est plus maintenu ;
- BackEnd.pl: il est le responsable des changements opérés sur le système. Il prend comme paramètre les réponses fournies précédemment ;
- Undo.pl : lors de l'exécution de BackEnd.pl, certains fichiers système (/etc/syslog.conf,/etc/inetd.conf, /etc/hosts.*, ...) subissent des modifications. Pour permettre de tout remettre en état en cas de problème, des copies de sauvegarde sont placées dans le répertoire /root/Bastille/undo.
Pour installer Bastille-Linux, il faut être root sur le système puisque les scripts vont modifier des fichiers de configuration. L'installation la plus courante se fait donc en lançant d'abord InteractiveBastille.pl. L'utilisateur répond alors à une série de questions (qui seront détaillées plus loin). Ensuite, on lance BackEnd.pl et c'est terminé ! On trouve alors une trace de toutes les modifications dans le répertoire /root/Bastille/undo.
Quelques remarques avant de commencer.
- le script suppose par défaut qu'il est exécuté dans le répertoire /root/Bastille ... ceci sera changé dans une très prochaine version et il pourra être lancé de n'importe où (en fait, ce doit déjà être le cas au moment où vous lisez ces lignes)
- deux modules proposent la création de comptes ... et supposent que les shadow passwords sont utilisés sur votre système. Ceci est le cas dans l'installation par défaut ... mais vérifiez que /etc/passwd ne contient bien aucun mot de passe et que /etc/shadow n'est accessible qu'à root et qu'il contient bien les mots de passe!
- Bastille-Linux ne gère pas encore les liens entre les modules, comme ils peuvent l'être lors de la configuration du noyau (ce sera fait dans une prochaine version). Il faut donc prendre garde aux réponses fournies dans un module et aux incidences qu'elles peuvent avoir. Ainsi, vous pouvez très bien dire, dans le module IPChains de bloquer le port 2049 et maintenir NFS dans la liste des démons actifs du module MiscellaneousDaemons (NFS se sert de ce port).
Modules pas à pas
Afin de bien comprendre les étapes pas à pas, je reprends dans cette partie les questions posées par Bastille-Linux. Je garderai les questions en Anglais, tout en proposant une traduction. La lettre entre [ ] indique la réponse par défaut (N -> No, Y -> Yes).
IPChains
Ce module sert à configurer un garde-barrière. Bien que ce ne soit pas indispensable pour protéger son système, ceci permet de contrôler le trafic réseau vers et depuis sa machine. On ne peut pas se contenter de bloquer le trafic par l'intermédiaire du firewall, il faut aussi reconfigurer les démons (rappelez-vous que plusieurs "couches" de sécurité ne sont pas inutiles).
Le principe de ce script est excellent. Il considère 2 interfaces réseau : celle en communication avec l'extérieur, donc très sensible, et celle sur un réseau local. Le but du jeu est de déterminer les services auxquels ont droit les machines et de bloquer les autres. Par défaut, tout ce qui vient de l'extérieur est refusé. Ensuite, le script met en place des règles pour autoriser certains services.
Le script prend en charge à la fois les protocoles TCP, UDP et ICMP. Il propose des listes de services à surveiller ou à bannir pour chacun de ces protocoles. Détailler ici toute la démarche entreprise par Bastille-Linux pour la mise en place d'un garde-barrière serait trop long, mais la lecture du script et des commentaires permet de s'en sortir sans difficulté. Toutefois avoir des connaissances minimum est nécessaire avant de se lancer dans l'utilisation de ce module.
PatchDownload - Mises à jour
Les mises à jour constituent un élément important pour conserver l'intégrité de son système. Dans les derniers mois, bind et piranha, (pour ne citer qu'eux) ont connu de graves problèmes de sécurité. Ils ont été très rapidement corrigés dans la mesure où, le code étant public, des personnes ont immédiatement proposé des solutions.
Malheureusement, ce script ne fonctionne pas encore très bien. Sa mise en oeuvre est assez complexe puisqu'il faut déterminer les packages installés, puis, parmi eux, ceux qui disposent d'une mise à jour. Il faut ensuite télécharger celle-ci, vérifier qu'elle n'a pas été altérée (soit par des pirates, soit par le transfert) avant de l'installer. Une grosse difficulté est que cette étape dépend très fortement de la distribution employée.
Pour l'instant, Jay Beale conseille de réaliser cette étape manuellement, mais de ne surtout pas la négliger. Une version fonctionnelle de ce module est en cours de développemnt et devrait être disponible rapidement.
FilePermissions - Permissions des fichiers
Ce module est inspiré par un document de l'équipe SANS. Le but est de déterminer les programmes qui ne devront être accessibles qu'à root (ou à un membre du groupe root), ceux qui devront conserver le bit SUID, etc ...
AccountSecurity - Sécurité des comptes
Un pirate commence souvent par compromettre un compte utilisateur (ou un compte système). Quelques mesures simples rendent la tâche plus complexe et permettent de détecter d'éventuelles intrusions.
- Would you like to set up a second UID 0 account - Voulez-vous créer un second compte avec un UID de 0 [N] ?
Répondre affirmativement à cette question crée un second compte root sur votre système. Dans ce cas, vous ne devriez plus utiliser le compte root initial, mais plutôt celui de substitution que vous venez de créer. Ceci donne 2 fois plus de possibilités à un pirate de casser un mot de passe d'un super-utilisateur ... mais vous permet de voir tout de suite qui utilise l'identité root dans les fichiers de /var/log.
- May we take strong steps to disallow the dangerous r-protocols - Pouvons-nous prendre des mesures drastiques contre les r-commands ? [Y]
Comme évoqué précédemment, les r-commands sont une source puissante pour se procurer un nouveau compte sur une machine : tous les mots de passe circulent en clair ! Un sniffer sur un tel réseau offre des perspectives intéressantes ...
Bastille-Linux interdit l'utilisation des r-commands via PAM (Pluggable Authentication Modules), en retire la permission d'exécution et bloque les serveurs présents dans tcp_wrapper (rlogind, rexecd et rshd). Ils sont configurés dans /etc/inetd.conf où il suffit de les mettre en commentaire.
- Would you like to enforce password aging - Voulez-vous imposer une limite d'âge aux mots de passe ? [Y]
Les mots de passe devront alors être changés tous les 180 jours. Les comptes dont le mot de passe ne change pas sont désactivés.
- Would you like to create a non-root user account - Voulez-vous créer un compte non-root ? [N]
Il faut se servir le moins possible de son compte root. En effet, une malheureuse commande du type rm -rf / provoque de grosses catastrophes quand on est root ... mais moins de dégâts en tant qu'utilisateur standard. Seules les tâches administratives doivent être réalisées sous le compte root.
- Would you like to restrict the use of cron to administrative accounts - Voulez-vous restreindre l'utilisation de cron aux comptes administratifs ? [Y]
cron permet de lancer automatiquement des jobs. Par exemple, un administrateur peut s'en servir pour vérifier régulièrement l'intégrité des fichiers, ou faire des recherches dans les fichiers de /var/log. En revanche, permettre à tous les utilisateurs de s'en servir constitue un trop grand privilège. Pour empêcher ceci, Bastille-Linux crée un fichier /etc/cron.allow qui recense tous les utilisateurs autorisés à employer ce service.
BootSecurity - Sécurité au boot
Les options proposées dans ce module abordent légèrement la sécurité physique d'une machine. Il s'agit de prévenir les failles des versions précédentes qui laissent n'importe qui ayant un accès physique à la console se ménager un accès privilégié (i.e. root). Il suffisait en effet, au prompt de LILO, de lancer le mode single (LILO : linux single) et on se retrouvait avec un gentil shell appartenant à root ;-P
Il faut bien comprendre que ces mesures ne suffisent pas. En effet, pour protéger physiquement un ordinateur, il faut également mettre un mot de passe sur le BIOS, interdire de booter sur n'importe quoi d'autre que le disque dur installé dans le boîtier, et verrouiller ce même boîtier pour empêcher un intrus d'ajouter son propre disque, ... Ces mesures ne sont vraiment pas nécessaires dans la majorité des cas et révèlent une paranoïa latente lorsqu'elles sont mises en oeuvre sans véritable raison.
D'un point de vue logiciel, certaines mesures élémentaires offrent un compromis raisonnable à celles évoquées ci-dessus :
- Would you like to password-protect the LILO prompt - Voulez-vous protéger le prompt de LILO par un mot de passe ? [N]
Répondre par l'affirmative ici empêchera les personnes non désirées d'accéder à la machine après l'avoir rebootée.
- Would you like to reduce the LILO delay time to zero - Voulez-vous réduire le délai d'attente de LILO à 0 ? [N]
Ceci évite à une personne sur la console d'entrer des paramètres au moment du boot. Bien sûr, si l'ordinateur dispose de différents OS, il ne faut surtout pas le faire, sans quoi seul le boot par défaut serait accessible !
- Do you ever boot Linux from the hard drive - Est-ce que vous bootez toujours à partir de votre disque dur ? [Y]
Si vous avez répondu oui à une des questions précédentes et que LILO est installé sur votre disque, alors, il faut également répondre oui à cette question pour que les modifications soient écrites sur le disque.
- Would you like to write the LILO changes to a boot floppy - Voulez-vous modifier votre disquette de boot ? [N]
Si vous possédez une disquette de boot, que ce soit pour des raisons d'urgence ou parce que c'est votre mode normal de lancement de Linux, alors vous devez la modifier.
- Would you like to disable CTRL-ALT-DELETE rebooting - Voulez-vous désactiver la séquence CTRL-ALT-DELETE pour rebooter ? [N]
Ceci a pour but d'empêcher une personne pouvant accéder physiquement à la machine de la rebooter. Toutefois, à moins que la prise de courant soit également protégée, ceci ne sert à rien ;-)
- Would you like to password protect single-user mode - Voulez-vous protéger le mode "single user" par un mot de passe ? [Y]
Comme nous l'avons vu au début de ce module, c'est plutôt une bonne idée pour empêcher n'importe qui de devenir root sur la machine.
SecureInetd - Sécuriser Inetd
Le but de ce module est donc de restreindre et désactiver tous les services superflus. En effet, des pirates peuvent découvrir des failles de sécurité exploitables dans n'importe quel service possédant des privilèges, il est donc nécessaire de restreindre à la fois les services et leurs privilèges.
Par exemple, une erreur dans le DNS de la Red Hat 6.0 permet de passer root à distance. Désactiver ce service ou en diminuer les privilèges protège de ce désagrément.
Certains protocoles, comme les r-commands déjà évoqués , mais aussi ftp ou telnet se révèlent être très vulnérables. D'autres permettent à un attaquant de se renseigner (finger ou identd par exemple) sur les comptes existant sur une machine, etc ... Beaucoup de ces services sont pris en charge par tcp_wrapper (to wrap signifie envelopper) qui offre un contrôle sur qui accède à un service donné (par l'intermédiaire des fichiers /etc/hosts.{allow, deny}). Ensuite, une fois que le wrapper a décidé si le client pouvait accéder au service désiré, la requête est transmise au serveur correspondant.
Cette partie manque encore de souplesse et devrait être complètement revue dans les versions ultérieures.
- Would you like to modify inetd.conf and /etc/hosts.allow to optimize use of Wrappers - Voulez-vous modifier inetd.conf et /etc/hosts.allow pour optimiser l'utilisation des wrappers? [Y]
Bastille-Linux installe les 2 fichiers spécifiés dans la question. Il est intéressant d'aller jeter un coup d'oeil pour les paramétrer plus finement en fonction de ses besoins.
- Would you like to set sshd to accept connections only from a small list of IP addresses - Voulez-vous autoriser l'accès à sshd seulement à un nombre restreint d'adresses IP ? [N]
sshd est un démon permettant de se connecter de manière sécurisée (échange de clés, cryptage des mots de passe et données, ...).Il fournit un remplacement complet pour telnet, rlogin, rsh, rcp et ftp. Notons qu'il existe une version équivalente à ssh mais sous licence BSD : OpenSSH. Nous reviendrons sur ceci plus loin.
- Would you like to make "Authorized Use" banners - Voulez-vous installer des bannières "Utilisation autorisée? [Y]
Toute personne tentant de se connecter à votre machine verra apparaître un message de mise en garde lui demandant s'il est bien sûr d'être autorisé à se connecter sur cette machine via ce service. Il se trouve dans le fichier /etc/motd.
Rappelons, avant de continuer, que "le réseau" repose essentiellement sur un modèle client-serveur. Il faut donc bien savoir, pour chaque service, si vous vous situez du côté client ou du côté serveur. Par exemple, ne pas faire tourner de serveur web sur sa machine n'empêche nullement de naviguer sur Internet : votre navigateur fait office de client.
DisableUserTools - Désactivation des outils utilisateurs
Ce module, très court, est absolument indispensable sur un serveur. Classiquement, un pirate commence par accéder à une machine en se servant d'un compte utilisateur normal. Ensuite, il recompile quelques programmes sur la machine même pour exploiter ses faiblesses. Ce module désactive le compilateur C sur la machine pour tout autre utilisateur que root.
Donc, si cette machine est uniquement un serveur, sur lequel personne ne devrait compiler quoi que ce soit, alors il faut supprimer le compilateur.
ConfigureMiscPAM - Configuration de PAM
Le but de ce module est de permettre de limiter les risques d'attaques de type Déni de Service - ces attaques bloquent un système en le surchargeant (ex : remplir une partition de fichiers core, ping de la mort, etc ...)
PAM signifie "Pluggable Authentification Module". Il s'agit d'une bibliothèque qui permet à l'administrateur du système de choisir comment chaque application authentifie ses utilisateurs, quels sont ses droits, les ressources dont il dispose, et ainsi de suite.
- Would you like to put limits on system resource usage - Voulez-vous mettre des limites pour l'utilisation des ressources système? [Y]
-
Le fichier /etc/security/limits.conf contient les limites du système. Bastille-Linux les modifie ainsi :
- les fichiers core sont limités à 0 ;
- chaque utilisateur est limité à 150 processus ;
- la taille maximale des fichiers est fixée à 40Mo.
Chacune de ces valeurs est susceptible d'être ensuite modifiée directement dans le fichier de configuration.
- Should we restrict console access to a small group of user accounts - Voulez-vous restreindre l'accès à la console seulement à quelques utilisateurs ? [N]
Sous la Red Hat 6.0/6.1, les utilisateurs qui se connectent à partir de la console bénéficient de certains privilèges, comme celui de pouvoir monter le CD-ROM. Il est possible de restreindre l'accès à la console à un groupe d'utilisateurs de confiance. Cette question permet de préciser ces utilisateurs si vous voulez mettre en place une telle politique.
Logging
syslog est un des services les plus importants pour détecter si une machine a été compromise. Ce démon enregistre certains des évènements qui se produisent sur le système. On peut choisir de paramètrer le niveau d'information enregistré.
Il est à noter que si on a choisi un nombre minimal de services, toute anomalie dans les fichiers /var/log devrait se voir très rapidement puisque peu d'informations y seront sauvegardées. Au contraire, lorsque votre système supporte plusieurs serveurs inutiles, les fichiers /var/log deviennent énormes et donc, plus difficiles à exploiter (mise en place de scripts dédiés nécessaires).
Ce module ajoute de nouveaux contrôles dans le fichier /etc/syslog.conf.
- Would you like to add additional logging - Voulez-vous ajouter plus de logging ? [Y]
Bastille-Linux crée un fichier /var/log/kernel, dédié aux messages émanant du noyau et aux erreurs graves (les messages du garde-barrière relèvent de cette première catégorie). Certaines informations sont renvoyées vers 2 terminaux (TTY 7 et 8). Un nouveau fichier /var/log/loginlog enregistre les utilisateurs qui se connectent sur le système.
- Do you have a remote logging host - Disposez-vous d'un hôte distant pour le logging ? [N]
A moins de disposer d'une autre machine vers laquelle vous envoyez vos messages, la réponse est non.
- Would you like to set up process accounting - Voulez-vous activer le logging des process ? [N]
Sous Linux, il est possible d'enregistrer quelles commandes sont exécutées, par qui et quand. Si ceci et très pratique pour suivre l'activité d'un pirate sur votre machine, l'inconvénient est que le fichier de log devient vite très important. Bref, ceci consomme pas mal de disque et de CPU. Il vaut mieux le désactiver à moins d'en avoir réellement besoin.
MiscellaneousDaemons - Divers démons
Toujours dans un souci de minimisation, ce module active uniquement les serveurs dont vous avez réellement besoin au démarrage du système. Par défaut, pratiquement tous les services sont inutiles et sont donc désactivés. Vous pouvez les réactiver à l'aide de la commande chkconfig.
Services |
Description |
apmd |
Sert à contrôler les batteries sur les portables. |
NFS et samba |
Pour gérer des systèmes de fichiers partagés ... sources de nombreuses vulnérabilités bien que très utiles sur des réseaux hétérogènes. |
atd |
Tout ce qui est fait via atd peut l'être également par cron. |
PCMCIA services |
Selon que vous disposiez de matériel PCMCIA, ce qui est fréquent sur les portables mais beaucoup plus rare sur les stations |
dhcpd |
Serveur pour distribuer des adresses IP temporaires. Ce genre de service est soit fourni par le Fournisseur d'Accès Internet (FAI), soit utilisé sur une réseau local. |
gpm |
Sert en mode console (texte) pour gérer la souris. A moins de travailler souvent en mode console, ce service ne sert à rien. |
news server |
Peu de personnes ont besoin de faire tourner un serveur de news sur leur machine ... en général, le FAI s'en charge. |
routage |
Comme pour le serveur de news, le FAI s'en charge : il s'agit de votre DNS. |
NIS |
Service très pratique sur un réseau local ... mais source de tant de problèmes d'un point de vue sécurité !!! |
snmpd |
Serveur destiné à l'administration de réseau (statistiques, gestion, utilisateurs, ...) |
sendmail |
Il n'a pas besoin de tourner en mode démon pour vous permettre de recevoir et envoyer du courrier. De plus, si vous recevez le courrier de votre FAI via POP ou IMAP, sendmail ne vous sert vraiment à rien et comme ce programme a une longue liste de failles ... |
Sendmail
Comme stipulé précédemment, sendmail est un service qui gère le courrier. Son histoire est remplie de vulnérabilités, provoquées par la diversité des tâches que doit accomplir un serveur de courrier et des privilèges nécessaires pour y parvenir (résolution de noms, informations pour syslog, etc...). Indépendamment de ses faiblesses, sendmail permet d'obtenir des informations sur l'existence d'un utilisateur sur un serveur donné. Par exemple, les commandes sendmail EXPN et VRFY permettent à une personne de savoir si un compte utilisateur existe.
sendmail n'a pas besoin de tourner en tant que démon pour vous permettre d'émettre et de recevoir du courrier. Pour une utilisation personnelle, sendmail ne sert vraiment à rien car il suffit d'utiliser un client mail quelconque (netscape, rmail, pine, mutt, etc...) pour envoyer vos courriers. Pour en recevoir, vous pouvez activer sendmail à intervalle régulier pour aller vérifier le contenu de votre boîte.
- Do you want to leave sendmail running in daemon mode - Voulez-vous laisser sendmail tourner en tant que démon ? [Y]
Nous venons de voir que ça ne sert à rien dans la plupart des cas, mais qu'en plus c'est dangereux, alors autant le désactiver.
- Would you like to run sendmail via cron to process the queue - Voulez-vous que sendmail gère la file d'attente des mails à intervalle de temps régulier ? [N]
En utilisant ceci, sendmail ira vérifier le contenu de la file d'attente toutes les 15 minutes. Il est possible de changer ce paramètre dans le fichier /etc/sysconfig/sendmail.
- Would you like to disable the VRFY and EXPN sendmail commands - Voulez-vous désactiver les commandes sendmail VRFY et EXPN? [Y]
Ces commandes livrent des informations, utiles aux pirates ou pour du spam.
RemoteAcces - Accès à distance
Il est souvent utile de pouvoir se connecter à une machine sans être physiquement proche d'elle. Nous avons vu que les r-tools permettent ceci mais de manière non-sécurisée. Bastille-Linux propose de télécharger ssh. Il s'agit d'un logiciel qui crypte les données (et donc les mots de passe) qui circulent au travers d'une connexion.
Avant de continuer, rappelons quelques lois françaises récentes sur la cryptographie. Ce type de logiciel doit faire l'objet d'une déclaration auprès du Service Central de la Sécurité des Systèmes d'Information (SCSSI). Il existe 2 types de déclarations :
- déclaration d'utilisation : permet à une personne, et seulement à elle, d'utiliser le logiciel ;
- déclaration de fourniture : permet à quelqu'un de devenir fournisseur (plus de formalités pour les autres utilisateurs).
La déclaration se présente sous la forme d'un formulaire à retourner au SCSSI.
Qu'est-il donc légal d'utiliser en France ? Après avoir fait la déclaration adéquate, on peut utiliser un logiciel dont la longueur de la clé de session ne dépasse pas 128 bits. Précisons bien ce qu'est une clé de session. Il s'agit de la clé qui servira à crypter les données. Cette clé de session est construite pas à pas par le client et le serveur : elle résulte d'un protocole d'échange de clés (Diffie-Hellman dans la plupart des cas). Le principe consiste à construire une clé à l'aide d'un morceau de clé de chacun des participants. Ensuite, cette clé de session sert à crypter les données à l'aide d'un algorithme symétrique (i.e. que la même clé est utilisée pour crypter et décrypter les données). Ainsi, DES qui sert à crypter les mots de passe sous Unix, est un algorithme symétrique qui possède une clé de 56 bits.
Maintenant, une clé de 128 bits est-elle suffisante pour garantir la confidentialité et la sécurité de la transaction : OUI ! Même si aujourd'hui DES est reconnu comme n'étant "plus très sûr", les meilleures attaques ne se sont pas à la portée de tous. D'autre part, une erreur assez répandue est de croire qu'une clé de longueur 2k est 2 fois plus difficile à trouver qu'une clé de longueur k. En fait, si la difficulté croît bien, elle croît beaucoup plus vite que la taille de la clé. Pour une clé de longueur k, il existe 2^k clés possibles (et donc 2^2k pour une clé de longueur 2k). Donc en multipliant la taille de la clé par 2, on ajoute clés possibles ! Quand on constate la difficulté actuelle pour casser DES (56 bits), on imagine bien que des clés de session de 128 bits offrent une sécurité inviolable (sous réserve que l'algorithme de cryptage/décryptage ne recèle pas de faille). Du point de vue d'un attaquant, augmenter cette limite fait seulement passer la difficulté d'un niveau impossible à un niveau "encore plus impossible".
4 logiciels offrent des services assez similaires ... mais un seul est légal en France :
- ssh 1.2.x : un système client-serveur pour établir des connexions cryptées ;
- ssh 2.x : le même que le premier, mais avec moins de failles et plus de possibilités ;
- OpenSSH : une version similaire à la précédente mais sous licence BSD ;
- ssf : comme ssh, mais adapté à la législation française (c'est le seul parmi les 4 à disposer d'une déclaration de fourniture).
Les modules restant concernent encore des services. Pour eux, la politique mise en oeuvre peut sembler surprenante : on commence par en limiter les privilèges puis ils sont arrêtés. Contrairement aux apparences, ces deux mesures ne sont pas contradictoires. En effet, ces services peuvent très bien être réactivés un jour, soit par mégarde, soit par un intrus ... alors autant continuer à limiter leurs possibilités.
DNS
Un DNS (Domain Name Server - ou Serveur de Nom de Domaine) permet de faire le lien entre une adresse IP et un nom de machine, et réciproquement . Par exemple, l'adresse 198.186.203.36 correspond à www.bastille-linux.org. La fonction essentielle de ce type de serveur s'appelle BIND (to bind signifie, entre autre, lier en Anglais). Dernièrement, une attaque type DoS a été découverte contre BIND. Elle peut être évitée en ne donnant accès au DNS qu'à un petit sous-ensemble de répertoires sur la machine (on peut changer le répertoire racine - par défaut / - à l'aide de la commande chroot avant d'exécuter une commande ou un script)
Apportons quelques précisions techniques avant de détailler le comportement de Bastille-Linux. Le démon associé à se service s'appelle named. Sa configuration vient du fichier /etc/named.conf.
- Would you like to chroot named and set it to run as a non-root user - Voulez-vous changer le répertoire racine de named et l'exécuter en tant qu'utilisateur non-root ? [N]
Pour faire tout ceci, Bastille-Linux crée un nouvel utilisateur appelé dns, qui ne possède pas de shell, mais uniquement son propre répertoire /home/dns. A l'intérieur, on reconstruit l'architecture d'un système classique, en ajoutant les répertoires usuels (/usr, /etc, /var, etc ...). On recopie alors les fichiers de configuration et les bibliothèques dont a besoin le démon. D'autres légères modifications sont encore nécessaires (pour syslog par exemple - voir le script DNS.pm). Maintenant, le DNS dispose de son propre environnement :)
- Would you like to deactivate named, at least for now - Voulez-vous désactiver named, au moins temporairement ? [Y]
La majorité des personnes n'ont pas besoin d'avoir un serveur de nom sur leur machine, le FAI vous fournit ce service. Le DNS-HOWTO décrit l'installation d'un cache pour la résolution de nom, mais même ceci peut être source d'ennui.
Apache
Apache est le serveur web le plus utilisé sur Internet. Un tel serveur est utile uniquement dans deux cas :
- pour héberger un site: pour cela vous avez besoin d'une adresse IP fixe. Les FAI possèdent de telles adresses ce qui n'est pas le cas de leurs clients ;
- pour tester ses propres pages web : dans ce cas, il suffit d'activer le serveur (/etc/rc.d/init.d/httpd start) au moment approprié.
Les fichiers pour configurer ce démon sont dans le répertoire /etc/httpd/conf.
- Would you like to deactivate the Apache web server - Voulez-vous désactiver votre serveur web? [Y]
Comme on n'en a pas besoin en permanence, toujours dans un souci de minimalisme, on le désactive.
- Would you like to bind the web server to listen only to the localhost - Voulez-vous que le serveur web écoute uniquement les requêtes sur le localhost ? [N]
-
Il est possible de lier le démon httpd à une adresse spécifique. Ici, Bastille-Linux propose de le connecter à l'adresse du localhost, 127.0.0.1 Ceci permet d'avoir un serveur qui tourne sur sa machine pour tester ses propres pages web.
Elles sont accessibles à partir de l'adresse :
http://localhost/ (ou http://localhost/raynal pour accéder à mes propres pages)
Ceci fait qu'Apache utilise l'interface loopback (lo) pour fonctionner.
- Would you like to bind the web server to a particular interface - Voulez-vous lier le serveur web à une interface particulière ? [N]
Répondre affirmativement ici annule la réponse précédente. En effet, on y signalait vouloir utiliser le serveur web sur le loopback ... et cette question permet de préciser une autre interface (type Ethernet par exemple) au moyen d'une adresse IP qui lui est associée.
- Would you like to deactivate the following of symbolic links - Voulez-vous désactiver la possibilité pour Apache de suivre les liens symboliques ? [Y]
Il faut impérativement le faire. De la même manière que le DNS travaille dans un espace restreint, il ne faut pas permettre à Apache de sortir de son univers (i.e. /home/httpd). Par exemple, si un des utilisateurs possède, dans son répertoire pour le serveur web, un lien vers la racine /, alors tout le monde peut accéder à tous les fichiers ... et en particulier aux fichiers de configuration type passwd et autres.
- Would you like to deactivate server-side includes - Voulez-vous désactiver les "server-side includes" ? [Y]
Comme le dit très justement le commentaire de Jay Beale, si vous ne savez pas ce que c'est, vous n'en avez pas besoin ! Il suffit de savoir que ceci peut être configuré pour que les utilisateurs puissent exécuter n'importe quel programme sur le serveur (eh oui ... tremblez amis administrateur ... vous en aviez rêvé ;-)
- Would you like to disable CGI scripts, at least for now - Voulez-vous désactiver les scripts CGI, au moins pour le moment ? [Y]
écrire un script CGI (Common Gateway Interface) n'est pas quelque chose de très compliqué ... mais nécessite de prendre quelques précautions (par exemple, pour éviter des dépassements de capacités provoquant des fichiers core sur le serveur). Beaucoup de méthodes actuelles pour compromettre un système reposent sur des erreurs commises dans ces scripts.
- Would you like to disable indexes - Voulez-vous désactiver les fichiers d'index ? [N]
En l'absence de fichier index.html dans un répertoire, Apache affiche les fichiers contenus dans le répertoire en question. Ceci est moins grave que d'autoriser la lecture des liens symboliques ... mais imaginez qu'un répertoire contienne des données sensibles.
Un serveur web, comme tout autre serveur, peut être une véritable invitation à visiter votre machine, voire à lui nuire, s'il est mal configuré. Ceci peut s'avérer très ennuyeux dans certains cas. Dans le cas d'une banque par exemple, si les noms de clients sont visibles (voire leurs mots de passe) ... aller voir sur www.kitetoa.com, vous ne serez pas déçus ;-)
Printing - Imprimer
Une seule question se pose ici : allez-vous imprimer à partir de votre machine. Si ce n'est pas le cas, Bastille-Linux désactive le démon lpd et retire le bit SUID à lpr et lprm.
FTP
D'un point de vue sécurité, FTP pose pas mal de problèmes. Par exemple, les mots de passe circulent en clair lors de l'initialisation de la transaction. Il en va de même pour les données, ce qui est problématique si elles sont confidentielles (des données médicales, financières, etc...)
De plus, on a découvert dernièrement quelques failles dans wu-ftpd. Si vous devez laisser tourner ce serveur, Bastille-Linux se propose de pas mal limiter ses moyens. Rappelons qu'il n'est nullement besoin de faire tourner un serveur FTP pour émettre des requêtes FTP.
Le fichier qui contrôle les accès au serveur FTP est /etc/ftpacces.
- Would you like to disable user privileges on the FTP daemon - Voulez-vous supprimer les privilèges utilisateur pour le démon FTP? [N]
Un des problèmes de FTP est d'autoriser les connexions anonymes (vous savez l'utilisateur pour lequel le mot de passe est une adresse email ... très souvent bidon ;-) et l'upload (i.e. de déposer des fichiers sur le serveur). De nombreuses attaques utilisent ces deux faiblesses. Un autre problème vient de ce que la transaction n'est pas cryptée.
- Would you like to disable anonymous download - Voulez-vous désactiver les connexions anonymes ? [N]
Ceci interdit les connexions à votre serveur avec le login anonymous.
Derniers trucs et astuces
Comme je l'ai déjà souligné, Bastille-Linux est un formidable outil pédagogique. Les commentaires des questions sont précis. Quand des aspects restent opaques, des nombreuses ressources sont disponibles pour trouver les précisions recherchées. Un bon moyen d'apprendre sur un thème donné est de n'utiliser que le module voulu.
Pour cela, il suffit de faire une copie de sauvegarde du fichier contenant les questions. Ensuite, vous éditez le fichier Questions.txt. Chaque module commence après le mot-clé FILE ... il ne vous reste plus qu'à conserver ce qui vous intéresse.
/root/Bastille >> cp Questions.txt Questions.txt-orig
/root/Bastille >> emacs Questions.txt BackEnd.pl &
/root/Bastille >> ./InteractiveBastille
Les mesures présentées par Bastille-Linux ne suffisent évidemment pas à garantir la sécurité de votre système :
- aucun système n'est fiable à 100% ;
- d'autres mesures sont indispensables pour compléter celles prises par Bastille-Linux.
Parmi les mesures indispensables à ajouter, on peut immédiatement penser à un analyseur des fichiers de log (portsentry, snort, snplog, etc ...), l'utilisation du patch de http://www.openwall.com pour le noyau (pile non exécutable, restrictions des droits sur les répertoires /tmp et /proc, etc...).
Le sécurisation d'un système est une route longue et difficile. Cela nécessite de se tenir perpétuellement au courant des dernières failles de sécurité (via des mailing listes comme bugtraq sur le site de securityfocus par exemple).
Conclusion
Bastille-Linux propose de sécuriser une distribution assez mal réputée sur ce plan là. Vous me direz : "dans ce cas, pourquoi ne pas en utiliser une autre ?" Certes ... mais la Red Hat (Mandrake - les différences sont minimes) offre certains côtés sympathiques. Le but de cet article n'est pas de promouvoir (ou d'enfoncer) une distribution par rapport à une autre. Après tout, dans le logiciel libre, la liberté de choix est un des atouts. En fait, cet article vise plusieurs buts. Tout d'abord, vous montrez les soucis permanents d'un administrateur qui vit dans l'angoisse de voir son réseau détruit par quelques pirates destructeurs en mal de frissons. Par ailleurs, cet outil vous permet de faire une visite très complète de la configuration d'un système Linux. Dans cette optique, c'est un formidable moyen, non seulement pour les néophytes mais également pour les utilisateurs plus expérimentés, de découvrir les arcanes de la configuration d'un système Linux.
Les deux préceptes fondamentaux et généraux sont le minimalisme et la profondeur. Moins il y a de services sur votre machine Linux, moins il y a de failles. Pour chacun de ces services, plusieurs protections valent mieux qu'une ... mais ceci est à double tranchant car une protection mal configurée (ou la conjonction de plusieurs) peut se retourner contre vous.
Enfin, pour terminer, signalons que la prochaine version s'appellera BUS, pour Bastille Unix Security. Il s'agira d'un savant mélange entre Bastille-Linux et Msec (Mandrake Security Project), lui-même devenu Usec (Unix Security Project).
Références
- http://bastille-linux.sourceforge.net : le site officiel de Bastille-Linux
- Bastille-Linux: A Walkthrough : sur le site de www.SecurityFocus.com, cet article en Anglais par Jay Beale, auteur principal de Bastille-Linux, présente le logiciel et son installation. Il m'a beaucoup aidé pour la rédaction de l'article que vous lisez actuellement ;-)
- http://www.sans.org : le site du groupe SANS, avec qui collabore Jay Beale. Une vraie mine de renseignements sur la sécurité informatique.
- http://www.securityfocus.com/frames/?content=/vdb/stats.html: toujours sur SecurityFocus, une étude intéressante sur les OS et leurs bugs. Les premières places sont occupées par une famille d'OS bien connue, arrive juste après Linux (toute distribution confondue).
- http://www.kitetoa.com : un site qui se contente de tester les serveurs web ... et qui trouve des choses très intéressantes. A la fois drôle et affligeant (pour les administrateurs pris en flagrant délit)
- http://www.ssh.com : site officiel du secured shell. ssh est utilisable gratuitement dans le cadre d'évaluation et d'un usage non-commercial ou universitaire ... mais pas en France
- http://www.openssh.org : une version équivalente de ssh ... mais sous licence BSD :)
- http://ww2.lal.in2p3.fr/~perrot/ssf/ : pour obtenir des informations sur l'équivalent légal et français de ssh.
- http://www.scssi.gouv.fr : le site officiel du SCSSI. On peut y trouver la déclaration évoquée dans l'article.
Discussion sur cet article
Chaque article possède sa page de discussion. Vous pouvez y soumettre un commentaire ou lire ceux d´autres lecteurs:
2001-03-18, generated by lfparser version 2.8