par Frédéric Raynal
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 ...
-
Would you like to set more restrictive permissions on the administration
utilities - Voulez-vous imposez des droits plus restrictifs sur les utilitaires
d'administration [N] ?
Certains programmes ne doivent pas être utilisables par tout
le monde. Bastille-Linux propose une liste impressionnante de programmes
qui se retrouvent ensuite avec des droits 0750.
-
Il est ensuite question du bit SUID. Ce bit permet à un programme
d'être exécuté par un utilisateur avec les droits de
root
(le 's' en position 4, 7 et 10)
>>ls -l /bin/ping
-rwsr-xr-x 1 root root 17968 Mar 6
15:57 /bin/ping
Ce bit, s'il augmente le confort d'utilisation, diminue d'autant la sécurité.
En effet, si une vulnérabilité est découverte (un
buffer overflow par exemple), elle pourra être exploitée par
un utilisateur quelconque pour devenir root sans y être autorisé.
Bastille-Linux propose de retirer ce bit à un certain nombre
de programmes parmi lesquels mount/umount,
ping,
dump/restore,
cardctl,
... Cette liste comprend entre autres ping
et traceroute qui sont deux utilitaires
réseau permettant de vérifier l'état d'un serveur.
La suppression de leur bit SUID concerne un mode paranoïaque, mais n'empêche pas
l'utilisation standard d'une machine.
également présents parmi la liste de programmes SUID-root,
on trouve les r-commands. Il s'agit
de programmes comme rcp, rlogin
ou encore rsh. Ces utilitaires
ne cryptent pas les données qu'ils envoient sur le réseau.
De plus, ils utilisent uniquement l'adresse IP comme moyen d'authentification,
ce qui n'est absolument pas suffisant (problème de spoofing).
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