Stratégies anti-hackers : Écoutes sur un réseau informatique - sniffers - Sécuriser un réseau - Mesures de protection
Un dictionnaire de langue anglaise indique que sniffing (écoute) est un terme polysémique. Le verbe to sniff possède en effet quatre acceptions:
1.Inhaler, renifler, prendre une brève inspiration d'air par le nez comme lorsqu'on hume quelque chose.
2.Se servir du sens olfactif, comme lors d'une dégustation ou d'une recherche.
3.Considérer quelque chose de manière méprisante ou dédaigneuse.
4.(familier) Fouiner, fureter, espionner.
La dernière signification est celle qui caractérise le mieux l'activité des hackers qui nous intéresse ici.
Qu'est-ce qu’une écoute sur un réseau?
L’écoute ou sniffing permet à un attaquant de compromettre la sécurité d'un réseau d'une manière passive. Dans la terminologie propre à la sécurité des réseaux, un sniffer est un programme ou un outil qui surveille passivement un réseau informatique en vue d'y trouver des informations susceptibles d'intéresser un attaquant. Ces informations sont généralement relatives à l'authentification ; ainsi, des noms d'utilisateur et des mots de passe permettront d'accéder à un système ou à une ressource. La plupart des rootkits contiennent des sniffers. Si l’un de vos systèmes Unix est compromis, il est très vraisemblable qu'il exécute un sniffer.
Fonctionnement
Il existe deux grandes écoles de la technique d’écoute: l'ancienne et la nouvelle. Auparavant, les ordinateurs étaient connectés via un média partagé. Ils étaient rattachés au même segment réseau et la totalité du trafic était visible par chacun. Les cartes réseau prenaient en charge le filtrage au niveau du matériel, de manière à ce que l'ordinateur relié ne voie que le trafic qui lui était destiné et non pas celui des autres. Il ne s'agissait pas en réalité d'une fonctionnalité de sécurité, car elle n'était conçue que dans le but d'éviter de surcharger la machine. Un logiciel de sniffing désactive ce filtre et met la carte dans un mode appelé «promiscuité». Il a été spécialement conçu pour traiter les saturations du trafic, soit à des fins d'analyse, soit dans le but de le capturer.
De nos jours, de plus en plus d'ordinateurs sont reliés par des commutateurs. Au lieu d'envoyer le trafic à toutes les extrémités du réseau, ces commutateurs filtrent le trafic au niveau du hub, ce qui empêche de voir le trafic des autres, même en mode de promiscuité. En conséquence, les pirates doivent attaquer le dispositif commutateur/routeur afin de rediriger les flux de trafic (ce que nous décrirons plus loin) ou se contenter de surveiller le trafic destiné à l'hôte qu'ils ont compromis.
Lorsque du trafic réseau entre dans une machine, il est tout d'abord pris en charge par le pilote Ethernet. Celui-ci transmet ensuite les paquets à la pile de protocoles TCP/IP (Transmission Control Protocol/Internet Protocol), laquelle les envoie aux applications. Le logiciel d’écoute se connecte directement au pilote Ethernet et fait une copie du trafic qu’il reçoit. Unix propose un ensemble d'interfaces ouvertes pour réaliser cette opération, alors que les systèmes Windows offrent très peu d'outils en la matière. C'est pourquoi on trouve généralement des sniffers dans les rootkits Unix et rarement dans les rootkits Windows.
Les cibles des écoutes
Un réseau regorge d'informations propres à éveiller l'intérêt d'un observateur. Les plus évidentes sont celles relatives à l'authentification (les noms d'utilisateur et les mots de passe) dont l’interception peut ensuite permettre d'accéder à des ressources. Beaucoup d'autres informations peuvent également être exploitées, comme les e-mails ou les messageries instantanées. Tout ce qui passe sur un réseau est exposé à l'espionnage.
Les informations d'authentification
Les sections suivantes illustrent par des exemples les différents types de trafics susceptibles d'attirer un attaquant qui surveille un réseau. Ces exemples, classés par protocole ou par service, ne prétendent pas couvrir le sujet de façon exhaustive.
Dans l'exemple de la section suivante, le texte en gras correspond aux informations envoyées par un programme client et le texte normal à celles envoyées par le serveur. Dans presque tous les cas, nous ne nous intéressons qu'au trafic généré par le client, car il s’agit de celui qui renferme les informations d'authentification. Des sniffers plus sophistiqués peuvent également examiner le trafic du serveur afin de filtrer les tentatives d'authentification qui ont échoué.
Vous trouverez ci-après un bref aperçu des types d'informations d'authentification pouvant être récupérées via leurs protocoles respectifs. Ces exemples ont été simplifiés; de plus, la version actuelle de certains de ces protocoles est nantie de mécanismes d'authentification plus sophistiqués qui réduisent les risques encourus. Dans le cas des protocoles Internet courant, il existe une RFC (Request For Comments) qui explique les détails des spécifications.
telnet (port23)
Telnet est le service qu'un attaquant qui tente d'obtenir des informations sur les utilisateurs va surveiller en priorité. Aujourd'hui, telnet est de moins en moins utilisé en raison de son manque de sécurité; l'intérêt que les hackers lui portent décroît donc également. Telnet ne fournit aucune sécurité au niveau de la session: il envoie le nom d'utilisateur et le mot de passe en clair sur le réseau, comme le montrent les lignes suivantes:
De nos jours, de plus en plus d'ordinateurs sont reliés par des commutateurs. Au lieu d'envoyer le trafic à toutes les extrémités du réseau, ces commutateurs filtrent le trafic au niveau du hub, ce qui empêche de voir le trafic des autres, même en mode de promiscuité. En conséquence, les pirates doivent attaquer le dispositif commutateur/routeur afin de rediriger les flux de trafic (ce que nous décrirons plus loin) ou se contenter de surveiller le trafic destiné à l'hôte qu'ils ont compromis.
Lorsque du trafic réseau entre dans une machine, il est tout d'abord pris en charge par le pilote Ethernet. Celui-ci transmet ensuite les paquets à la pile de protocoles TCP/IP (Transmission Control Protocol/Internet Protocol), laquelle les envoie aux applications. Le logiciel d’écoute se connecte directement au pilote Ethernet et fait une copie du trafic qu’il reçoit. Unix propose un ensemble d'interfaces ouvertes pour réaliser cette opération, alors que les systèmes Windows offrent très peu d'outils en la matière. C'est pourquoi on trouve généralement des sniffers dans les rootkits Unix et rarement dans les rootkits Windows.
Les cibles des écoutes
Un réseau regorge d'informations propres à éveiller l'intérêt d'un observateur. Les plus évidentes sont celles relatives à l'authentification (les noms d'utilisateur et les mots de passe) dont l’interception peut ensuite permettre d'accéder à des ressources. Beaucoup d'autres informations peuvent également être exploitées, comme les e-mails ou les messageries instantanées. Tout ce qui passe sur un réseau est exposé à l'espionnage.
Les informations d'authentification
Les sections suivantes illustrent par des exemples les différents types de trafics susceptibles d'attirer un attaquant qui surveille un réseau. Ces exemples, classés par protocole ou par service, ne prétendent pas couvrir le sujet de façon exhaustive.
Dans l'exemple de la section suivante, le texte en gras correspond aux informations envoyées par un programme client et le texte normal à celles envoyées par le serveur. Dans presque tous les cas, nous ne nous intéressons qu'au trafic généré par le client, car il s’agit de celui qui renferme les informations d'authentification. Des sniffers plus sophistiqués peuvent également examiner le trafic du serveur afin de filtrer les tentatives d'authentification qui ont échoué.
Vous trouverez ci-après un bref aperçu des types d'informations d'authentification pouvant être récupérées via leurs protocoles respectifs. Ces exemples ont été simplifiés; de plus, la version actuelle de certains de ces protocoles est nantie de mécanismes d'authentification plus sophistiqués qui réduisent les risques encourus. Dans le cas des protocoles Internet courant, il existe une RFC (Request For Comments) qui explique les détails des spécifications.
telnet (port23)
Telnet est le service qu'un attaquant qui tente d'obtenir des informations sur les utilisateurs va surveiller en priorité. Aujourd'hui, telnet est de moins en moins utilisé en raison de son manque de sécurité; l'intérêt que les hackers lui portent décroît donc également. Telnet ne fournit aucune sécurité au niveau de la session: il envoie le nom d'utilisateur et le mot de passe en clair sur le réseau, comme le montrent les lignes suivantes:
FTP (port21)
Le service FTP (File Transfer Protocol), qui sert à transmettre des fichiers via un réseau, envoie également les informations d'authentification en clair. À la différence de telnet, FTP autorise également les accès anonymes aux fichiers; dans ce cas, l'utilisateur anonyme prend le nom «anonymous» ou «ftp» et choisit un mot de passe quelconque. Les informations du protocole FTP sont normalement dissimulées par une interface cliente conviviale; le trafic d'authentification sous-jacent apparaît toutefois tel quel sur le réseau:
POP (port110)
Le service POP (Post Office Protocol) est exécuté par un serveur auquel se connectent des programmes de messagerie client afin de permettre à un utilisateur de relever son courrier électronique. Les serveurs POP sont en général situés sur les réseaux des fournisseurs d'accès à Internet. Le trafic POP est rarement chiffré; les informations d'authentification sont généralement envoyées en clair. Le nom de l'utilisateur et son mot de passe sont fournis au serveur distant par les commandes USER et PASS. Voici un exemple de ce protocole:
Signalons qu'il existe des extensions au protocole POP qui permettent de chiffrer les informations d'authentification ainsi que les sessions.
IMAP (port143)
Le service IMAP (Internet Message Access Protocol) est un protocole qui offre les mêmes fonctionnalités que le service POP. Tout comme dans ce dernier, les informations d'authentification transitent le plus souvent en clair sur le réseau. L'authentification IMAP est accomplie par l'envoi d'une chaîne de caractères composée d'un jeton choisi par l'utilisateur, de la commande LOGIN, du nom de l'utilisateur et de son mot de passe:
Il existe des extensions au protocole IMAP qui permettent de chiffrer les informations d'authentification ainsi que les sessions.
NNTP (port119)
Le protocole NNTP (Network News Transport Protocol) gère la lecture et l'écriture des messages sur les forums Usenet. L'authentification NNTP s'effectue de différentes façons. Sur les anciens systèmes, elle reposait principalement sur l'adresse réseau du client, restreignant l'accès aux serveurs de news à une plage d'adresses donnée. Puis des extensions à NNTP ont été créées pour permettre d'autres techniques d'authentification, comme celle qui est fondée sur un mécanisme défi-réponse avec chiffrement d’aléa. L'authentification réalisée en texte clair peut facilement être capturée sur un réseau, comme le montre l'exemple suivant:
rexec (port512)
Le service rexec, appelé rexecd sur presque tous les systèmes d'exploitation Unix, est un service ancien utilisé pour exécuter des commandes à distance. Le service effectue l'authentification en envoyant au serveur, en clair, le nom de l'utilisateur et son mot de passe. Il reçoit de la part du client un tampon composé des données suivantes:
- Un numéro de port Ascii qui indique le numéro de port auquel le serveur peut se connecter pour envoyer des messages d'erreurs standards. C'est un port sur l'hôte client qui est en attente de cette connexion. La valeur 0 indique que la connexion n'est pas demandée. Cette chaîne se termine par un caractère null.
- Une chaîne de 16caractères au plus terminée par un null contenant le nom de l'utilisateur.
- Une chaîne de 16caractères au plus terminée par un null contenant le mot de passe.
- Une chaîne de caractères terminée par un null contenant la commande à exécuter sur l'hôte distant.
Voici un exemple de requête d'authentification:
Si l'authentification est réussie, le serveur retourne un caractère null; sinon, il renvoie la valeur1 accompagnée d'un message d'erreur.
rlogin (port513)
Le protocole rlogin fournit en gros les fonctionnalités du protocole telnet combinées au mécanisme d'authentification du protocole rexec. Il gère des chemins de confiance, recensés dans un fichier appelé .rhosts et situé dans le répertoire home de l'utilisateur. Ce fichier contient la liste des utilisateurs autorisés à se connecter au compte spécifié sans mot de passe et les hôtes sur lesquels ils résident. Le mécanisme d'authentification repose sur la confiance: on part du principe que l'utilisateur est bien celui que le client rlogin distant déclare être. Ce mécanisme d'authentification, qui ne fonctionne que sur les systèmes Unix, n'est plus tellement utilisé sur les réseaux de nos jours en raison de ses nombreuses failles. En l'absence de chemins de confiance, le protocole transmet en clair le nom de l'utilisateur et son mot de passe, selon un mode similaire à celui du protocole rexec et qui comporte:
- Le numéro de port Ascii auquel le serveur peut se connecter pour envoyer des messages d'erreurs standards. C'est un port sur l'hôte client qui est en attente de cette connexion. La valeur0 indique que la connexion n'est pas demandée. Cette chaîne se termine par un caractère null.
- Une chaîne de 16caractères au plus terminée par un null contenant le nom de l'utilisateur client.
- Une chaîne de 16caractères au plus terminée par un null contenant le nom de l'utilisateur serveur.
- Une chaîne de caractères terminée par un null contenant le type de terminal et sa vitesse.
Le serveur retourne alors un octet contenant la valeur0 pour indiquer qu'il a reçu ces informations. Si l'authentification via le mécanisme de confiance automatique échoue, le programme de connexion prend la main et effectue la connexion comme si l'utilisateur s'était connecté avec le service telnet.
X11 (port6000+)
Le systèmeX11 Window utilise un «cookie magique» pour autoriser les clients à se connecter à un serveur. Un cookie de 128bits généré aléatoirement est envoyé par tout clientX11 qui se connecte à un serveurX Window. En interceptant ce cookie, un attaquant pourra se connecter à ce même serveur X Window. Ce cookie est habituellement stocké dans un fichier nommé .Xauthority, lequel est situé dans le répertoire home de l'utilisateur. Ce cookie est passé au serveur X Window par le programme xdm au moment de la connexion.
Les descripteurs de fichiers NFS
Le système de fichiers NFS (Network File System), créé par Sun Microsystems, fait appel à ce que l’on appelle un descripteur de fichier NFS pour accorder l'accès à un fichier ou à un répertoire donné d'un serveur de fichiers. En surveillant les descripteurs de fichiers NFS sur le réseau, un intrus peut réussir à accéder aux ressources correspondantes. Le protocole NFS a malheureusement recours à ONC-RPC (Open Network Computing-Remote Procedure Call), ce qui rend le mécanisme plus compliqué qu'une simple authentification en clair, sans pour autant garantir une sécurité absolue. Cette complexité nous empêche en outre d'illustrer ce type de trafic par un exemple.
Voici le processus qui permet à un client NFS légitime d'accéder aux fichiers d'un serveur:
- L'utilisateur émet une requête de montage en vue de monter un système de fichiers distant.
- Le système d'exploitation local contacte un service RPC de l'hôte distant appelé rpc.mountd et lui transmet le nom du système de fichiers auquel il désire accéder.
- Le programme mountd contrôle la validité de l'accès pour déterminer si la requête provient d'un port privilégié de l'hôte client et si ce dernier a la permission d'accéder à l'hôte cible.
- Le programme mountd répond au client en lui fournissant un descripteur de fichier NFS qui donne accès à la racine du système de fichiers auquel l'utilisateur veut accéder.
- Le programme client contacte ensuite le démon NFS (nfsd) sur l'hôte cible, lui envoie le descripteur de fichier et accède ainsi à la ressource.
L'authentification sous WindowsNT
Le système d'exploitation WindowsNT prend en charge plusieurs types d'authentification, chacun augmentant graduellement sa sécurité. Comme nous le verrons dans la suite de ce chapitre, la mise en œuvre des mécanismes d'authentification les moins sécurisés créé l’un des principaux points faibles de WindowsNT. Il existe trois types d'authentification :
- Plaintext– Les mots de passe sont transmis en clair sur le réseau.
- LM (Lan Manager)– Utilise un mécanisme faible défi/réponse dans lequel le serveur envoie un défi au client, qui l'utilise pour chiffrer la valeur de hachage de son mot de passe, qu'il renvoie ensuite au serveur. Le serveur fait de même et compare le résultat pour authentifier l'utilisateur. Le mécanisme de transformation de la valeur de hachage est extrêmement faible; la valeur de hachage initiale peut être interceptée assez facilement depuis le réseau et craquée. Sous WindowsNT4, malgré la présence d'un procédé d'authentification plus performant (NTLM), la valeur de hachage LM était toujours envoyée sur le réseau avec la valeur de hachage NTLM, ce qui abaissait le niveau de la sécurité à celui du mécanisme LM.
- NTLM (NT Lan Manager) et NTLMv2 (NT Lan Manager v2)– NTLM et NTLMv2 fournissent un mécanisme défi/réponse plus robuste qui rend les requêtes d'authentification interceptées beaucoup plus difficiles à craquer. NTLMv2 a été commercialisé avec le Service Pack4 de WindowsNT4.0. Il est conseillé de l'employer chaque fois que possible, mais il convient de vérifier la compatibilité des clients avec ce protocole. Vous serez peut-être obligé d'installer des logiciels supplémentaires sur les clients pour assurer cette compatibilité.
Le développement de ces mécanismes suit un processus itératif, au cours duquel on remédie aux vulnérabilités découvertes dans l'implémentation précédente (heureusement, les failles sont de moins en moins importantes au fil des améliorations).
Il existe des sniffers spécialisés qui capturent exclusivement les informations d'authentification de WindowsNT. Le programme L0phtCrack en est un bon exemple (celui-ci ne craque que les mots de passe WindowsNT). La documentation qui accompagne L0phtCrack explique en détail la procédure de création des valeurs de hachage des mots de passe de WindowsNT. L0phtCrack peut être téléchargé à l'adresse suivante: http://stake.com/research/lc3.
Les autres trafics réseau
Les ports que nous venons de passer en revue sont les plus écoutés, car ils véhiculent en clair les informations d'authentification, mais ils ne sont pas les seuls à attirer les attaquants. Comme nous allons le voir, d'autres ports sont également dignes d'intérêt.
SMTP (port25)
Le protocole SMTP (Simple Mail Transfer Protocol) sert à transférer du courrier électronique sur Internet ou au sein des messageries internes de nombreuses entreprises. Le courrier électronique est une cible éminemment tentante pour les hackers. Un attaquant peut, par exemple, surveiller l'administrateur du réseau pour savoir s'il a été découvert. Dans le contexte de guerre économique permanente qui est le nôtre, surveiller le réseau à la recherche d'informations sur telle ou telle société (fusions, acquisitions, partenariats, etc.) peut tenter certains. Ces renseignements peuvent généralement être glanés dans le courrier électronique qui transite par le réseau.
Le sniffer dsniff, présenté plus loin dans ce chapitre, comprend un programme conçu pour intercepter les messages électroniques envoyés sur le réseau.
mailsnarf affiche les messages e-mail interceptés dans les trafics SMTP et POP au format mbox de Berkeley; il est donc adapté à la navigation hors-ligne avec votre lecteur de courrier électronique préféré (mail(1), pine(1), etc.).
HTTP (port80)
Le protocole HTTP (HyperText Transfer Protocol) est utilisé pour transmettre du trafic Web. Ce trafic, habituellement destiné au port80, est généralement surveillé à des fins statistiques plutôt que pour son contenu. Les informations d'authentification et les numéros de cartes de crédit qu'il véhicule sont en général chiffrés à l'aide de SSL (Secure Sockets Layer). Il existe des produits du commerce à la disposition des entreprises qui souhaitent surveiller les activités sur le Web de leurs employés.
Le sniffer dsniff inclut également un programme dédié à l’interception des requêtes d'URL sur le réseau:
urlsnarf affiche les URL demandées et capturées dans le trafic HTTP au format CLF (Common Log Format), utilisé par la plupart des navigateurs Web, ce qui permet d'entreprendre des traitements hors ligne à l'aide de votre outil d'analyse préféré des logs Web (analog, wwwstat, etc.).
Sniffers les plus courants
Les outils d’analyse de protocole sont nombreux; nous vous proposons d'en présenter quelques-uns. Nous ne prétendons pas à l'exhaustivité, aussi ne mentionnerons-nous que quelques exemples. Nous allons étudier des sniffers destinés au diagnostic et d'autres conçus pour l’interception des informations d'authentification. Vous trouverez des listes de sniffers sur divers sites consacrés à la sécurité, notamment sur le site de securityfocus (www.security-focus.com).
Ethereal
Ethereal est l'un des analyseurs de protocoles les plus récents, puisqu’il n'est apparu que vers 1998. Toutefois, de par sa nature open source, Ethereal est devenu l'un des analyseurs de protocoles les plus répandus. Soutenu par une importante communauté de développeurs, il décode plus de protocoles que de nombreux outils commerciaux équivalents. Il est de loin le meilleur analyseur de protocoles pour des systèmes Unix. Bien qu'il s'exécute aussi sur Windows, son interface graphique surprend les habitués de l’utilisation de Windows. En réalité, celle-ci a été écrite au moyen de Gtk, d'où son apparence de type Unix.
La figure10.1 montre la fenêtre d’interception d'Ethereal. Une fonctionnalité particulièrement intéressante de ce programme est la décomposition des paquets en temps réel (livedecodes). La plupart des analyseurs de protocoles ne peuvent afficher les données interceptées tant que l’interception n'a pas été arrêtée. L'utilité de cette fonctionnalité peut paraître douteuse lorsque l'on sait que le trafic réseau peut atteindre des débits atteignant 10000paquets par seconde, une vitesse que les humains sont incapables de suivre. Toutefois, la plupart des utilisateurs d'un sniffer créent des filtres qui rejettent la plus grande part du trafic.
Une fois interceptés, les paquets sont conservés dans un tampon et affichés dans une interface composée de trois panneaux (voir la figure10.2). Il s'agit du format d'affichage adopté à l'origine par Sniffer Network Analyzer, qui est ensuite devenu celui de tous les autres produits. La fenêtre supérieure affiche un résumé ligne par ligne de chaque paquet. La seconde fenêtre présente la décomposition en couches de protocoles du paquet mis en surbrillance dans la fenêtre de résumé. La troisième fenêtre correspond à la sortie hexadécimale du même paquet. Un clic sur l’un des champs de la fenêtre présentant les détails des couches de protocoles
entraîne la mise en surbrillance des caractères correspondants dans la fenêtre qui affiche lasortie hexadécimale.
Sniffer Pro, de Network Associates
SnifferPro est une marque déposée de Network Associates. Les logiciels de sniffing qu'utilisent les hackers d'aujourd'hui tirent peut-être leur nom de ce produit, car il était disponible bien avant l'apparition des programmes d’interception de mots de passe. SnifferPro est doté d'une interface de capture et de visualisation du trafic réseau conviviale. Le grand avantage des produits du commerce est qu'ils prennent en charge un grand nombre de protocoles réseau et qu'ils affichent les données du protocole décodées très lisiblement. SnifferPro fonctionne selon deux modes: il intercepte le trafic réseau, puis il le décode et l'affiche.
Sniffer Pro, de Network Associates
SnifferPro est une marque déposée de Network Associates. Les logiciels de sniffing qu'utilisent les hackers d'aujourd'hui tirent peut-être leur nom de ce produit, car il était disponible bien avant l'apparition des programmes d’interception de mots de passe. SnifferPro est doté d'une interface de capture et de visualisation du trafic réseau conviviale. Le grand avantage des produits du commerce est qu'ils prennent en charge un grand nombre de protocoles réseau et qu'ils affichent les données du protocole décodées très lisiblement. SnifferPro fonctionne selon deux modes: il intercepte le trafic réseau, puis il le décode et l'affiche.
La figure10.3 montre Sniffer Pro en mode interception; les statistiques réseau et les données sont affichées dans des fenêtres. Une fois capturées, les données sont décodées puis affichées de manière lisible. Sur la figure10.4, Sniffer Pro a décodé la requête HTTP et on peut voir que deux variables significatives, alias et pw, ont été passées. Elles représentent en l'occurrence le nom de l'utilisateur et son mot de passe.
Moniteur réseau (Netmon)
WindowsNT Server est livré avec un logiciel de surveillance du réseau appelé Moniteur réseau, ou, en abrégé, Netmon (Network Monitor). Cette version de Netmon n’intercepte que
le trafic entrant ou sortant du serveur sur lequel il est installé. Il existe des versions de Netmon pour Windows 2000 et Windows XP qui comportent la même restriction. Une version, cependant, intercepte tout le trafic; celle-ci est fournie avec SMS (Systems Management Server). Netmon a un avantage sur les autres analyseurs de réseau du marché: il est capable de décoder certains trafics réseau propriétaires de Microsoft dont les spécifications ne sont pas publiques, tels que les différents services MS-RPC qui communiquent par le biais de canaux nommés sur des réseaux WindowsNT. Même si Netmon ne décode pas tous les services MS-RPC, il en décode une bonne partie, qui, sans lui, resterait inintelligibles.
Le mode opératoire du Moniteur réseau est très similaire à celui de Sniffer Pro, puisqu'il propose un mode d’interception (figure10.5) et un mode de visualisation (figure10.6) qui offrent les mêmes fonctionnalités.
EtherPeek
EtherPeek est l’un des plus anciens analyseurs de protocoles. Outil de WildPackets (dont l'ancien nom est A.G. Group), il peut être exécuté aussi bien sur des systèmes Macintosh que Windows (sa première version a été écrite il y a dix ans pour Macintosh). EtherPeek comporte
EtherPeek
EtherPeek est l’un des plus anciens analyseurs de protocoles. Outil de WildPackets (dont l'ancien nom est A.G. Group), il peut être exécuté aussi bien sur des systèmes Macintosh que Windows (sa première version a été écrite il y a dix ans pour Macintosh). EtherPeek comporte
une fonctionnalité d'affichage et de décodage en temps réel, et bien d'autres caractéristiques intéressantes (vous pouvez télécharger une version de démonstration à www.wildpackets.com). Actuellement, ce produit se distingue notamment dans sa version AeroPeek qui permet d’écouter des réseaux sans-fil IEEE 802.11b.
TCPDump
TCPDump est, de loin, l'outil de diagnostic et d'analyse réseau sous Unix le plus populaire. Il surveille et décode toutes les données d'en-tête IP, TCP, UDP (User Datagram Protocol) et ICMP (Internet Control Message Protocol), ainsi que certaines données de la couche Application (la plupart des protocoles d'infrastructure réseau). Il n'est pas conçu comme un outil d'attaque et n'est pas destiné à assister les attaquants qui souhaitent surveiller un réseau. Il
TCPDump
TCPDump est, de loin, l'outil de diagnostic et d'analyse réseau sous Unix le plus populaire. Il surveille et décode toutes les données d'en-tête IP, TCP, UDP (User Datagram Protocol) et ICMP (Internet Control Message Protocol), ainsi que certaines données de la couche Application (la plupart des protocoles d'infrastructure réseau). Il n'est pas conçu comme un outil d'attaque et n'est pas destiné à assister les attaquants qui souhaitent surveiller un réseau. Il
fournit néanmoins une base solide au développement d'un sniffer. Son code source étant gratuit, il est très instructif de le consulter.
TCPDump peut être téléchargé à l'adresse suivante: www.tcpdump.org.
TCPDump a subi de nombreuses modifications ces dernières années et prend maintenant en charge beaucoup de protocoles.
dsniff
Dsniff comprend un ensemble d'outils dédiés au sniffing écrits par Dug Song. Vous pouvez vous le procurer sur le site Web de son auteur (www.monkey.org/~dugsong/dsniff) ainsi que sur de nombreux sites miroirs.
Dsniff est surtout connu pour ses capacités d’interception des paquets d'authentification (noms d'utilisateur et mots de passe). La version actuelle décode les informations d'authentification des protocoles suivants: AOL Instant Messenger, Citrix Winframe, CVS (Concurrent Versions System), FTP (File Transfer Protocol), HTTP, ICQ, IMAP, IRC (Internet Relay
Chat), LDAP (Lightweight Directory Access Protocol), les requêtes de montage RPC,Napster, NNTP, Oracle Database SQL*Net, OSPF (Open Shortest Path First), PC Anywhere, POP, PostgreSQL, RIP (Routing Information Protocol), rlogin (Remote Login), les paquets SMB, RPC yppasswd, Sniffer Pro de Network Associates (remote), SNMP (Simple Network Management Protocol), Socks, telnet , X11.
Avec les réseaux commutés et les protocoles chiffrés actuels, l’espionnage de mots de passe ne fonctionne pas toujours aussi bien qu'on pourrait le souhaiter. Dsniff contient plusieurs utilitaires de redirection et d'attaques de type MITM (Man-In-The-Middle) qui permettent de rediriger le flux du trafic et de déchiffrer des sessions.
Le premier utilitaire s'appelle arpspoof (appelé à l’origine arpredirect). ARP (Address Resolution Protocol) est utilisé par des hôtes pour déterminer l'adresse MAC (Media Access Control) du routeur local. En usurpant des paquets ARP, vous pouvez convaincre les ordinateurs du voisinage que vous êtes le routeur. Votre machine doit alors transmettre les paquets reçus vers le routeur légitime, mais le sniffer de mot de passe dsniff a ainsi la possibilité de traiter les paquets. Cela fonctionne non seulement sur des réseaux commutés, mais aussi sur des réseaux
modem-câble. Cet outil n'est pas complètement à toute épreuve: vous luttez avec le routeur lorsque vous essayez de persuader les autres ordinateurs de votre adresse MAC locale. Le résultat est que le trafic reçu sur votre machine est parfois intermittent. Cette technique est facilement détectée par les systèmes de détection d’intrusion réseau. Même Sniffer Pro (dont il a été question plus haut) comporte un mode de diagnostic expert qui signale la présence «d’adresses IP dupliquées» (à savoir que plusieurs ordinateurs prétendent avoir l’adresse IP du routeur).
L’utilitaire dnsspoof propose une autre méthode de redirection du trafic. Dans ce cas, ce sont les réponses du serveur DNS (Domain Name System) local qui sont usurpées. Lorsque vous allez sur un site Web tel que http://www.exemple.com, votre ordinateur envoie une requête à votre serveur DNS local pour lui demander l’adresse IP de ce site. Cette requête demande
---------------------------------------------------------------------------------------
Un exemple d'utilisation de DSNIFF
La sortie suivante a été générée avec dsniff par Dug Song, qui a intercepté avec succès mon mot de passe lors de la conférence consacrée à la sécurité CanSecWest2001. Il se trouve en effet qu'Outlook consulte automatiquement les serveurs POP3, même lorsqu'on se contente de l'ouvrir pour lire les informations de contact du carnet d'adresse. J'ai rapidement changé mon mot de passe, juste à temps, car la suite de la sortie de dsniff montre la tentative d'une autre personne qui essaie d'ouvrir une session avec ce mot de passe; il s'agit certainement d'un autre utilisateur de dsniff.
-----------------
03/28/01 18:43:24 tcp 192.168.1.201.1035 ->
216.136.173.10.110 (pop)
USER robert_david_graham
PASS Cerveza2
-----------------
03/29/01 02:07:41 tcp 192.168.1.243.1837 ->
216.136.173.10.110 (pop)
USER robert_david_graham
PASS Cerveza2
-----------------
03/29/01 02:07:08 tcp 192.168.1.243.1836 ->
64.58.76.98.80 (http)
POST /config/login?84gteu3f1fmvt HTTP/1.0
Host: login.yahoo.com
Content-type: application/x-www-form-urlencoded
Content-length: 147
.tries=1&.src=ym&.last=&promo=&.intl=us&.bypass=&.partner=&.u=86
3imictc5nnu&.v=0&hasMsgr=0&.chkP=Y&.done=&login=robert
_david_graham&passwd=Cerveza2
-----------------
03/29/01 02:06:48 tcp 192.168.1.243.1835 ->
64.58.76.98.80 (http)
POST /config/login?15aeb5g14endr HTTP/1.0
Host: login.yahoo.com
Content-type: application/x-www-form-urlencoded
Content-length: 146
.tries=&.src=ym&.last=&promo=&.intl=us&.bypass=&.partner=&.u=863
imictc5nnu&.v=0&hasMsgr=0&.chkP=Y&.done=&login=robert
_david_graham&passwd=Cerveza2
-----------------
03/31/01 17:07:38 tcp 192.168.1.243.1307 ->
216.136.173.10.110 (pop)
USER robert_david_graham
PASS Cerveza2
---------------------------------------------------------------------------------------
habituellement un certain délai pour être résolue; dnsspoof en profite pour envoyer sa réponse plus rapidement. La victime prend la première réponse et ignore la seconde. La réponse usurpée contient une adresse IP différente de la réponse légitime; il s’agit généralement de l’adresse IP de la machine de l’attaquant. L’attaquant utilise alors certainement l’un des autres utilitaires d’attaque de type MITM de dsniff.
Le nom MITM (man-in-the-middle) vient de la cryptologie et décrit une situation dans laquelle une personne intercepte des communications, les modifient et les transmet. Les utilitaires de dsniff pour ces attaques sont webmitm pour le trafic HTTP (y compris SSL) et sshmitm pour SSH. SSH et SSL sont des protocoles chiffrés généralement considérés comme sécurisés et non susceptibles d’être analysés. Les utilitaires MITM procèdent en présentant leurs propres clés de chiffrement aux clients SSL/SSH, ce qui leur permet de déchiffrer le trafic, d’intercepter des mots de passe et de rechiffrer ceux-ci avec les clés du serveur initial. En théorie, il est possible de se protéger contre ce type d’attaque en contrôlant la validité du certificat du serveur, mais dans les faits, personne ne procède à cette vérification.
Dsniff intercepte non seulement les mots de passe, mais aussi tout le trafic qui circule en texte clair sur le réseau. L’utilitaire mailsnarf intercepte les e-mails tout comme Carnivore du FBI, sauf qu’il réassemble ceux-ci au format mbox, lequel peut être lu par la plupart des lecteurs de messagerie électronique. L’utilitaire msgsnarf intercepte les messages envoyés par ICQ, IRC, Yahoo! Messenger et IM d’AOL. L’utilitaire filesnarf enregistre toutes les URL circulant sur le réseau. L’utilitaire webspy envoie quant à lui ces URL à un navigateur Web Netscape en temps réel, ce qui permet de voir ce qu’affiche le navigateur de la victime.
L’utilitaire macof envoie un flot d’adresses MAC. Il s’agit là d’une autre méthode d’attaque des commutateurs Ethernet. La plupart des commutateurs ont des tables de taille limitée qui ne peuvent pas contenir plus de 4000adresses MAC. Ce nombre est largement suffisant pour les réseaux habituels (il faut relier plus de 4000machines au commutateur pour outrepasser la capacité de sa table). Lorsque le commutateur est saturé, il se met à répéter tous les paquets sur chacun des ports, ce qui permet d’analyser le trafic de tout le monde.
L’utilitaire tcpkill met fin aux connexions TCP. Il peut servir à des attaques en déni de service. Vous pouvez, par exemple, configurer cet outil de manière à ce qu’il ferme toutes les connexions ouvertes par votre voisin. Tcpkill peut aussi être intégré à des outils comme des IDS afin qu’ils tuent toutes les connexions ouvertes par des intrus.
L’utilitaire tcpnice est semblable à tcpkill; cependant, au lieu de fermer les connexions TCP, il les ralentit. Vous pouvez par exemple envoyer des faux messages ICMP Source Quenches (qui signalent un débit trop élevé à l’émetteur) à partir des modems-câbles de vos voisins pour disposer d’un pourcentage de bande passante plus élevé pour vos téléchargements.
Ettercap
Ettercap est un logiciel semblable à celui proposé par dsniff. Il propose plusieurs des fonctionnalités de ce dernier: les attaques de type MITM contre SSL et SSH ainsi que l’interception des mots de passe. Ettercap offre même des fonctionnalités supplémentaires pour les attaques de l’homme du milieu réalisées contre des connexions TCP standards. C’est ainsi qu’il permet d’insérer des commandes dans le flux du trafic. Ettercap a été écrit par Alberto Ornaghi et Marco Valleri. On peut se le procurer à l’adresse suivante: http://ettercap.sourceforge.net.
Esniff.c
Esniff.c est certainement un des premiers sniffers ayant vu le jour dans le milieu hacker. Écrit par un pirate nommé rokstar, il ne fonctionnait initialement que sur SunOS, le système d'exploitation (désormais obsolète) des machines Sun Microsystems. Esniff gère les protocoles telnet, FTP et rlogin. Il offre les fonctionnalités de base et ne prend pas en charge autant de protocoles que des sniffers plus récents tels que dsniff et sniffit. Vous pouvez vous procurer ce sniffer, initialement publié dans la revue Phrack, à l'adresse suivante: http://www.phrack.org/show.php?p=45&a=5.
Sniffit
Sniffit n'est pas non plus de la première jeunesse. Il est compatible avec de nombreux systèmes d'exploitation, dont Linux, Solaris, SunOS, Irix et FreeBSD. Bien qu'il n'ait pas été mis à jour depuis un certain temps, il semble relativement stable (même si la dernière version était qualifiée de bêta). Brecht Claerhout, l'auteur de sniffit, en propose deux versions sur son site Web: la 0.3.5 (sortie en avril1997) et la bêta, 0.3.7. (sortie en juillet1998). La compilation et la mise en œuvre de la version bêta0.3.7 ne nous a jamais posé aucun problème; si vous en rencontrez, vous pourrez toujours utiliser la version précédente. Le site Web de Brecht Claerhout se trouve à l'adresse suivante: http://reptile.rug.ac.be/~coder/sniffit/sniffit.html.
Ettercap
Ettercap est un logiciel semblable à celui proposé par dsniff. Il propose plusieurs des fonctionnalités de ce dernier: les attaques de type MITM contre SSL et SSH ainsi que l’interception des mots de passe. Ettercap offre même des fonctionnalités supplémentaires pour les attaques de l’homme du milieu réalisées contre des connexions TCP standards. C’est ainsi qu’il permet d’insérer des commandes dans le flux du trafic. Ettercap a été écrit par Alberto Ornaghi et Marco Valleri. On peut se le procurer à l’adresse suivante: http://ettercap.sourceforge.net.
Esniff.c
Esniff.c est certainement un des premiers sniffers ayant vu le jour dans le milieu hacker. Écrit par un pirate nommé rokstar, il ne fonctionnait initialement que sur SunOS, le système d'exploitation (désormais obsolète) des machines Sun Microsystems. Esniff gère les protocoles telnet, FTP et rlogin. Il offre les fonctionnalités de base et ne prend pas en charge autant de protocoles que des sniffers plus récents tels que dsniff et sniffit. Vous pouvez vous procurer ce sniffer, initialement publié dans la revue Phrack, à l'adresse suivante: http://www.phrack.org/show.php?p=45&a=5.
Sniffit
Sniffit n'est pas non plus de la première jeunesse. Il est compatible avec de nombreux systèmes d'exploitation, dont Linux, Solaris, SunOS, Irix et FreeBSD. Bien qu'il n'ait pas été mis à jour depuis un certain temps, il semble relativement stable (même si la dernière version était qualifiée de bêta). Brecht Claerhout, l'auteur de sniffit, en propose deux versions sur son site Web: la 0.3.5 (sortie en avril1997) et la bêta, 0.3.7. (sortie en juillet1998). La compilation et la mise en œuvre de la version bêta0.3.7 ne nous a jamais posé aucun problème; si vous en rencontrez, vous pourrez toujours utiliser la version précédente. Le site Web de Brecht Claerhout se trouve à l'adresse suivante: http://reptile.rug.ac.be/~coder/sniffit/sniffit.html.
Une des raisons pour lesquelles nous employons sniffit est qu'il est facile de le configurer pour qu'il journalise certains trafics prédéterminés, comme FTP et telnet. Ce type de filtre n'est pas rare: on le retrouve sur d'autres sniffers, tels que Sniffer Pro et Netmon, pour ne citer qu'eux. Mais avez-vous déjà vu un de ces sniffers discrètement installés sur un système compromis? Sniffit a une taille réduite et est simple à configurer quand il s’agit d’intercepter (et de journaliser) le trafic de certains protocoles contenant des informations en clair, comme les noms d'utilisateurs et les mots de passe. L'exemple suivant illustre ses capacités:
Comme vous pouvez le constater, en dix heures, nous avons réussi à récupérer les noms d'utilisateurs et les mots de passe correspondant à neuf utilisateurs de trois sites FTP et de cinq emplacements telnet. L'utilisateur demrly semble avoir fourni un mot de passe incorrect quand il a tenté de se connecter à l'adresse 10.22.16.52 pour la première fois, mais nous conservons quand même ce mot de passe, car il peut être valide à un autre endroit.
Carnivore
Carnivore a été conçu par le FBI pour réaliser des écoutes sur Internet. Sa conception a tenu compte des exigences particulières de la législation américaine. Il est ainsi possible que certains juges n’autorisent que l’enregistrement des adresses des expéditeurs et des destinataires (les champs From et To) tandis que d’autres permettent l’interception de la totalité des e-mails. Le programme de configuration de Carnivore présente un résumé de ses fonctionnalités (voir figure10.7).
Les fonctionnalités de Carnivore sont les suivantes:
- Filter sets – Les paramètres sont sauvegardés dans des fichiers de configuration, ce qui permet à l’utilisateur de modifier rapidement les critères de la surveillance en sélectionnant un autre jeu de filtres (filter set).
- Network adapters – Un système est susceptible de comporter plusieurs cartes réseaux, mais une seule peut être sélectionnée pour l’écoute.
- Archive file size – Il est possible de définir une quantité limite de données interceptées; par défaut, le programme remplit la totalité de l’espace disque.
- Total memory usage – Il est possible que le trafic parvienne en rafales dont la vitesse dépasse les capacités d’écriture sur le disque. Dans ce cas, la mémoire est utilisée pour mettre en tampon les données entrantes.
- Fixed IP address – On peut filtrer tout le trafic d’une plage d’adresses IP expéditrice ou de destination. Par exemple, la cible peut avoir une adresse IP fixe de 1.2.3.4 attribuée à son modem-câble. Le FBI se procurera alors une autorisation judiciaire lui permettant d’écouter la totalité du trafic de la cible.
- Protocols to capture – En général, une décision judiciaire ne permet la surveillance que des trafics déterminés, par exemple SMTP sur TCP. En mode Pen, seuls les en-têtes sont interceptées.
- Data text strings – Il s’agit d’une fonctionnalité d’Echelon qui recherche certains mots-clés dans le trafic. Une décision judiciaire doit spécifier avec exactitude ce qui est à surveiller: une adresse IP ou un compte e-mail. Des recherches de mot-clés de si grande envergure sont illégales aux États-Unis. Le FBI a au départ refusé de reconnaître que Carnivore était doté d’une telle fonctionnalité.
- Ports – Il est possible de spécifier une liste de ports TCP et UDP. Par exemple, si le FBI dispose d’une décision judiciaire l’autorisant à intercepter des e-mails, il peut spécifier les ports 25, 110 et 143.
- SMTP e-mail addresses – Un scénario type est celui dans lequel Carnivore est employé pour surveiller le serveur de la messagerie d’un FAI et rejette tous les e-mails à l’exception de ceux des suspects. Une session e-mail est enregistrée dès lors qu’apparaît l’adresse e-mail d’un suspect, puis tous les paquets composant l’e-mail sont ensuite interceptés.
- Dynamic IP addresses – Lorsque les utilisateurs se connectent à Internet par ligne commutée, leurs ouvertures de session sont prises en charge par le protocole RADIUS qui leur attribue une adresse IP. En principe, le FBI demande au FAI de reconfigurer leurs serveurs RADIUS de manière à toujours attribuer la même adresse IP au suspect, puis il surveille la totalité du trafic destiné à cette adresse ou en provenance de celle-ci. (Remarquez que si vous vous connectez sur ligne commutée et que vous pensez que le FBI s’intéresse à vous, vérifiez que votre adresse IP change à chaque connexion.) Parfois cela n’est pas possible. Dans ce cas, Carnivore peut être configuré de manière à surveiller le protocole RADIUS et à découvrir dynamiquement la nouvelle adresse IP attribuée au suspect.La surveillance commence dès l’attribution de l’adresse IP et cesse lorsque celle-ci n’est plus attribuée.
Le FBI a développé Carnivore en raison des insuffisances d’utilitaires tels que dsniff par rapport aux exigences d’ordre juridique. Lorsqu’un e-mail est envoyé sur le réseau, celui-ci est divisé en plusieurs paquets. Un utilitaire tel que mailsnarf (décrit plus haut) réassemble l’e-mail pour lui restituer sa forme d’origine. Ce mécanisme n’est pas souhaitable, car la défense du suspect aura tôt fait d’insister sur la fragilité des pièces à conviction ainsi rassemblées: n’est-il pas possible qu’un paquet ait été inséré dans le trafic de manière à changer le texte du message? est-ce que le paquet inséré dans le message pourrait provenir de l’e-mail d’une autre personne? En interceptant les paquets à l’état brut plutôt qu’en les réassemblant, Carnivore préserve les numéros de séquence, les ports et les indications d’heure d’origine. Tout paquet manquant ou supplémentaire apparaît aussitôt, ce qui permet au FBI de soutenir l’authenticité de la pièce à conviction ainsi constituée.
Un autre problème auquel a été confronté le FBI tient à la minimisation des données écoutées. Lorsque le FBI écoute une ligne téléphonique, il lui faut affecter un agent pour l’écouter. Si une autre personne que le suspect se sert du téléphone (l’épouse ou les enfants, par exemple), obligation lui est faite d’interrompre les enregistrements. De la même manière, Carnivore a été conçu de façon à éviter l’interception de ce qui n’appartient pas au suspect. Un exemple type est celui de l’utilisation de Carnivore pour surveiller les activités d’un utilisateur se connectant à Internet par une ligne commutée. Carnivore contient un module surveillant le trafic RADIUS, lequel est un protocole utilisé par de nombreux FAI pour authentifier les utilisateurs et leur attribuer une adresse IP dynamique. Ce module permet à Carnivore de ne surveiller que l’utilisateur cible sans intercepter d’autres trafics.
Autres ressources
Il existe plusieurs pages Web fournissant une liste plus exhaustive des programmes d’écoute disponibles. En voici deux :
Autres ressources
Il existe plusieurs pages Web fournissant une liste plus exhaustive des programmes d’écoute disponibles. En voici deux :
- une liste des programmes de surveillance réseau proposée par Underground Security Systemes Research: www.ussrback.com/sniffers.htm ;
- une bonne présentation, très détaillée, des analyseurs de paquets écrite par Robert Graham: www.robertgraham.com/pubs/sniffing-faq.html.
Techniques d’écoute avancées
Au fur et à mesure que la technologie progresse, les attaquants conçoivent de nouvelles méthodes d’écoute du trafic réseau. Les sections qui suivent présentent quelques-unes des méthodes employées par les attaquants pour tirer parti des avancées de la technologie.
Attaques de type MITM
Comme nous le verrons plus tard, la défense la plus efficace contre l’écoute est le recours à des protocoles chiffrés, tels que SSL et SSH. Il n’en demeure pas moins que les logiciels dsniff et Ettercap contiennent des techniques permettant de déjouer le chiffrement des communications.
La principale technique est celle appelée attaque man-in-the-middle (homme du milieu). Un bon exemple en est donné dans le film Bons baisers de Russie. Dans ce film, James Bond doit rencontrer un autre agent dans une gare ferroviaire. L’agent ennemi du SPECTRE commence par contacter l’agent en se faisant passer pour James Bond. Il obtient ainsi la phrase à prononcer pour s’identifier. Ensuite, l’agent ennemi usurpe l’identité de l’agent que doit rencontrer James Bond.
La même technique peut être mise en oeuvre pour les protocoles chiffrés. Un attaquant met en place un serveur qui répond aux requêtes des clients. Le serveur peut par exemple prendre en charge les requêtes destinées à http://www.amazon.com. Un utilisateur qui contacte cet ordinateur peut croire alors à tort qu’il a établi une session chiffrée avec le site Amazon. Au même moment, l’attaquant établit une connexion avec le véritable site et se fait passer auprès de lui pour l’utilisateur. Autrement dit, l’attaquant joue deux rôles à la fois, ce qui implique qu’il déchiffre les données entrantes envoyées par l’utilisateur et qu’il chiffre à nouveau celles-ci pour les transmettre au véritable site.
En théorie, les protocoles de chiffrement comportent des mécanismes de protection contre de telles attaques. Un serveur prétendant être Amazon doit en fait prouver qu’il l’est véritablement. Dans la pratique, la plupart des utilisateurs ignorent cette nécessité. C’est pourquoi les attaques de type MITM se sont avérées efficaces lorsqu’elles ont été employées dans ce domaine.
Craquage des mots de passe
Des outils comme dsniff et Ettercap peuvent non seulement intercepter des mots de passe en texte clair, mais aussi des mots de passe chiffrés. En théorie, l’interception de mots de passe chiffrés est inutile. Cependant, de nombreuses personnes choisissent des mots de passe faibles comme des mots du dictionnaire. Un attaquant n’a alors besoin que de quelques secondes pour réaliser une attaque avec un dictionnaire de 100000mots, au cours de laquelle il comparera la forme chiffrée de chaque mot du dictionnaire à celle du mot de passe recherché. Dès qu’une correspondance est trouvée, le mot de passe est découvert.
Il existe des programmes de craquage de mots de passe employant cette méthode. C’est pourquoi, il suffit que dsniff et Ettercap génèrent les mots de passe à craquer dans un format que ces outils peuvent lire.
Craquage des mots de passe
Des outils comme dsniff et Ettercap peuvent non seulement intercepter des mots de passe en texte clair, mais aussi des mots de passe chiffrés. En théorie, l’interception de mots de passe chiffrés est inutile. Cependant, de nombreuses personnes choisissent des mots de passe faibles comme des mots du dictionnaire. Un attaquant n’a alors besoin que de quelques secondes pour réaliser une attaque avec un dictionnaire de 100000mots, au cours de laquelle il comparera la forme chiffrée de chaque mot du dictionnaire à celle du mot de passe recherché. Dès qu’une correspondance est trouvée, le mot de passe est découvert.
Il existe des programmes de craquage de mots de passe employant cette méthode. C’est pourquoi, il suffit que dsniff et Ettercap génèrent les mots de passe à craquer dans un format que ces outils peuvent lire.
Attaques des commutateurs
La mode des commutateurs a commencé voici quelques années. Nombre de possesseurs de réseaux commutés étaient persuadés qu'aucun attaquant ne pouvait écouter leurs informations. Nous allons pourtant passer ci-après en revue les méthodes d’écoute mises au point pour les réseaux commutés!
Usurpation ARP
Quand on projette de surveiller le trafic d'un réseau commuté, on s'attaque à un sérieux problème: le commutateur limite le trafic qui transite au-delà votre segment de réseau. Les commutateurs possèdent une liste interne des adresses MAC des hôtes affectés à chaque port. Le trafic est envoyé à un port seulement si l'hôte destinataire est signalé comme étant présent sur ce port. Dans de nombreux systèmes d'exploitation, il est cependant possible de modifier le cache ARP (Address Resolution Protocol). Cette opération permet d’associer votre adresse MAC à l'adresse IP de la passerelle par défaut. Grâce à cette manipulation, tout le trafic en provenance de l'hôte cible vous est transmis. Assurez-vous toutefois d'avoir ajouté manuellement une entrée dans la table ARP pour la véritable passerelle par défaut (afin que le trafic soit envoyé vers le véritable hôte de destination) et d'avoir activé l'IP forwarding.
Il a été démontré que de nombreux réseaux de modems câbles sont également vulnérables à ce type d'attaque dans la mesure où ils sont avant tout des réseaux Ethernet avec des modems câbles jouant le rôle de ponts. En résumé, il n'existe aucune solution contre cette attaque; les nouvelles générations de réseaux de modems câbles recourront à d'autres mécanismes pour connecter les utilisateurs au réseau.
Le sniffer dsniff de Dug Song inclut un programme appelé arpspoof (autrefois arpredirect) qui utilise cette technique.
arpspoof redirige les paquets d’un hôte cible (ou de tous les hôtes) situé sur le LAN et destinés à un autre hôte du LAN en manipulant les réponses ARP. Il s’agit là d’une technique de sniffing très efficace dans un environnement commuté.
Saturation MAC
Pour bien jouer son rôle, un commutateur doit conserver une table des adresses MAC (Ethernet) des hôtes qui apparaissent sur chaque port. Lorsqu'un grand nombre d’adresses apparaît sur un seul port au point de remplir la table d'adresses, le commutateur n’enregistre plus le port auquel l’adresse MAC de la victime est connectée. Il s’agit là de la même situation que lorsqu’un nouvel ordinateur est relié pour la première fois à un commutateur et que celui-ci doit apprendre l’emplacement auquel se situe cette adresse. Jusqu’à ce qu’il apprenne le port sur lequel est situé le nouvel ordinateur, le commutateur doit envoyer des copies des trames destinées à la nouvelle adresse MAC sur tous ses ports; cette technique est appelée inondation ou flooding.
Le sniffer dsniff inclut un programme appelé macof, qui rend possible l’attaque par inondation d'un commutateur auquel il envoie un flot d'adresses MAC générées de manière aléatoire.
Manipulation du routage
Si vous désirez vous assurer que tout le trafic d'un réseau va transiter par votre hôte, vous pouvez modifier la table de routage de l'hôte que vous voulez surveiller. Cette manipulation peut être, par exemple, réalisée par l’envoi d’un message de routage RIP (Routing Information Protocol) erroné annonçant que votre ordinateur est la passerelle par défaut. Si vous réussissez, tout le trafic sera routé à travers votre hôte. Vérifiez que vous avez activé l'IP forwar- ding et que votre passerelle par défaut est bien la véritable passerelle du réseau. Tout le trafic sortant de l'hôte transitera alors à la fois à travers votre hôte et par la véritable passerelle du
réseau. Vous ne recevrez probablement pas le trafic de retour, sauf si vous avez la possibilité de modifier la table de routage de la passerelle par défaut de façon qu'elle reroute tout le trafic de retour vers vous.
Manipulation du routage
Si vous désirez vous assurer que tout le trafic d'un réseau va transiter par votre hôte, vous pouvez modifier la table de routage de l'hôte que vous voulez surveiller. Cette manipulation peut être, par exemple, réalisée par l’envoi d’un message de routage RIP (Routing Information Protocol) erroné annonçant que votre ordinateur est la passerelle par défaut. Si vous réussissez, tout le trafic sera routé à travers votre hôte. Vérifiez que vous avez activé l'IP forwar- ding et que votre passerelle par défaut est bien la véritable passerelle du réseau. Tout le trafic sortant de l'hôte transitera alors à la fois à travers votre hôte et par la véritable passerelle du
réseau. Vous ne recevrez probablement pas le trafic de retour, sauf si vous avez la possibilité de modifier la table de routage de la passerelle par défaut de façon qu'elle reroute tout le trafic de retour vers vous.
API réseau de certains systèmes d’exploitation
Les systèmes d'exploitation ne fournissent pas tous des interfaces de programmation, ou API, avec leur couche de liaison réseau. Nous allons examiner plusieurs systèmes d’exploitation afin de montrer leur interfaçage avec cette couche.
Linux
Linux propose une interface avec la couche de liaison réseau via son interface socket. Cette interface est l'une des plus simples, tous systèmes d'exploitation confondus. Le programme ci-dessous illustre cette simplicité. Il ouvre l'interface spécifiée, initialise le mode promiscuité et commence à lire les paquets Ethernet provenant du réseau. Quand un paquet est lu, les adresses MAC source et destinataire sont affichées en plus du type de paquet.
Linux
Linux propose une interface avec la couche de liaison réseau via son interface socket. Cette interface est l'une des plus simples, tous systèmes d'exploitation confondus. Le programme ci-dessous illustre cette simplicité. Il ouvre l'interface spécifiée, initialise le mode promiscuité et commence à lire les paquets Ethernet provenant du réseau. Quand un paquet est lu, les adresses MAC source et destinataire sont affichées en plus du type de paquet.
----------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <linux/if_arp.h>
#include <linux/if_ether.h>
#include <linux/sockios.h>
#include <net/ethernet.h>
int open_interface(char *name)
{
struct sockaddr addr;
struct ifreq ifr;
int sockfd;
/* ouvre une socket et la lie à l'interface spécifiée */
sockfd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL));
if (sockfd < 0)
return -1;
memset(&addr, 0, sizeof(addr));
addr.sa_family = AF_INET;
strncpy(addr.sa_data, name, sizeof(addr.sa_data));
if (bind(sockfd, &addr, sizeof(addr)) != 0) {
close(sockfd);
return -1;
}
/* on s'assure que l'interface est Ethernet. Sinon, on quitte */
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) < 0) {
close(sockfd);
return -1;
}
if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
close(sockfd);
return -1;
}
/* on initialise le mode promiscuté à présent */
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
if (ioctl(sockfd, SIOCGIFFLAGS, &ifr) < 0) {
close(sockfd);
return -1;
}
ifr.ifr_flags |= IFF_PROMISC;
if (ioctl(sockfd, SIOCSIFFLAGS, &ifr) < 0) {
close(sockfd);
return -1;
}
return sockfd;
}
/* on lit les paquets Ethernet et on affiche les adresses source et destination */
int read_loop(sockfd)
{
struct sockaddr_in from;
char buf[1792], *ptr;
int size, fromlen, c;
struct ether_header *hdr;
while (1) {
/* lit le prochain paquet disponible */
size = recvfrom(sockfd, buf, sizeof(buf), 0, &from, &fromlen);
if (size < 0)
return -1;
if (size < sizeof(struct ether_header))
continue;
hdr = (struct ether_header *)buf;
/* affiche l'en-tête Ethernet */
for (c = 0; c < ETH_ALEN; c++)
printf("%s%02x",c == 0 ? "" : ":",hdr->ether_shost[c]);
printf(" > ");
for (c = 0; c < ETH_ALEN; c++)
printf("%s%02x",c == 0 ? "" : ":",hdr->ether_dhost[c]);
printf(" type: %i\n", hdr->ether_type);
}
}
int main(int argc, char **argv)
{
int sockfd;
char *name = argv[1];
if (!argv[1]) {
fprintf(stderr, "Please specify an interface name\n");
return -1;
}
if ((sockfd = open_interface(name)) < 0) {
fprintf(stderr, "Unable to open interface\n");
return -1;
}
if (read_loop(sockfd) < 0) {
fprintf(stderr, "Error reading packet\n");
return -1;
}
return 0;
}
----------------------------------------------------------------------------------
BSD
Les systèmes d'exploitation BSD, comme OpenBSD, FreeBSD, NetBSD et BSDI, fournissent tous une interface avec la couche de liaison via un pilote du noyau appelé BPF (Berkeley Packet Filter). Le BPF possède quelques fonctionnalités remarquables qui le rendent extrêmement performant dans le traitement et le filtrage des paquets.
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <linux/if_arp.h>
#include <linux/if_ether.h>
#include <linux/sockios.h>
#include <net/ethernet.h>
int open_interface(char *name)
{
struct sockaddr addr;
struct ifreq ifr;
int sockfd;
/* ouvre une socket et la lie à l'interface spécifiée */
sockfd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL));
if (sockfd < 0)
return -1;
memset(&addr, 0, sizeof(addr));
addr.sa_family = AF_INET;
strncpy(addr.sa_data, name, sizeof(addr.sa_data));
if (bind(sockfd, &addr, sizeof(addr)) != 0) {
close(sockfd);
return -1;
}
/* on s'assure que l'interface est Ethernet. Sinon, on quitte */
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) < 0) {
close(sockfd);
return -1;
}
if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
close(sockfd);
return -1;
}
/* on initialise le mode promiscuté à présent */
memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name));
if (ioctl(sockfd, SIOCGIFFLAGS, &ifr) < 0) {
close(sockfd);
return -1;
}
ifr.ifr_flags |= IFF_PROMISC;
if (ioctl(sockfd, SIOCSIFFLAGS, &ifr) < 0) {
close(sockfd);
return -1;
}
return sockfd;
}
/* on lit les paquets Ethernet et on affiche les adresses source et destination */
int read_loop(sockfd)
{
struct sockaddr_in from;
char buf[1792], *ptr;
int size, fromlen, c;
struct ether_header *hdr;
while (1) {
/* lit le prochain paquet disponible */
size = recvfrom(sockfd, buf, sizeof(buf), 0, &from, &fromlen);
if (size < 0)
return -1;
if (size < sizeof(struct ether_header))
continue;
hdr = (struct ether_header *)buf;
/* affiche l'en-tête Ethernet */
for (c = 0; c < ETH_ALEN; c++)
printf("%s%02x",c == 0 ? "" : ":",hdr->ether_shost[c]);
printf(" > ");
for (c = 0; c < ETH_ALEN; c++)
printf("%s%02x",c == 0 ? "" : ":",hdr->ether_dhost[c]);
printf(" type: %i\n", hdr->ether_type);
}
}
int main(int argc, char **argv)
{
int sockfd;
char *name = argv[1];
if (!argv[1]) {
fprintf(stderr, "Please specify an interface name\n");
return -1;
}
if ((sockfd = open_interface(name)) < 0) {
fprintf(stderr, "Unable to open interface\n");
return -1;
}
if (read_loop(sockfd) < 0) {
fprintf(stderr, "Error reading packet\n");
return -1;
}
return 0;
}
----------------------------------------------------------------------------------
BSD
Les systèmes d'exploitation BSD, comme OpenBSD, FreeBSD, NetBSD et BSDI, fournissent tous une interface avec la couche de liaison via un pilote du noyau appelé BPF (Berkeley Packet Filter). Le BPF possède quelques fonctionnalités remarquables qui le rendent extrêmement performant dans le traitement et le filtrage des paquets.
Le pilote BPF dispose d’un mécanisme de filtrage intégré au noyau. Celui-ci est composé d'une machine virtuelle qui permet, au moyen d'opérations très simples sur les octets, d'examiner chaque paquet via un petit programme chargé dans le noyau par l'utilisateur. Lorsqu'un paquet arrive, le petit programme traite ce paquet et détermine s'il doit être transmis à l'application utilisateur. Les expressions sont compilées en un bytecode simple dans le mode utilisateur, puis chargées dans le pilote via un appel à ioctl.
libpcap
Libpcap n'est pas vraiment une interface du système d'exploitation, mais plutôt une bibliothèque portable multi-plate-forme qui simplifie grandement l'accès à la couche de liaison réseau sur beaucoup de systèmes d'exploitation. Libpcap est une bibliothèque développée à l'origine par LBL (Lawrence Berkeley National Laboratories). Son but est d'abstraire l'interface de la couche de liaison sur différents systèmes d'exploitation et de créer une API standardisée simple. Cela permet la création d’un code portable utilisant une interface de programmation unique. Le résultat est que l’écriture de sniffers est grandement simplifiée, puisqu'il n’est plus nécessaire de consacrer des efforts à l’implémentation du programme sur plusieurs systèmes d’exploitation.
La version de LBL a été nettement améliorée depuis sa dernière publication officielle. Elle dispose d'une licence open source (la licence BSD) et peut donc être aussi employée dans des produits du commerce, modifiée sans restriction ou redistribuée.
La version originale de la bibliothèque LBL peut être téléchargée à l'adresse suivante ftp://ftp.ee.lbl.gov/libpcap.tar.Z. Les gens de tcpdump.org, qui ont participé au développement de TCPDump, ont également adopté libpcap. Les dernières versions de libpcap peuvent être téléchargées à l'adresse suivante: www.tcpdump.org.
Si nous comparons un sniffer écrit pour le système d'exploitation Linux, pour lequel nous avons utilisé l'interface système native, à un sniffer écrit sous Linux à l'aide de libpcap, nous constatons que le second est beaucoup plus simple, comme l'illustre le programme ci-dessous:
-------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <net/ethernet.h>
#include <pcap/pcap.h>
pcap_t *open_interface(char *name)
{
pcap_t *pd;
char ebuf[PCAP_ERRBUF_SIZE];
/* on utilise un appel pcap pour ouvrir l'interface en mode promiscuité */
pd = pcap_open_live(name, 1600, 1, 100, ebuf);
if (!pd)
return NULL;
return pd;
}
int read_loop(pcap_t *pd)
{
const unsigned char *ptr;
int size, c;
struct pcap_pkthdr h;
struct ether_header *hdr;
while (1) {
/* lit le paquet suivant disponible en utilisant libpcap */
ptr = pcap_next(pd, &h);
if (h.caplen < sizeof(struct ether_header))
continue;
hdr = (struct ether_header *)ptr;
/* affiche l'en-tête Ethernet */
for (c = 0; c < ETH_ALEN; c++)
printf("%s%02x",c == 0 ? "" : ":",hdr->ether_shost[c]);
printf(" > ");
for (c = 0; c < ETH_ALEN; c++)
printf("%s%02x",c == 0 ? "" : ":",hdr->ether_dhost[c]);
printf(" type: %i\n", hdr->ether_type);
}
}
int main(int argc, char **argv)
{
pcap_t *pd;
char *name = argv[1];
if (!argv[1]) {
fprintf(stderr, "Please specify an interface name\n");
return -1;
}
pd = open_interface(name);
if (!pd) {
fprintf(stderr, "Unable to open interface\n");
return -1;
}
if (read_loop(pd) < 0) {
fprintf(stderr, "Error reading packet\n");
return -1;
}
return 0;
}
-------------------------------------------------------------------------------------
Windows
Les systèmes d'exploitation Windows ne fournissent aucune fonctionnalité permettant d'accéder au réseau au niveau de la couche de liaison de données. Il faut se procurer et installer un pilote de paquets externe. Jusqu'à récemment, on ne trouvait pas un pilote de ce type qui ne soit accompagné d’une licence. Un pilote compatible BPF a été écrit récemment; il prend même en charge le mécanisme de filtrage BPF intégré au noyau. Un portage de la bibliothèque libpcap est également disponible; combinée au pilote, elle procure une interface aussi simple d’emploi que celle d'Unix. Le pilote, le portage de libpcap et des versions Windows de TCPDump sont disponibles à l'adresse suivante: http://netgroup-serv.polito.it/windump.
Mesures de protection
Si vous considérez que rien ne pourra empêcher l’écoute de votre réseau, sachez qu'il existe des moyens de protection. Nous allons les étudier dans cette section.
Chiffrement des communications
Heureusement pour la sécurité des réseaux, le chiffrement (dès lors qu’il est convenablement déployé) est la solution miracle qui annihile totalement l'efficacité des sniffers! Le chiffrement des données réduit en effet à néant, en supposant que l'algorithme de chiffrement soit valable, toute tentative de surveillance passive de votre réseau. De nombreux protocoles de réseau ont à présent des équivalents fondés sur un chiffre robuste
comme IPSec. Malheureusement, IPSec est rarement utilisé sur Internet en dehors des entreprises individuelles.
SSH (Secure Shell)
Secure Shell est un substitut sécurisé par chiffrement des commandes standard telnet, rlogin, rsh et rcp. Il se compose d’un client et d’un serveur qui chiffrent les sessions au moyen d'un système cryptologique à clés publiques. Secure Shell offre aussi la possibilité de réaliser la transmission des communications des ports arbitraires sur une connexion chiffrée, ce qui est très pratique pour la transmission du trafic de X11 Window et des autres connexions.
Secure Shell est un substitut sécurisé par chiffrement des commandes standard telnet, rlogin, rsh et rcp. Il se compose d’un client et d’un serveur qui chiffrent les sessions au moyen d'un système cryptologique à clés publiques. Secure Shell offre aussi la possibilité de réaliser la transmission des communications des ports arbitraires sur une connexion chiffrée, ce qui est très pratique pour la transmission du trafic de X11 Window et des autres connexions.
SSH est plébiscité en tant que mécanisme d'accès interactif et sécurisé à un système distant. Il a été à l’origine conçu et développé par un Finlandais, Tatu Ylonen. Ce produit est aujourd'hui commercialisé et, même si la version d'origine est toujours disponible gratuitement, sa licence est devenue plus restrictive. Des spécifications publiques ont vu le jour; elles ont eu pour effet de favoriser le développement de nombreux logiciels client et serveur compatibles avec SSH qui, eux, ne sont pas soumis à ces restrictions relatives à l'usage commercial.
La version initiale de SSH, écrite par Tatu Ylonen, est disponible à l'adresse suivante: ftp:// ftp.cs.hut.fi/pub/ssh/. La version payante de SSH est en vente sur le site de SSH Communications Security, à l'adresse suivante: www.ssh.com. SSH Communications Security délivre gratuitement son produit aux universités.
Une version totalement gratuite compatible SSH, OpenSSH, développée dans le cadre duprojet de système d'exploitation OpenBSD (voir la figure10.8), peut être téléchargée à l'adresse suivante: www.openssh.com.
Saluons ici le travail remarquable que l'équipe chargée d'OpenBSD et d'OpenSSH accomplit quasiment gratuitement. La figure10.8 existe aussi sous la forme… d'un T-shirt, dont la vente permet de couvrir les frais du projet. Nous vous conseillons d'acheter leurs T-shirts, leurs posters et leurs CD-Rom à l'adresse suivante: www.openbsd.org/orders.html.
Saluons ici le travail remarquable que l'équipe chargée d'OpenBSD et d'OpenSSH accomplit quasiment gratuitement. La figure10.8 existe aussi sous la forme… d'un T-shirt, dont la vente permet de couvrir les frais du projet. Nous vous conseillons d'acheter leurs T-shirts, leurs posters et leurs CD-Rom à l'adresse suivante: www.openbsd.org/orders.html.
SSL (Secure Sockets Layer)
SSL fournit des services d’authentification et de chiffrement. Par rapport au risque d’écoute sur le réseau, SSL est vulnérable à une attaque de type MITM (comme il a été montré dans la section consacrée à dsniff). Un attaquant peut installer un proxy transparent entre vous et le serveur Web. Ce proxy peut être configuré de manière à déchiffrer la connexion SSL, à l’intercepter et à la rechiffrer. Lorsque cela se produit, l’utilisateur voit s’afficher une boîte de dialogue semblable à celle de la figure10.9. Le problème est que la plupart des utilisateurs ignorent ces avertissements et continuent leurs opérations.
PGP et S/MIME
PGP et S/MIME sont des standards pour le chiffrement des e-mails. S’ils sont correctement utilisés, ils empêcheront des sniffers tels que dsniff et Carnivore d’interpréter les e-mails interceptés.
Aux États-Unis, le FBI a mis au point un cheval de Troie appelé Magic Lantern conçu pour enregistrer les frappes clavier dans l’espoir de capturer la phrase secrète de l’utilisateur cible. En effet, dès lors que le FBI connaît cette phrase, il est en mesure de déchiffrer les messages électroniques. Au Royaume-Uni, les utilisateurs sont juridiquement obligés de livrer leurs clés de chiffrement aux forces de l’ordre lorsque celles-ci les leur demandent.
Commutation
Les commutateurs réseau compliquent pour les attaquants la surveillance de votre réseau, mais dans une proportion moindre. Les commutateurs sont parfois recommandés pour résoudre les problèmes d’écoute; leur premier objectif est toutefois d'améliorer les performances du réseau, pas la sécurité. Comme nous l'avons indiqué dans la section «Techniques d’écoute avancées», tout attaquant nanti des outils appropriés peut continuer à surveiller un hôte commuté s'il est sur le même commutateur ou segment que ce système.
Techniques de détection
Quelle stratégie devez-vous adopter si, pour une raison ou pour une autre, vous ne pouvez pas chiffrer les données qui circulent sur votre réseau ? Vous devez, dans ces conditions, détecter toute carte réseau susceptible de servir à un sniffer.
Détection locale
De nombreux systèmes d'exploitation fournissent un mécanisme permettant de déterminer si une carte réseau opère en mode promiscuité. Il s'agit habituellement d'un indicateur d'état associé à chaque carte réseau et géré par le noyau. Dans les systèmes Unix, on peut l'utiliser à l'aide de la commande ifconfig. Les lignes suivantes montrent, sous Linux, une carte réseau qui n'est pas en mode promiscuité:
Notez que les attributs de cette carte ne mentionnent aucune information relative au mode promiscuité. Lorsque la carte est en mode promiscuité, comme dans l'exemple suivant, le mot clé PROMISC apparaît dans la section des attributs:
Il est important de noter que si un attaquant a compromis la sécurité de l'hôte sur lequel vous exécutez cette commande, il peut facilement modifier cette sortie. La boîte à outils de l'attaquant peut renfermer un clone de la commande ifconfig qui ne signale pas les cartes réseau en mode promiscuité.
Détection réseau
Il existe plusieurs techniques, plus ou moins fiables, destinées à déterminer si un hôte surveille le trafic du réseau, mais il n'existe aucune méthode fiable de détection des sniffers dans un réseau.
Résolutions DNS
La plupart des programmes de surveillance de réseaux émettent des requêtes de résolution DNS inverse lorsqu’ils génèrent une sortie affichant les hôtes émetteurs et destinataires d’une connexion réseau. L’envoi de ces requêtes génère du trafic supplémentaire et il s’agit pour l’essentiel de recherches d’adresses réseau. Il est donc possible de surveiller les hôtes du réseau qui se livrent à de très nombreuses recherches d'adresses. Sachez toutefois qu'il s'agit parfois de coïncidences et que ces recherches ne sont pas forcément révélatrices de l’activité d'un sniffer. Il existe une méthode plus simple, qui fonctionne à tous les coups. Elle consiste à générer une fausse connexion réseau à partir d'une adresse qui n'a rien à voir avec le réseau local. Il suffit ensuite de surveiller le réseau et d'observer les requêtes DNS qui tentent de résoudre la fausse adresse; cela permet de détecter l'hôte qui fait de l’écoute.
Latence
Un autre procédé peut être utilisé pour découvrir l'hôte qui surveille le réseau: détecter les variations de latence des réponses de cet hôte (c'est-à-dire faire des commandes ping). Cette technique est sujette à caution (la latence d'un hôte peut être affectée par une opération normale), mais peut tout de même aider à définir si un hôte surveille le réseau. Il faut d'abord sonder l'hôte, puis mesurer les temps de réponse. Un trafic réseau très important est ensuite généré pour appâter l'hôte qui scrute le réseau à des fins de recherche d'informations d'authentification. Enfin, la latence de cet hôte est de nouveau mesurée afin de déterminer si elle a changé de manière significative.
Les bogues des pilotes
Il arrive parfois qu'un bogue d'un pilote du système d'exploitation donne des indications pour déterminer si un hôte opère en mode promiscuité. Core-SDI, une société argentine spécialisée dans la sécurité, a découvert un jour un bogue dans un pilote Ethernet de Linux. Ils se sont rendus compte que quand un hôte opérait en mode promiscuité, le système d'exploitation n'arrivait pas à vérifier les adresses Ethernet afin de s'assurer que le paquet était ciblé sur l'une de ses interfaces. Cette validation était effectuée au niveau IP, et le paquet était accepté s'il était destiné à l'une des interfaces de l'hôte. Les paquets qui ne correspondaient pas à l'adresse Ethernet de l'hôte auraient normalement dû être rejetés au niveau matériel; cependant, en mode promiscuité, cela ne se produisait pas. On peut déterminer si un hôte est en mode
promiscuité en lui envoyant un paquet ping ICMP avec l'adresse IP de l'hôte valide, mais une adresse Ethernet invalide. Si l'hôte répond à cette requête ping, c'est qu'il s'exécute en mode promiscuité.
AntiSniff
AntiSniff est un outil écrit par un groupe de hackers grey-hat de Boston connu sous le nom de L0pht. Ils ont combiné plusieurs des techniques ici abordées pour produire un outil qui détermine efficacement si un hôte opère en mode promiscuité. Une version d'essai de cet outil limitée à 15jours (pour les systèmes Windows) peut être téléchargée à l'adresse suivante:
www.l0pht.com/antisniff/download.html.
Une version Unix réservée aux usages non commerciaux est disponible gratuitement. Reportez-vous à la licence d'utilisation pour connaître les restrictions de cette version.
N’oubliez pas qu’AntiSniff découvre certains sniffers et non pas tous. Il existe en effet des sniffers complètement furtifs, tandis que d’autres ont été corrigés de manière à déjouer AntiSniff.
Moniteur réseau
Le Moniteur réseau disponible sous WindowsNT est capable de surveiller les utilisations de Netmon sur votre réseau. Il conserve aussi la liste des postes sur lesquels Netmon est installé.
Il ne détecte que les copies du Moniteur réseau, ce qui signifie que si un attaquant utilise un autre sniffer, vous devez alors le détecter en utilisant une des méthodes décrites précédemment. La plupart des systèmes de détection détectent aussi ces instances de NetMon.
En résumé...
L’écoute est une technique de surveillance d’un réseau par interception des paquets transmis sur celui-ci. On peut y faire appel pour obtenir des informations d’authentification (les mots de passe), voler des e-mails, surveiller les navigations Web et, plus généralement, récupérer toutes les informations liées aux activités d’un hôte cible sur le réseau. Parmi les protocoles les plus intéressants pour l’interception des mots de passe figurent telnet, POP3, IMAP, HTTP et NetBIOS.
Il existe un grand nombre de logiciels d’écoute. Les plus connus sont Ethereal, Sniffer Pro, NetMon, AiroPeek, TCPDump, dsniff et Ettercap. Certains sont des produits du commerce, tandis que d’autres sont proposés gratuitement. Pour l’interception des mots de passe, dsniff est le plus intéressant de ces utilitaires; il est par ailleurs gratuit. Signalons qu’il comporte des modules pour la surveillance des e-mails et du trafic Web. Carnivore est un sniffer spécialisé utilisé par des forces de police américaines et qui compte un plus grand nombre d’options de filtrage que la plupart de ses concurrents (il n’est cependant pas disponible pour le public).
Il y a quelques années, la plupart des réseaux locaux étaient de type Ethernet: le trafic de chaque hôte était envoyé à tous les nœuds attachés à un même segment. Progressivement, les commutateurs ont été introduits; ces dispositifs permettent d’améliorer les performances du réseau et de contrecarrer dans une certaine mesure l’écoute, puisqu’ils sont conçus pour ne pas envoyer de trafic aux nœuds qui ne sont pas supposés en recevoir. Des manipulations permettent à des attaquants de déjouer cette limitation: l’inondation MAC, l’usurpation ARP ou la manipulation du routage. Ces techniques visent à diriger le trafic réseau vers un sniffer installé sur un hôte du réseau commuté. Pour parvenir à cette fin, l’inondation MAC et la manipulation du routage agissent sur le dispositif de commutation lui-même, tandis que l’usurpation ARP modifie la table ARP de la machine dont le trafic est à surveiller. Certains des sniffers mentionnés plus haut sont fournis avec des outils permettant de réaliser ces manipulations.
À l’exception des anciennes versions de Windows, chaque système d’exploitation comporte une API qui lui est propre et qui permet d’accéder aux opérations de sa couche liaison de données. Pour les versions de Windows qui n’offrent pas cette fonctionnalité, il est possible d’installer des modules logiciels gratuits. L’écriture d’un programme d’interception du trafic réseau ne requiert le plus souvent que quelques lignes de code, mais il convient de disposer des privilèges appropriés pour l’exécuter. C’est en revanche une tâche beaucoup plus difficile que de décoder le trafic intercepté par un programme de ce genre.
De manière générale, le chiffrement des communications constitue la meilleure défense contre la menace d’écoute. Si elle est correctement mise en oeuvre, cette mesure de protection empêche toute interception et décodage du trafic chiffré. Il n’en demeure pas moins que de nombreux schémas de chiffrement implique que l’utilisateur fasse attention aux messages d’erreur susceptibles d’apparaître et agisse en conséquence. Le chiffrement des communications peut en effet être déjoué par une attaque de type MITM, mais ce genre d’attaque génère une erreur qui est trop souvent ignorée. Le logiciel dsniff comprend des outils permettant de
réaliser des attaques MITM .
Il existe différentes techniques pour détecter l’activité de sniffers dès lors que ceux-ci s’exécutent sur un système d’exploitation dont le mode opératoire normal n’implique pas l’activation du mode promiscuité de son interface réseau. Parmi eux figurent la surveillance des requêtes DNS générés par une fausse adresse IP, l’attente de réponses à un paquet dont l’adresse MAC est erronée, etc. Ces moyens ne seront jamais fiables à 100% dans la mesure où il est possible de construire un sniffer complètement passif.
Repères
Qu’est-ce que l’écoute?
- Le sniffing est une sorte de mise sur écoute du réseau permettant d’exercer une surveillance passive sur les trafics transmis.
- Dans un cadre opératoire classique, un sniffer est attaché à un hôte d’un segment réseau.
- Dans un cadre opératoire moderne, un sniffer est installé sur la machine cible ou comme passerelle afin d’intercepter le trafic.
Quels types de trafic capturer?
- La cible la plus courante des sniffers sont les informations d’authentification transmises sur le réseau en texte clair, tels que les noms d’utilisateur et les mots de passe envoyés avec les protocoles telnet, FT ou HTTP.
- La seconde cible habituelle sont les messages électroniques, les entrées HTTP ou les sessions telnet.
Logiciels d’écoute
- Il existe de nombreux sniffers commerciaux ou gratuits destinés à être utilisés comme outils de diagnostic du réseau. Citons Ethereal, Sniffer Pro de Network Associates, NetMon, AiroPeek de WildPackets et TcpDump. Ces produits ne comportent pas de fonctionnalités de «piratage» permettant, par exemple, l’interception des mots de passe.
- Dsniff, Ettercap, Esniff et Sniffit sont en revanche des outils qui peuvent être utilisés pour des activités de piratage. Plutôt que d’intercepter la totalité du trafic, ces outils s’intéressent avant tout aux mots de passe et aux données en texte clair.
Techniques d’écoute avancées
- Il est plus difficile de nos jours d’espionner le trafic d’un réseau qu’auparavant, principalement à cause des commutateurs. Les anciens réseaux répétaient les données sur tous les segments, ce qui permettait à quiconque de recevoir la totalité du trafic. Les commutateurs empêchent cette diffusion du trafic à tous les hôtes.
- Il est possible d’attaquer les commutateurs de plusieurs manières. On peut les inonder d’adresses MAC pour les forcer à entrer dans certains modes dégradés, envoyer des paquets aux adresses ARP usurpées ou manipuler le routage des paquets. Ces techniques visent à diriger le trafic vers un hôte contrôlé par le pirate et sur lequel s’exécute un sniffer.
- Plusieurs logiciels d’écoute proposent des outils permettant à un pirate de s’interposer dans des communications, de façon à perpétrer une attaque de type MITM. Une attaque classique consiste à se faire passer pour un serveur HTTPS, de manière à ce que la victime chiffre ses données avec la clé de l’attaquant en pensant qu’il s’agit de la clé du serveur de confiance. Cette attaque permet à un pirate de voir les données avant de les rechiffrer avec la clé du véritable serveur.
API réseau des systèmes d’exploitation
- L’écoute n’est pas le mode opératoire normal d’un système d’exploitation. Il faut recourir à des API particulières pour activer ce mode.
- L’API libcap est l’API la plus largement prise en charge sur les plates-formes Unix, Windows et Macintosh. Mais il existe aussi des API plus spécialisées propres à chaqueplate-forme.
Mesures de protection
- La principale défense contre l’écoute est le chiffrement. La plupart des protocoles prennent en charge le chiffrement des informations d’authentification (le nom d’utilisateur et le mot de passe) et des données. SSL et SSH sont les deux standards de chiffrement les plus employés.
- Le chiffrement ne fonctionne pas s’il n’est pas correctement utilisé. Les utilisateurs doivent choisir des mots de passe robustes et se montrer vigilants à l’égard des attaques de type MITM.
- Le remplacement des hubs à média partagé par des commutateurs rend plus difficile l’écoute, mais celle-ci n’en est pas pour autant impossible.
Techniques de détection des écoutes
- La mesure de protection la plus importante à prendre consiste à surveiller les hôtes afin de voir si leurs interfaces n’ont pas été placées en mode promiscuité. Cela indique non seulement l’exécution d’un sniffer, mais aussi la compromission de l’hôte par un hacker.
- La détection à distance des sniffers n’est pas fiable. Cette technique fait appel à des tests évaluant le comportement des hôtes. Il s’agit notamment de voir si le système est ralenti du fait de l’activité d’un sniffer ou de détecter les sniffers résolvant des adresses IP en des noms. En effet, seuls des sniffers se comportent de cette manière.
FAQ
Q. La surveillance des réseaux est-elle légale ?
R. L'utilisation des sniffers à des fins de diagnostic et d’administration est légale; la surveillance des activités des employés par l'encadrement d'une entreprise est en revancheun sujet qui fait l'objet d'un vaste débat. Certains outils du marché ont clairement cette vocation. Dans certains pays (particulièrement aux États-Unis et au Royaume-Uni), les employeurs ont le droit de surveiller tous les trafics circulant sur leur réseau, y compris ceux générés par les activités des employés.
Q. Comment puis-je détecter qu'un sniffer est en train de surveiller mon réseau ?
R. Il n'existe aucune méthode totalement fiable, mais des utilitaires peuvent vous assister dans cette tâche (AntiSniff, par exemple).
Q. Comment puis-je me protéger contre un sniffer?
R. Le chiffrement, encore le chiffrement et toujours le chiffrement: c'est la seule solution! Les nouvelles versions de nombreux protocoles réseau gèrent également l'authentification sécurisée.
Q. Comment se fait-il que mon utilitaire ne fonctionne pas sous Windows?
R. La plupart des outils de sniffing décrits dans ce chapitre ont été écrits pour des plates-formes telles que Linux. Ils peuvent s’exécuter sous Windows, mais il vous faut installer des fonctionnalités dotées d’une ergonomie Unix. Pour cela, vous pouvez faire appel à la boîte à outils WinDump décrite plus haut. Vous aurez aussi peut-être besoin d’installer d’autres utilitaires comme l’environnement gnu.
Q. Puis-je utiliser ces outils dans des environnements de réseau sans fil?
R. Oui, mais cela demande un énorme travail préalable. Le sniffing n’est pas pris en charge par les progiciels standards acquis auprès de votre éditeur. Vous devrez rechercher sur Internet les correctifs logiciels adaptés à votre pilote. Vous aurez aussi peut-être besoin de télécharger des utilitaires tels que AirSnort, conçus pour déjouer la faiblesse du chiffre dans les réseaux sans fil actuels. Heureusement, rares sont ceux qui ont recours au chiffre; en conséquence, cette dernière opération n’est pas toujours indispensable.
Article plus récent Article plus ancien