Conseils de securite pour machines unix sur un reseau TCP/IP

vendredi 3 juillet 2009
par  Jerome ROBERT
popularité : 12%

CONSEILS DE SECURITE SUR
L'ADMINISTRATION DE MACHINES UNIX
SUR UN RESEAU TCP/IP



Jean-Luc Archimbaud   CNRS/UREC
charge de mission "securite informatique" au CNRS


Ce document peut etre diffuse sans restriction, mais dans son integralite.
La version PostScript est disponible par "ftp anonymous" sur la machine
ftp.urec.fr (134.157.4.4) dans le fichier
pub/securite/Unix/conseils.admin.4.ps. N'hesitez pas a me faire part de vos
corrections et suggestions a l'adresse electronique : jla@imag.fr.


La securite informatique n'est plus un domaine reserve a la Defense
Nationale. Sans devenir paranoiaques, responsables et utilisateurs des
systemes d'information doivent s'appliquer a limiter les risques
qu'encourent leurs donnees et leurs materiels.
Il faut considerer que s'il n'y a pas de responsable securite designe :

Le Responsable de la securite d'un systeme est l'administrateur de ce
systeme

Ce document est donc destine aux administrateurs de stations de travail
Unix, pour les aider dans cette tache. Il a pour but de fournir les
conseils de base pour rendre une machine Unix, connectee sur un reseau
TCP/IP, moins vulnerable aux pirates. C'est une compilation de differentes
publications, volontairement limitee a n'etre qu'un "livre de recettes" au
detriment de l'analyse des failles et des remedes.

Il est limite a l'aspect logiciel (Unix), et n'aborde pas les conseils
generaux de protection contre le feu, le vol, ... Il ne s'adresse ni aux
gourous Unix, ni aux specialistes de securite informatique.

Unix est un systeme d'exploitation cree par des programmeurs, pour des
programmeurs, dans un laboratoire de recherche. La securite n'a donc pas
ete une preoccupation dominante lors de sa conception. Mais, plus que d'un
atavisme, sa vulnerabilite provient principalement de :
* Sa popularite : c'est le systeme d'exploitation le plus connu. Beaucoup
de pirates ont exploite et exploiteront les bugs d'un systeme dont le
source est facilement disponible.
* L'attitude des vendeurs : ils livrent un systeme totalement ouvert.



1. CONSEILS AUX ADMINISTRATEURS

En tant que Responsable de la securite sur votre machine, vous devez
effectuer les verifications necessaires et mettre en place les outils
fournis par les constructeurs pour la proteger. Les paragraphes suivants
listent ces outils. Mais la technique est loin de proteger integralement
votre systeme. L'attention et la vigilance sont vos 2 principales armes.
Les militaires ont coutume de dire que "La securite, c'est 20% de technique
et 80 % de bon sens".
Et, avant  toute chose, n'oubliez pas cette conduite a tenir : 

En cas de probleme de piratage, avertissez immediatement 
votre responsable hierarchique


1.1. VERIFICATIONS LORS DE LA MISE EN SERVICE DE LA MACHINE

Apres l'installation de votre systeme d'exploitation sur disque (a la
livraison ou lors d'un changement de version), faites une sauvegarde
complete et un "ls -Rl" que vous conserverez. Ceci pourra vous servir de
reference.

1.1.1. /etc/passwd et /etc/group

Sur ces fichiers  :
* Verifiez que le proprietaire est root avec les acces 444; et que tous les
utilisateurs et tous les groupes sont declares avec un mot de passe  (le
second champs de chaque entree ne doit pas etre vide).
* Si vous n'utilisez pas NIS (les "Yellow Pages"), supprimez la ligne dont
le premier caractere est + (si elle existe).
* Si vous l'utilisez, verifiez que les lignes "+ : :0 : :0 : : :" et "+ :"
sont absentes dans les fichiers de la station serveur. Elles ne doivent
etre presentes que sur les machines clientes.

Dans /etc/passwd :
* Seul l'administrateur  doit posseder 0 comme "user id" (UID).
* Modifiez les mots de passe fournis avec le systeme ainsi que le mot de
passe pour root que vous avez utilises lors de l'installation.
* Otez les utilisateurs de service (guest, visitor, tutor, demo, ...).
Verifiez que les comptes anonymes (sys, uucp, bin, adm, lp, ...) ont "*"
comme mot de passe.
* Utilisez les extensions des nouvelles versions d'Unix sur la gestion des
mots de passe. Exemples :
	Pour que les mots de passe chiffres n'apparaissent pas dans le fichier
passwd (shadow password)
	Pour limiter la duree de validite (aging) des mots de passe. Choisissez
une duree qui est un bon compromis en fonction du profil de vos
utilisateurs.

1.1.2. Fichiers sensibles

* Sous /dev :
	L'acces au directory doit etre 755. Le super utilisateur "root" doit etre
le proprietaire de tous les fichiers, exceptes les fichiers relatifs aux
terminaux actuellement login.
	Les fichiers kmem, mem et les partitions des disques (avec les noms sd*,
rxy*, ... selon le materiel) doivent avoir l'acces 0 pour "other".

* Verifiez que le directory /lost+found possede l'acces 700.

* Mettre l'acces t a tous sur /tmp: chmod o+t /tmp

* Si votre systeme offre la possibilite de "secure terminal", mettez la en
pratique : enlevez le mot "secure" dans chaque ligne du fichier /etc/ttytab
(ou /etc/ttys). L'absence de cet attribut proscrira le login direct sous
root. Le passage en super utilisateur se fera uniquement par la commande
su.. Specifiez, aussi les quelques utilisateurs qui pourront faire su root
lors de la declaration du groupe wheel dans /etc/group.

* Supprimez "." (le directory courant) dans les regles de recherche de
l'utilisateur root (la variable path est initialisee dans /.cshrc et PATH
dans /.profile).

* Le fichier /.rhosts est tres dangereux. Si vous ne l'avez pas cree en
pleine connaissance de cause et s'il existe, detruisez le. Si vous
l'utilisez, verifiez ses acces et son contenu.

* Effacer le fichier /etc/hosts.equiv si vous n'en avez pas l'utilite. Dans
le cas contraire, verifiez que ce fichier ne contient pas une seule ligne
d'un seul caractere : +.

* Si vous n'utilisez pas NFS, ou si vous ne desirez pas rendre accessible
(exporter) une partie de votre arborescence, detruisez le fichier
/etc/exports. Dans le cas contraire, verifiez que chaque nom de directory
que vous desirez "exporter" est suivi des noms des stations qui ont le
droit d'y acceder. Autrement, n'importe qu'elle station pourra "monter" ce
directory. La syntaxe depend des versions d'Unix (faites : man exports).

* Enlevez, s'ils sont presents, les alias "decode" et "uudecode" dans le
fichier aliases sous /etc ou /usr/lib.

* Supprimez l'acces w a "other " sur les fichiers aliases, aliases.dir et
aliases.pag sous /etc ou /usr/lib.

* Dans le ficher sendmail.cf (sous /etc ou sous /usr/lib), verifiez que la
variable W (wizard password) a pour valeur le caractere etoile.
Concretement, dans ce fichier, la ligne commencant par OW (la lettre O
suivie de la lettre W) doit etre de la forme : OW*

* cron :
	Limitez autant que faire ce peut l'acces au batch d'Unix (commandes
crontab et at). Creez sous /usr/lib/cron (ou sous /usr/spool/cron) les
fichiers cron.allow et at.allow avec uniquement une ligne contenant la
chaine de caracteres "root" (uniquement root pourra utiliser cron). A la
demande, vous ajouterez les utilisateurs qui ont besoin du cron dans ces
fichiers.
	Supprimez tous les acces a "other" sur le fichier spool/cron/crontabs/root
sous /usr ou /usr/var. Verifiez que root est le seul utilisateur a posseder
l'acces w sur toutes les procedures lancees par ce fichier.

* Verifiez que l'executable chroot (sous /usr/bin ou /usr/etc) possede
l'acces 700 

1.1.3. inetd.conf

Le daemon inetd, toujours actif, offre des services tels que telnet,
rlogin, ftp, ... . Ces services, qui s'executent sur votre machine, sont
accessibles depuis les machines du reseau. Seuls les services declares dans
le fichier inetd.conf (sous /etc ou /usr/lib) ou /etc/servers repondront
aux machines distantes. N'hesitez pas a faire du menage dans ce fichier, en
ajoutant un # devant les services que vous n'utilisez pas.

Ce peut etre :
* ruserd : permet a un pirate de connaitre les utilisateurs connectes sur
votre station.
* tftpd : version simplifiee de ftp, il est principalement utilise pour
charger le systeme d'equipements sans disque (terminal X par exemple) via
le reseau.  Indiquez un nom de directory apres l'argument  -s dans la ligne
qui lance le daemon. Si l'argument -s n'est pas prevu, sachez que votre
version de tftpd est vieille et possede un gros bug de securite.

De maniere plus restrictive encore, si votre station n'est jamais accedee
depuis une autre machine (donc dans le sens entrant), vous pouvez supprimer
:
* fingerd : tres utile au demeurant (pour obtenir le numero de telephone
d'un utilisateur, par exemple); il peut permettre a un pirate, depuis une
machine quelconque du reseau, d'avoir des informations sur  les
utilisateurs de votre station.
* rlogind : gere les rlogin entrants
* rshd : gere les executions de commandes sur votre machine, lancees depuis
une machine distante
* rexecd  : le pendant de rshd pour les fonctions
* telnetd : gere les acces interactifs a votre machine par telnet
* ftpd : gere les transferts de fichiers par ftp initialises depuis une
machine distante
* rpc.* : repond aux requetes RPC (Yellow Pages, NFS, ...) venant de
machines distantes
* talkd : gere l'echange de messages (commande talk)
*rwalld : accepte les messages generes par rwall depuis une station du
reseau

Ces suppressions n'affectent pas le sens sortant. Vous pourrez toujours,
depuis votre station, utiliser telnet, ftp, ...

1.1.4. /etc/rc*

Les scripts /etc/rc* lancent des daemons reseaux, similaires a inetd. Les
scripts livres avec les systemes ont la facheuse tendance d'activer des
daemons inutiles. Il est preferable de ne pas les lancer (en ajoutant un #
devant les lignes add hoc du script) si vous n'en avez nul besoin. Entre
autres :
* rwhod : diffuse regulierement a toutes les machines du reseau des
informations concernant les utilisateurs login sur votre station.
* sendmail : pour recevoir du courrier (mail) venant d'autres machines du
reseau (l'option de debug distant d'anciennes versions de sendmail est
dangereuse). Attention, ce daemon est obligatoire pour la messagerie
inter-machines.
* routed : met a jour et diffuse des tables de routage IP de maniere
automatique et incontrolable.
* nfsd : pour etre serveur NFS.
* biod : pour etre client NFS.

1.2. ACCES TCP/IP

1.2.1. Rappels sur TCP/IP

Sur un reseau TCP/IP, pour acceder a un service offert par une machine
(interactif, transfert de fichiers, nfs, rwho, lpr ...) il faut que ce
service soit ouvert : le daemon doit etre lance et vous devez posseder les
autorisations necessaires (mot de passe, ...). Mais, avant cette phase, il
faut que les machines puissent dialoguer en TCP/IP. C'est ce que l'on peut
appeler "l'acces TCP/IP". En limitant les possibilites d'acces TCP/IP a
votre machine, vous minimisez d'autant les risques de piratage.
Avec TCP/IP, l'acces est toujours symetrique. Si vous pouvez acceder a une
machine X, un utilisateur sur cette machine X pourra acceder a votre
materiel. Inversement, si vous ne pouvez pas acceder a X, X ne pourra pas
vous atteindre. Donc, si vous ne pouvez pas atteindre un reseau, vous etes
certain que les machines de ce reseau ne pourront pas vous pirater. Par
contre, si vous pouvez acceder aux ordinateurs du monde entier ... L'acces
TCP/IP est la consequence du routage que vous installez sur vos stations.

1.2.2. Routage IP

Les routages IP installes sur votre machine (visualises par la commande
netstat -r) determinent les acces TCP/IP de votre machine. Voici quelques
conseils :
* Ne mettez en place que les routages necessaires aux acces dont vous avez
besoin.
* Sauf si vous connaissez RIP, supprimez le daemon routed lance dans un des
scripts /etc/rc*. Utilisez de preference le routage manuel avec des
commandes route.
* Mesurez bien la consequence d'une route par defaut (commande route add
default ...) : toutes les machines TCP/IP du Monde peuvent essayer d'entrer
sur votre systeme.
* De maniere plus drastique, vous pouvez utiliser le routage par machine.
Ainsi la commande : route add 129.89.32.2 ... vous permettra de communiquer
avec cette machine particuliere, sans ouvrir l'acces a toutes les machines
du reseau 129.89.

1.2.3. Passerelle avec l'exterieur

Si votre laboratoire dispose d'un reseau Ethernet TCP/IP, raccorde sur un
reseau federateur (d'un campus ou d'une region) lui-meme connecte sur un
reseau national, ...  il peut etre sage d'installer un  equipement avec 2
coupleurs Ethernet entre votre reseau interne et le reseau federateur. Il
sera routeur IP, passerelle entre votre laboratoire et le monde exterieur.
Ce peut etre un materiel dedie ou une banale station de travail 
En limitant le routage IP (en otant, par exemple, le daemon routed sur la
passerelle et en ajoutant aucune commande route add ...), les stations
internes ne seront jamais inquietees. Il vous suffira de surveiller l'acces
a cette passerelle; et de n'y installer aucun daemon ou utilitaire
dangereux et aucune donnee confidentielle. Mais attention, un utilisateur
qui a pu entrer sur la passerelle pourra acceder aux machines internes.

1.3. OPERATIONS A EFFECTUER REGULIEREMENT

1.3.1. Sauvegardes

De maniere evidente, une bonne politique de sauvegardes periodiques est
imperative pour la securite de votre systeme. Il faut pouvoir revenir a un
etat anterieur propre et sur. Ne negligez pas la protection des supports de
sauvegardes contre les risques physiques (effacement, vol, feu ...).
Utilisez de preference dump   et restore  qui sont reserves a
l'administrateur.
Pensez que vous pouvez autoriser un groupe d'utilisateurs (des operateurs
par exemple) a effectuer des sauvegardes, sans leur donner le mot de passe
de root. Il suffit d'ecrire un tout petit programme qui lance les sauvegardes,
dont le proprietaire sera root,  avec le setuid positionne (chmod u+s) et
executable par le groupe add-hoc.


1.3.2. Mot de passe

Dans /etc/passwd :
* Otez les utilisateurs qui ne travaillent plus sur votre machine.
Detruisez aussi tous les fichiers de ces utilisateurs. La commande suivante
liste les fichiers qui appartiennent a personne (en fait les fichiers dont
l'UID du proprietaire n'est plus dans /etc/passwd).
	find / -nouser -o -nogroup -print
* Verifiez que tous possedent un mot de passe et que 2 utilisateurs n'ont
pas le meme UID.
* Verifiez que le caractere "+" n'a pas disparu de la ligne "+ : :0 : :0 :
: :" si elle existe.

Rappelez a vos utilisateurs (par mail ou par motd) de changer leur mot de
passe.

1.3.3. Root

Parcourez l'historique des login (et des su) de root. Ces traces sont
stockees dans des fichiers tels que messages* ou sulog  ou  loginlog sous
/usr/adm ou /var/adm. Vous pouvez ajouter l'affichage du contenu de ces
fichiers dans votre .login (ou l'equivalent).

1.3.4. Verifications sur certains fichiers

Verifiez que :
* Les fichiers .profile, .cshrc, .login ... sous la racine ne sont pas
accessibles en ecriture a tous.
* Il n'y a pas de fichier etrange dont le nom commence par un "." sous /tmp
et /usr/tmp.
* Le contenu de /etc/hosts.equiv et de /etc/exports est correct.
* Les executables des programmes su, login et telnet sont ceux d'origine.
* Les fichiers lances par cron pour root ne presentent aucune anomalie
(dans /usr/var/spool/cron/crontabs/root ou ...)
* Il n'y a pas plethore de fichiers avec l'acces w a "other" dans
l'ensemble de votre systeme, avec la commande :
	find / -type f -perm -2 -exec ls -al {} \;

1.3.5. Sushi

Un Sushi (Super User SHell Interactive), permet a un utilisateur d'etre
sous le shell avec tous les privileges de root. C'est le programme shell,
appartenant a root, avec le Set-User-ID bit (SUID) positionne. Pour
depister un Sushi, verifiez regulierement que les fichiers qui
appartiennent a root avec le Set-User-Id bit sont uniquement des
utilitaires. Il ne doit pas y avoir ce genre de fichier sous une
arborescence d'utilisateur. La commande :
find / -user root -perm -4000 -exec ls -al {} \;
permet de lister ce type de fichier.

1.3.6. .rhosts et .netrc

Controlez les acces (700 de preference) et le contenu des fichiers .rhosts
chez vos utilisateurs. Ils permettent d'entrer sur votre systeme sans mot
de passe local. Pour afficher le contenu de ces fichiers, vous pouvez
utiliser la commande : find /users -name .rhosts -print -exec cat {} \;
Verifiez que aucun utilisateur a cree un fichier .netrc sous son home
directory.

1.4. CONSEILS GENERAUX

1.4.1. Habitudes de travail

* Le mot de passe de root est la clef qui ouvre toutes les portes :
choisissez le apres reflexion, changez le tres regulierement, ne le
divulguez pas. 
* Faites logout chaque fois que vous quittez votre poste de travail.
* Reservez le login sous root a l'administration du systeme. Utilisez un
autre login lorsque vous n'avez pas besoin de privilege.
* Ne laissez jamais une autre personne travailler sous root, meme pour
quelques minutes.
* Faites /bin/su  au lieu de su pour acceder a root.
* Dans votre fichier .login ou .profile, rajoutez la commande who. Elle
peut vous permettre de detecter des utilisateurs qui ne devraient pas etre
presents sur votre machine.
* Utilisez de preference les utilitaires d'administration fournis avec
votre machine, plutot que l'acces direct aux fichiers de configuration avec
un editeur.
* Utilisez un compte special, avec le minimum de privilege, lors des
demonstrations, essais, ... en presence d'autres personnes.

1.4.2. /etc/hosts.equiv

Avec hosts.equiv vous deleguez entierement les controles de securite aux
machines citees dans ce fichier. Vous faites alors totalement confiance a
d'autres administrateurs. Ceci est tres dangereux. Donc, sauf besoin tres
particulier, proscrivez l'utilisation du fichier hosts.equiv (detruisez
le).

1.4.3. Groupes

* Si des utilisateurs desirent partager des fichiers, ne les laissez pas
ceder a la facilite de l'acces rw a "other" sur les fichiers. Les
possibilites des groupes (cf /etc/group, /etc/passwd, umask 007, chown,
chmod, newgrp, ...) resolvent ce probleme d'acces partage.
* Chaque compte declare sur votre machine doit correspondre a une et une
seule personne physique clairement identifiee. Vous devez posseder les
coordonnees de chaque utilisateur, avec son type d'activite sur votre
machine.

1.4.4. Divers

* Installez regulierement les nouvelles versions de votre systeme
d'exploitation : elles corrigent les erreurs de securite et les nouvelles
versions d'Unix sont de plus en plus securisees.
* Installez les nouvelles fonctions qui obligent a posseder un mot de passe
pour relancer une station en mode mono-utilisateur "single user" (dans cet
etat, l'utilisateur a tous les privileges). Si votre systeme n'offre pas
cette possibilite (mot de passe sur PROM sur SUN, cle sur IBM ...), il faut
neanmoins prendre en compte ce risque, en controlant par exemple l'acces
physique aux machines.
* Verifiez toujours le contenu d'un archive avant de l'extraire.
* Evitez d'utiliser UUCP, trop ancien avec trop de trous de securite.
* Ne creez un programme avec SUID root qu'avec beaucoup de precautions et que
si vous etes un programmeur experimente. Proteger le source du programme.
Ne faites pas de shellscript SUID root.
* Si vous installez un ftp anonymous sur une de vos machines, ne le mettez
pas sur votre serveur principal et creez un environnement restreint (cf man
ftpd)
* Sensibilisez vos utilisateurs aux problemes de securite. La premiere
action est de diffuser largement le chapitre "Conseils aux utilisateurs".
* Les conseils aux utilisateurs ci-apres doivent aussi etre suivis par les
administrateurs.


2. CONSEILS AUX UTILISATEURS

Une regle officielle et primordiale : si vous decouvrez un piratage, un
essai de piratage ou un etat suspect : 
avertissez immediatement l'administrateur de la machine et 
votre responsable hierarchique

2.1. Mot de passe

* Prenez du temps pour le choisir.
* Changer le regulierement.
* Ne reprenez pas un mot de passe que vous avez deja utilise.
* Modifiez le avant de partir en vacances.
* Ne l'ecrivez pas, ne le confiez a personne.
* Ne choisissez pas :
	  * Votre nom, prenom ou celui de vos proches.
	  * Une information personnelle : numero de telephone, ...
	  * Un mot contenu dans un dictionnaire.
	  * Une variation (inversion, initiales, ...) sur les 3 types precedents.
* Un bon mot de passe doit etre compose :
	  * d'au moins 6 caracteres.
	  * d'un melange de majuscules, minuscules, chiffres et caracteres de
ponctuation.
* Exemple : c'est1KO
Pour decouvrir un mot de passe, le pirate ne teste pas toutes les
combinaisons de caracteres. Il s'appuie sur les habitudes de l'utilisateur
moyen. Il essaie, entre autres, toutes les informations relatives a
l'utilisateur (nom, ... avec les variations) et les mots du dictionnaire.

Si vous accedez a une machine a travers des reseaux, sachez que votre mot
de passe circule en clair sur les reseaux que vous traversez.

2.2. umask

La commande umask permet de creer un masque qui definit les modes d'acces
attribues par defaut aux nouveaux fichiers crees (cf man umask).
Generalement, ce masque est initialise a 002 ou 022 pour tous les
utilisateurs du systeme, ce qui correspond a l'acces 775 ou 755. Ainsi, par
defaut, tout nouveau fichier est accessible en lecture a tous. Ceci est
trop ouvert.
En ajoutant la commande umask dans votre .cshrc ou .profile, vous pourrez
modifier l'acces par defaut. N'hesitez pas a utiliser umask 077  qui
assurera une meilleure protection sur les fichiers que vous creerez.

2.3. Travail en groupe

Si vous devez partager un meme environnement de travail avec plusieurs
collaborateurs, demandez a l'administrateur d'enregistrer tous les membres
de votre equipe sous un meme groupe. Pour stocker les fichiers partageables
sont un repertoire "Commun" :
* Creez un sous-repertoire qui contiendra les objets partageables : mkdir
Commun
* Donnez les acces rwx au groupe sur ce repertoire : chmod g+rwx Commun
* Pour eviter certains conflits d'acces : chmod g+t Commun
* Rajoutez dans votre .login ou .profile : umask 007

2.4. Divers

Faites logout chaque fois que vous quittez votre poste de travail (ne
serait ce que 5 minutes).
Dans les regles de recherche (path ou PATH), specifiez le repertoire
courant "." en fin de liste et non au debut.
Lorsque vous accedez a votre machine, lisez attentivement l'heure et la
date de votre derniere connexion, information generalement contenue dans la
banniere d'accueil.
Utilisez a bon escient .rhosts et verifiez regulierement son contenu.
Sachez que l'administrateur d'une machine (root) peut lire tous vos
fichiers et votre boite a lettres.


3. DOCUMENTS

Documents ayant inspires ce "livre de recette" :

* Improving the security of your unix system
	SRI-David A. Curry
* Security features guide
	Sun Microsystems OS 4.0.3
* The Internet Worm Program : An Analysis
	Eugene H. Spafford
* Unix System Administration (chapitre security)
	David Fiedler & Bruce H.Hunter
* Advisories
	CERT-CC
* Guide de securite pour les administrateurs de systemes Unix
	Christian Pelissier
* Site Security Handbook (RFC1244)
	P. Holbrook & J. Reynolds
                                                                  
                         

Jean-Luc Archimbaud      IMAG, 46 av Felix Viallet, 38031 Grenoble Cedex
    CNRS / UREC                     jla@imag.fr     76 57 48 93

Commentaires  Forum fermé

Statistiques

Dernière mise à jour

mercredi 4 octobre 2023

Publication

273 Articles
Aucun album photo
Aucune brève
6 Sites Web
2 Auteurs

Visites

53 aujourd’hui
108 hier
827651 depuis le début
3 visiteurs actuellement connectés