Sécuriser son poste linux 

Firewall avec ipchains Graver et MP3
Sécurité 

Présentation

Attaques possibles

Compte utilisateur
Les outils "r" (rsh, rlogin, ...)
FTP
Les outils de stats
NFS
Serveur web
Serveurs mail
Autres

Sécuriser son poste

Installation de la distrib
Eliminer les services inutiles
Eliminer les scripts de lancement inutiles
Sécuriser /etc/passwd
Sécuriser FTP
Sécuriser telnet
Les TCP Wrappers
Pour finir

Présentation

Le but de cette page est de présenter le moyen de sécuriser son poste linux, il n'a pour vocation de présenter une configuration sécurisée à 100% mais suffisamment protégée pour affronter le "chaos" d'internet.

Attaques possibles

Présentation

Avant de sécuriser votre poste, voici une liste non exhaustive des méthodes les plus classiques pour pénétrer un système, les détails pour exécuter ses attaques ne sont pas exposés, pour cela vous trouverez un tas de sites sur le net qui explique ça très bien.

Compte utilisateur

La première étape pour essayer de pénétrer sur un système est tout simplement de se loguer comme un simple utilisateur, pour cela il faut connaître un login, anciennement beaucoup de systèmes UNIX disposait de comptes génériques par défaut, du style "guest" pour invité, un hacker essayera toujours ses comptes par défaut.
Pour éviter cela, vérifiez votre fichier /etc/passwd et supprimer tous vos comptes génériques utilisateurs (pas les comptes systèmes !!).

Veillez à ce qu'aucun utilisateur n'ait pas de password et encore moins un password identique au login (très courant !!).

Les outils "r" (rsh, rlogin, ...)

Attention à ses outils, ils utilisent un système d'authentification relativement rudimentaire et sont connues pour constituer une faille de sécurité. Qui plus est avec ces outils on peut mettre en place des relations de "confiance" entre les machines, c'est à dire qu'on pourra accèder à une machine en utilisant les r-outils sans avoir à entrer de mot de passe, par conséquent si un système est hacké, cela signifie que tous les autres tomberont aussi. Sachez aussi que les r-outils ne disposent pour la plupart d'aucun mécanisme de loging, donc aucun moyen d'avoir l'historique de leur utilisateur. Les fichiers permettants d'établir les relations de confiance sont .rhosts ou /etc/hosts.equiv.
Les outils r principaux sont:
- rsh ouvre un shell à distance (pour lancer une commande par exemple), si vous voulez un outil équivalent sécurisé, tournez vous vers SSH.
- rlogin, équivalent à telnet, si un utilisateur place un fichier .rhosts dans sa homedirectory contenant obelix, n'importe qui sur la machine obelix pourra se connecter sur son compte sans avoir à donner de mot de passe. Si vous possèdez un /etc/hosts.equiv contenant un +, n'importe qui aura accès à votre machine.
- rexecd, c'est le serveur pour accepter des requêtes de rexec, permet de lancer des commandes à distance. Le serveur ne logue aucun échec de connexion, par conséquent vous pouvez essayer une tonne de mot de passe sans que l'administrateur de la machine visée sans rende compte.

FTP

Ne faites pas tourner un serveur FTP anonyme à moins que vous sachiez ce que vous faîtes, sachez que les daemons FTP sont connus pour présenter pas mal de problèmes de sécurité, un serveur FTP mal configuré peut très bien servir de passerelle à un hacker pour attaquer votre machine bien sûr mais aussi d'autres machines.

TFTP (Trivial File Transfer Protocol) est un service FTP simplifié, il est utilisé notamment pour le boot des terminaux X. Il ne demande aucune authentification, n'importe qui peut se connecter et lire ce qu'il veut.

Je vous conseille donc de désactiver tout ce qui tourne autour de FTP.

Outils de stats

Des outils comme finger, systat, netstat, rusersd, rwhod, ... servent à avoir des informations sur le système (sur les utilisateurs, stats de réseau, process qui tournent, ...). Pour la plupart ce sont des daemons qu'on peut interroger de l'extérieur, il devient alors très facile pour un hacker d'obtenir un max d'info sur votre système, qui lui permettront de mieux cibler ses attaques.
Par exemple avec systat et netstat qui tournent sur votre système, un hacker peut visualiser vos process actifs ainsi que la configuration réseau. Des outils comme rusersd et rstatd permettent à un hacker de visualiser les gens qui sont logués à un moment donné. Finger permet de connaître les logins existants sur la machine.

NFS

Les versions précédentes de NFS comportaient des trous de sécurité, vous devez veiller à possèder la dernière version. Vous ne devez en aucun cas exporter vos systèmes de fichiers vers le monde entier, vous devez toujours restreindre l'accès à un nombre limité de machines et préféré toujours la lecture seule que la lecture/écriture. N'exportez pas plus que nécessaire, c'est à dire exporter /usr/local/public plutôt que / tout entier. Vous pouvez faire en sorte que le root de la machine distante qui monte votre répertoire puisse avoir les mêmes droits que celui de la machine locale, c'est à éviter (ce n'est pas le cas par défaut). Enfin NFS doit être utilisé strictement en interne sur un réseau local et en aucun cas entre des machines sur internet.

Serveur web

Faites très attention à vos scripts cgi-bin, un défaut dans l'un d'entre eux et c'est la porte ouverte à votre système. Si vous mettez un serveur web en place, supprimez donc tout ce qui se trouve sous le répertoire des cgi-bin et mettez y quee vos scripts CGI dont vous soyez absolument sûrs. Ne faites pas confiance aux script CGI que vous récupérez sur internet.
En plus des scripts CGI, il y a bien d'autres failles dans un serveur HTTP, que ce soit au niveau d'une mauvaise configuration, des serveurs bogués, ... même les logs peuvent être un problème, s'ils sont visibles d'internet, notamment ceux contenant les erreurs (page 404), qui peuvent contenir les informations sensibles comme les login des utilisateurs.

Serveurs Mail

Attention aux serveurs SMTP, il y a eu par le passé pas mal d'attaques du à des failles dans sendmail, smail et d'autres, veillez à toujours faire tourner la dernière version et n'hésitez pas à appliquer les patchs. Désactivez tout serveur SMTP si vous ne vous en servez pas.
Pour les serveurs POP/IMAP, sachez qu'il y a eu sur ces serveurs un bogue (buffer overun) qui faisait qu'on pouvait lancer des commandes en tant que root à distance. Faites une mise à jour, ou désactivez les. Certaines serveurs POP ne loguent pas les erreurs de logins, donc n'importe qui peut essayer une tonne de password sans que vous vous rendiez compte. Enfin POP/IMAP manipule les mots de passe en clair, on peut très bien sur le réseau intercepter une requête POP (par sniffing) et récupérer le login et le mot de passe. Préférez les serveurs POP sécurisés (APOP, ...).

Autres

Parmis les outils réputés potentiellement peu sûrs, même si les nouvelles versions tendent à corriger petit à petit les défauts, citons DNS, Samba, services RPC, portmapper, et j'en oublie.

Sécuriser son poste

Installation de la distrib

La sécurisation du poste commence à l'install, je vous déconseille de choisir les configs standards proposés dans les distribs comme RedHat ou Mandrake avec WorkStation (Station de travail), Server (Serveur), le mieux est de choisir Custom (personnalisé) pour avoir un oeil sur les outils qui seront installés sur votre système. L'idée est d'installer le minimum d'outils, la règle la première si vous ne voyez pas à quoi peut servir un outil est de ne pas le choisr, il faut vous dire que de toute manière vous aurez toujours la possibililité de l'installer plus tard. En résumé moins vous avez d'outils, moins vous avez de trous potentiels de sécurité.
Au moment d'arriver au partitionnement du système, je vous conseille de créer plusieurs partitions pour bien séparer le système, des données, par exemple:

/         150Mo
/usr    1Go au moins
/var     400Mo
/home    50Mo par utilisateurs au moins
swap    2*taille de la RAM au moins
/usr/local au moins 500Mo (pour stocker vos applis)

Une fois l'installation terminée, suivant votre distrib allez sur le site correspondant (RedHat www.redhat.com, Mandrake, www.linux-mandrake.com, ...), dans la rubrique support vous devriez trouver les derniers packages corrigeant les trous de sécurité. Ces patchs sont indispensables pour sécuriser correctement un système, vous devez surveiller régulièrement leur parution. Sachez qu'il existee des mailing-listes à ce sujet qui vous préviendront automatiquement de la parution d'un nouveau patch.
Certaines distributions comme RedHat, dispose d'outils (up2date pour la RedHat) qui permettent d'upgrader automatiquement le système.

Je vous conseille de tenir à jour un cahier d'administrateur où vous noterez chacune de vos manips systèmes, ça peut se révéler un brin écolier, voire fastidieux, mais ça peut se réléver extrèmement utile dans certains cas. Un simple fichier texte (droit 400 proprio root) avec un copier coller des commandes (et les résultats qui vont avec), et quelques annotations devrait faire l'affaire.

Eliminer les services inutiles

Maintenant que le système est installé et que vous avez patché les packages defectueux, passons maintenant à la sécurisation propre du système. Dans un premier temps on va désactiver tous les services inutiles qui tournent sur la machine.
On va d'abord travailler sur inetd, inetd est un "super daemon" c'est à dire qu'il permet à lui tout seul de lancer tout un tas d'autres daemons (ou services), il est configurable à partir du fichier /etc/inetd.conf. Par défaut il comprend un certain nombre de services activés dont vous n'avez pas forcément besoin, à l'inverse certains services désactivés peuvent vous être utiles. On décomment un service en lui mettant un # devant. Voici un exemple de fichier inetd.conf :

#
# inetd.conf    This file describes the services that will be available
#               through the INETD TCP/IP super server.  To re-configure
#               the running INETD process, edit this file, then send the
#               INETD process a SIGHUP signal.
#
# Version:      @(#)/etc/inetd.conf     3.10    05/27/93
#
# Authors:      Original taken from BSD UNIX 4.3/TAHOE.
#               Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
# Modified for Debian Linux by Ian A. Murdock <imurdock@shell.portal.com>
#
# Modified for RHS Linux by Marc Ewing <marc@redhat.com>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Echo, discard, daytime, and chargen are used primarily for testing.
#
# To re-read this file after changes, just do a 'killall -HUP inetd'
#echo   stream  tcp     nowait  root    internal
#echo   dgram   udp     wait    root    internal
#discard        stream  tcp     nowait  root    internal
#discard        dgram   udp     wait    root    internal
#daytime        stream  tcp     nowait  root    internal
#daytime        dgram   udp     wait    root    internal
#chargen        stream  tcp     nowait  root    internal
#chargen        dgram   udp     wait    root    internal
#time   stream  tcp     nowait  root    internal
#time   dgram   udp     wait    root    internal
#
# These are standard services.
# Attention à ces deux services ce sont deux gros trous potentiels de sécurité
# j'ai désactivé le serveur ftp car j'en ai pas l'utilité
# ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
#
# Shell, login, exec, comsat and talk are BSD protocols.
# r-outils et autres à désactiver
#
#shell  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd
#login  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
#exec   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rexecd
#comsat dgram   udp     wait    root    /usr/sbin/tcpd  in.comsat
#talk   dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
#ntalk  dgram   udp     wait    root    /usr/sbin/tcpd  in.ntalkd
#dtalk  stream  tcp     waut    nobody  /usr/sbin/tcpd  in.dtalkd
#
# Pop and imap mail services et al
# serveur pop3 pour réseau local activé, si poste isolé à désactiver
#pop-2   stream  tcp     nowait  root    /usr/sbin/tcpd ipop2d
pop-3   stream  tcp     nowait  root    /usr/sbin/tcpd  ipop3d
#imap    stream  tcp     nowait  root    /usr/sbin/tcpd imapd
#
# The Internet UUCP service.
#
#uucp   stream  tcp     nowait  uucp    /usr/sbin/tcpd  /usr/lib/uucp/uucico -l
#
# Tftp service is provided primarily for booting.  Most sites
# run this only on machines acting as "boot servers." Do not uncomment
# this unless you *need* it.
#tftp   dgram   udp     wait    root    /usr/sbin/tcpd  in.tftpd
#bootps dgram   udp     wait    root    /usr/sbin/tcpd  bootpd
#
# Finger, systat and netstat give out user information which may be
# valuable to potential "system crackers."  Many sites choose to disable
# some or all of these services to improve security.
# outils de stats réseau à désactiver
#
#finger stream  tcp     nowait  root    /usr/sbin/tcpd  in.fingerd
#cfinger stream tcp     nowait  root    /usr/sbin/tcpd  in.cfingerd
#systat stream  tcp     nowait  guest   /usr/sbin/tcpd  /bin/ps -auwwx
#netstat        stream  tcp     nowait  guest   /usr/sbin/tcpd  /bin/netstat -f inet
#
# Authentication
#
# auth   stream  tcp     nowait    nobody    /usr/sbin/in.identd in.identd -l -e -o
#
# linuxconf stream tcp wait root /bin/linuxconf linuxconf --http
#swat      stream  tcp     nowait.400      root /usr/sbin/swat swat

Eliminer les scripts de lancement inutiles

Maintenant on va aller jetter un coup d'oeil dans les répertoires /etc/rc.d/rcX.d qui contiennent des liens vers les scripts de lancement de services, on va désactiver les services inutiles. Si vous démarrez à l'état de marche 5, voici ce que vous pourriez trouver dans le répertoire /etc/rc.d/rc5.d

S05apmd    Utile uniquement pour les portables, sert à gérer l'autonomie d'une batterie, à virer si vous avez un poste de bureau
S09pcmcia pour activer les services liés au PCMCIA, à virer si pas de PCMCIA
S10network active les interfaces réseau (eth0, ...)
S11portmap Utile si vous utilisez des services RPC comme NFS ou NIS
S15netfs lance le service NFS client, à désactiver si vous ne montez jamais de file systems d'un serveur NFS
S16ypserv pour lancer le serveur NIS, à désactiver si non utilisé
S20random ce n'est pas un daemon, mais un truc qui permet de générer bazar aléatoire, je vois pas trop son utilité mais vous pouvez le laisser, il n'y aucun risque niveau sécurité
S20rstatd service "r", à désactiver
S20rwhod idem, à désactiver
S20rusersd idem, à désactiver
S20bootparamd, idem tftp, sert pour les terminaux X ou autres clients "diskless", à désactiver
S30syslog permet de loguer l'activité des daemons lancés par inetd, à conserver
S34yppasswd si vous êtes un serveur NIS pour pouvoir changer de mot de passe, à désactiver si non utilisé (très vulnérable)
S35dhcp daemon DHCP sert pour obtenir une adresse IP, sert pour les câblés entre autres, à désactiver si non nécessaire
S40atd  utile pour le service at (similaire à cron), vous pouvez désactiver si vous vous en servez pas
S40crond  pour lancer le daemon cron qui permet de programmer des tâches à lancer, à virer si vous ne l'utilisez pas
S50inet    pour lancer le réseau,
S50snmpd pour lancer le daemon SNMP, permet de donner à des utilisateurs distants des informations détaillées sur votre système, à désactiver
S55named pour lancer le serveur DNS, à désactiver si vous ça ne sert à rien
S55routed pour router selon le protocole RIP, à désactiver
S57diald permet de lancer le daemon diald pour lancer une connexion internet automatiquement (du serveur ou d'un client du réseau local), à désactiver si vous vous en servez pas
S60lpd système d'impression
S60nfs pour lancer le serveur NFS, à désactiver si vous n'exportez pas vos systèmes de fichiers
S60mars-nwe pour lancer un serveur Netware de Novell, à désactiver si non nécessaire
S72autofs pour lancer l'automontage (peut s'appeller aussi S72amd), à virer si vous ne l'utilisez pas
S75keytable pour activer le clavier qui va bien (claver français azerty)
S75gated pour lancer d'autres protocoles de routage comme OSPF, à désactiver
S80sendmail pour lancer sendmail, à désactiver si vous ne l'utilisez pas
S85sound pour activer le son
S85gpm permet d'avoir la souris sur des applis textes comme Midnight Commander, à désactiver si inutile
S85http pour lancer le serveur Web (Apache), à désactiver si non utilisé
S86ypbind si vous êtes un client NIS, à désactiver sinon
S90squid pour lancer le proxy squid, pour partager la connexion internet, à désactiver si poste isolé
S90xfs pour activer le serveur de fonts X, nécessaire
S91smb pour lancer le serveur samba, si vous partager des file système ou des imprimantes vers des postes Windows, à désactiver sinon
S94ntpd pour lancer le serveur NTP (network time protocol) à désactiver (ancienne version S94xntp)
S95innd pour lancer le serveur de news innd, si non utilisé à désactiver
S99linuxconf permet à quelqu'un sur internet de faire de la maintenance sur votre système à travers une interface web, à désactiver
S99local c'est un lien vers /etc/rc.d/rc.local, où vous pouvez rajouter vos petits trucs

C'est une liste non exhaustive, d'un système à l'autre, le numéro de lancement peut changer. Pour désactiver le service SNMP par exemple il sufit d'abord de le localiser dans tous les répertoires /etc/rc.d/rcX.d:

find /etc/rc.d -name S50snmpd -print

Puis de supprimer tous les liens que vous trouverez.

ATTENTION: Ne supprimer pas le script de lancement sous /etc/rc.d/init.d
NOTE: Notez précisément ce que vous avez supprimé, au cas où vous vous voudriez réactiver le service.

Tapez maintenant la commande

ps aux | wc -l

Vous devriez avoir le nombre de process actifs, rebootez et retapez cette dernière commande, suivant le nombre de services que vous avez désactivé le nombre peut avoir diminué de manière significative.

Sécuriser /etc/passwd

Tout d'abord on va mettre en place les shadow password, comme ça tous les mots de passe seront contenus dans un fichier distinct de /etc/passwd, ce fichier /etc/shadow est en lecture seule pour root (droit 400 proprio root). La première chose qu'un hacker cherche à faire est de lire /etc/passwd, le fait de mettre les password ailleurs apportent une protection supplémentaire.
Pour activer les shadows password, c'est très simple en tant que root, vous devez taper:

pwconv

Dans le champ password de /etc/passwd (le deuxième) vous devriez trouver un x, un fichier /etc/shadow a été créé contenant les mots de passe crypté.
Maintenant on va supprimer autant que possible tous les comptes systèmes inutiles, si vous en avez pas besoin, supprimez les, car ce sont autant de portes d'entrée pour les hackers. Les comptes systèmes suivants sont nécessaires:
root, bin, daemon, adm, lp (si vous avez un système d'impression), mail (si serveur mail), news (si serveur de news), uucp (si vous utilisez UUCP), nobody
Ceux-ci sont facultatifs:
games, gopher, halt, sync, shutdown, operator, ftp (si serveur FTP anonyme), lists, xfs.

Sécuriser FTP

Si vous voulez activer FTP, vous pouvez le faire avec décommentant la ligne le concernant dans /etc/inetd.conf, on va faire cependant en sorte que le système logue tout ce qui concerne FTP. La ligne dans /etc/inetd.conf est:

ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l  -L -i -o

avec:
-l chaque session FTP est loguée
-L toutes les commandes utilisateurs sont loguées
-i chaque fichier récupéré est logué
-o chaque fichier envoyé est logué

Maintenant vous allez créer un fichier /etc/ftpusers qui va contenir la liste des utilisateurs qui n'ont pas le droit d'ouvrir une session FTP sur votre système, dans ce fichier vous devrez y mettre tous les utilisateurs systèmes, voici un exemple de /etc/ftpusers:
root
bin
daemon
adm
lp
mail
news
nobody

Sécuriser Telnet

On doit empêcher que root puisse accèder au système via telnet, ça force les utilisateurs à se loguer sur leur compte habituel puis de faire un su s'ils veulent devenir root. Pour cela le fichier /etc/securetty doit contenir uniquement des terminaux locaux (du style ttyX) et aucunement des pseudos terminaux (du style ttypX) qui permettent à un utilisateur distant de se loguer à distance en tant que root. Voici un exemple de /etc/securetty :

tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8

Maintenant quand vous vous connectez avec telnet, vous avez toujours un petit commentaire qui s'affiche, du style "bienvenu sur la machine untel", vous pouvez modifier cela en mettant le commentaire souhaité dans le fichier /etc/issue.
Attention sous une Mandrake, le fichier /etc/issue est regénéré à chaque boot, pour éviter cela, modifiez la ligne qui va bien dans /etc/rc.d/rc.local.

Les TCP Wrappers

Les TCP Wrappers rajoutent une protection supplémentaire aux services lancés par inetd, c'est en fait un contrôle d'accès, par exemple pour se connecter avec telnet, il faut d'abord passer le contrôle des TCP Wrappers, une fois passer ce contrôle on peut alors se connecter à telnet, si on ne passe pas le contrôle des TCP Wrappers, la session telnet n'est même pas ouverte. Les TCP Wrappers permettent évidemment de loguer chaque connexion (réussie ou pas). Les fichiers de configuration des TCP Wrappers pour fixer les accès sont /etc/hosts.allow et /etc/hosts.deny. Ces fichiers déterminent qui peut ou ne peut pas accèder aux systèmes (ou du moins aux services lancés par inetd).
La règle est d'interdire tout à tout le monde, puis d'autoriser uniquement certains postes très limités à utiliser vos services. La syntaxe est la suivante:

service: source(adresse IP, réseau, ou nom): optionnel: ALLOW ou DENY

Par exemple /etc/hosts.deny:

ALL: ALL DENY

Pour /etc/hosts.allow

in.telnetd:192.168.13.10::ALLOW
in.ftpd:192.168.13.0/255.255.255.0::ALLOW

NOTES:  - Pour le nom du service in.telnetd est le dernier champ de la ligne telnet du fichier /etc/inetd.conf
                   - Préférez les adresses IP, plutôt que le nom
                    - 192.168.13.10 est l'adresse IP d'un hôte autorisé
                    - 192.168.13.0/255.255.255.0 est un sous réseau complet

Pour finir

Maintenant vous pouvez faire en sorte que seuls certains utilisateurs aient le droit d'utiliser certaines commande "puissantes" comme su. En limitant le nombre de personnes pouvant utiliser ces commandes vous améliorez la sécurité de votre site. Pour cela vous allez créer un groupe d'utilisateur privilégié, généralement il est appelé wheel, mais libre à vous de l'appeler comme vous voulez, choisissez quand même un nom discret, passe partout, pour ne pas éveiller les soupçons.
Maintenant pour que su soit lancé uniquement par les membres du groupe wheel, vous devrez taper:
chgrp wheel /bin/su
chmod 4750 /bin/su
Faites de même pour les autres commandes.
NOTE: N'oubliez pas qu'un utilisateur peut très bien appartenir à deux groupes

On a vu plus haut qu'il fallait éviter d'avoir des fichiers .rhosts ou hosts.equiv, on va donc bloquer ces deux fichiers pour que personne ne puisse les recréer. Pour bloquer les fichiers, il suffit de taper les commandes:

touch /.rhosts /etc/hosts.equiv
chmod 0 /.rhosts /etc/hosts.equiv

 
Retour haut de la page