Percer les secrets de Kismet

Utiliser Kismet et comprendre les problèmes de sécurité
Kismet rentre dans la catégorie des "sniffers". Il permet de récupérer un certain nombre d'informations sur les réseaux Wi-Fi qui peuvent mettre à mal leur sécurité. Kismet est souvent comparé au logiciel Windows Netstumbler. Nous  pensons que c'est un tort que l'on fait à Kismet tant ses fonctionnalités dépassent de loin celles de Netstumbler. Dans cet article, nous allons voir l'exemple d'un réseau Wi-Fi qui a été détecté par Kismet pour nous rendre compte du nombre d'informations que nous pouvons obtenir. Nous espérons, par l'intermédiaire de cet article, vous rendre plus sensible au problème de la sécurité des réseaux Wi-Fi.
Le Wi-Fi s'est considérablement développé ces trois dernières années, notamment grâce à l'introduction par Intel de la technologie Centrino. Les fournisseurs d'accès à internet jouent aussi un rôle important dans ce développement en proposant de plus en plus à leurs clients des box qui intègrent le Wi-Fi. Ces box sont souvent laissées configurées par défaut par le client, et quand la configuration par défaut est mal faite, cela peut devenir problématique.  Aussi dans un premier temps, nous allons examiner la configuration de Kismet, puis dans un second temps nous allons apprendre à l'utiliser. Vous verrez quels types d'informations nous pouvons obtenir, et quelles en sont les conséquences. Nous terminerons par l'utilisation de l'application gpsmap fournie avec kismet, et qui va nous permettre (grâce à l'utilisation d'un GPS) de générer des cartes des réseaux sans fil.
Fonctionnement de Kismet
Kismet fonctionne sur le mode client/serveur. Bien heureusement, nous disposons aussi d'un exécutable appelé kismet qui se charge de lancer le serveur kismet_server et le client kismet_client. La capacité de Kismet à fonctionner en mode client/serveur permet une très grande souplesse dans son utilisation. Mieux encore, le logiciel  peut fonctionner en mode drone grâce à kismet_drone. Quel est l'intérêt? Tout simplement de pouvoir centraliser les informations de plusieurs périphériques Wi-Fi sur un même serveur. Imaginez que vous possédez un réseau qui comporte plusieurs routeurs Wi-Fi. Chacun des routeurs est une porte sur votre réseau. Et bien il est possible d'ajouter des drones sur votre réseau et de récupérer les informations de tous les drones sur un serveur. Nous pourrons alors, en nous connectant sur le serveur, avoir la liste de toutes les machines qui se seront connectées sur les routeurs Wi-Fi, et même plus...


Figure 1. Exemple d'utilisation de kismet sur un réseau

Le mode RFMON
Le mode RFMON (Radio Frequency Monitoring), encore appelé mode monitor, est un mode dans lequel la carte Wi-Fi se met en écoute, et est capable de détecter tous les signaux qui sont émis sur son canal d'écoute. Ce mode permet une détection passive des réseaux Wi-Fi, mais ne permet pas d'envoyer un signal dans le même temps. La conséquence est qu'une écoute avec le mode RFMON est totalement indétectable. Dans le cas de Kismet, la carte se met en écoute successivement sur tous les canaux, ce qui permet de détecter tous les réseaux (et pas seulement sur un seul canal).
Compatibilité de Kismet
Kismet ne fonctionne pas avec tous les périphériques Wi-Fi. Pour fonctionner, Kismet a besoin que les drivers de votre carte supportent le mode RFMON. De même, le nombre de fonctionnalités de Kismet que vous pourrez utiliser dépend très fortement de votre périphérique Wi-Fi ainsi que de ses drivers. Il est donc conseillé d'avoir des drivers récents afin de pouvoir bénéficier d'éventuelles améliorations.
Installation et configuration

Toutes les grandes distributions proposent kismet, donc je ne m'attarderai pas sur la compilation du logiciel. Sachez simplement que vous aurez besoin de Imagemagick, Expat et GMP pour pouvoir compiler l'utilitaire gpsmap qui sert à générer des cartes des réseaux Wi-Fi. Si vous n'avez pas besoin de cette fonctionnalité, Kismet ne requiert aucune dépendance spéciale.

Configuration

La configuration du serveur, du client et du drone se fait respectivement par l'intermédiaire des fichiers kismet.conf, kismet_ui.conf et kismet_drone.conf. Nous allons voir en détail la configuration de chacun des éléments.
Configuration du serveur
La configuration du serveur se fait dans kismet.conf. Nous allons devoir configurer les sources afin que le serveur puisse récupérer les informations de notre (ou nos) réseau Wi-Fi. C'est la seule configuration nécessaire. Nous allons malgré tout passer en revue les différentes options qui nous sont proposées.
serveur name : c'est le nom donné à notre serveur. Cela n'apporte pas grand chose, c'est juste pour le plaisir.
suiduser : c'est le nom de l'utilisateur auquel Kismet va céder les droits sur les fichiers créés. Le serveur Kismet génère des fichiers dans lesquels il stocke tout ce qu'il trouve : adresse MAC, SSID, positions GPS... Le propriétaire de ces fichiers sera l'utilisateur indiqué comme suiduser.
source : c'est la partie la plus importante du fichier de configuration du serveur kismet. La source dépendra bien entendu du matériel dont nous disposons. Dans notre cas, nous allons configurer deux sources. L'une correspondant à mon adaptateur WUSB11, et l'autre nous permettra d'utiliser un drone que nous avons installé sur l'un de nos routeurs WRT54g. Chaque source se configure de la manière suivante :
source="type de la source","interface","nom de la source"
Pour connaître le type de source que vous devez utiliser pour votre matériel, vous devez vous référer à la documentation de Kismet (section 12. Capture Sources). Notre wusb11 est géré par le driver atmel_usb, est configuré sur l'interface wlan0 et nous le nommons wusb11 (le nom est à la discrétion de l'utilisateur). Notre drone, quant à lui, est du type kismet_drone et est installé sur un routeur dont l'adresse IP est 192.168.1.1. Nous aurons donc les deux lignes suivantes :
source=atmel_usb,wlan0,wusb11
source=kismet_drone,192.168.1.1:3501,wrt54g
allowedhosts : permet de définir quels clients kismet peuvent se connecter sur le serveur kismet. Par défaut, le serveur n'autorise les connections que depuis 127.0.0.1 c'est-à-dire la machine elle-même sur laquelle tourne le serveur.
maxclient : permet de définir le nombre maximum de clients qui peuvent se connecter simultanément sur le serveur.
Configuration du drone
La configuration du drone se fait à l'aide du fichier kismet_drone.conf. La configuration du drone en elle-même ne pose pas de problème étant donné qu'elle est très similaire à celle du serveur. Vous devez configurer la source et ne pas oublier d'autoriser le serveur à se connecter au drone. L'adresse IP de mon serveur étant 192.168.1.10, Nous aurons donc :
allowedhosts=127.0.0.1,192.168.1.10
source=wrt54g,eth1:prism0,wireless
Configuration du client
Passons maintenant à la configuration du client. Celle-ci est très simple, et en général la configuration par défaut suffit. Toutefois, dans le cadre de notre installation, nous devons dire au client où trouver le serveur.
host : indique le serveur sur lequel le client se connecte. Par défaut, il se connecte sur le localhost.
Dans mon cas, le client se connecte sur le serveur qui se trouve sur la même machine, nous aurons donc:
host=localhost:2501
Utilisation de kismet
Pour utiliser Kismet, il faut, en premier lieu, lancer les drones, puis les serveurs et enfin le client. Pour une utilisation sur un poste unique, l'utilitaire kismet se chargera de lancer le serveur et le client ce qui simplifie son utilisation pour les cas les plus simples.
Au démarrage de Kismet, un message de bienvenue vous invite à appuyer sur la barre d'espace pour continuer, et vous informe que vous pouvez obtenir de l'aide à tout moment en appuyant sur la touche h.
L'interface principale de Kismet présente 3 zones nommées Network list, Info et Status. La première, Network List, affiche tous les réseaux découverts, et nous donne un aperçu des informations recueillies par kismet. Pour chaque réseau, représenté sur une ligne, nous avons accès à plusieurs informations. La colonne T permet de connaître le type d'appareil qui a été détecté : A correspond à un point d'accès, H un appareil en mode Ad-hoc, T un appareil Turbocell. La colonne W indique si les données provenant de l'appareil sont cryptées ou non : N pas de cryptage détecté, Y cryptage WEP, O autre cryptage. La colonne Flag donne d'autres indications qui auront pu être détectées par kismet. La dernière colonne, IP Range, permet de savoir quelles adresses IP sont attribuées sur le réseau Wi-Fi si celui-ci utilise un serveur DHCP. La zone Info donne des statistiques concernant les informations récoltées par kismet. La dernière zone, Statut, indique les événements qui se produisent durant le fonctionnement de kismet, par exemple la détection d'un réseau, le changement de statut d'un réseau...


Figure 2. Liste des réseaux détectés

En plus de cette interface principale, Kismet nous offre la possibilité d'obtenir des informations complémentaires à l'aide de fenêtres que l'on appellera par l'intermédiaire de raccourcis clavier. Ainsi on pourra faire apparaître une fenêtre de statistiques détaillées (touche A) qui nous donne des chiffres sur le nombre de réseaux détectés, le pourcentage de réseaux cryptés, le nombre de paquets récoltés, et un graphique du nombre de réseaux par canal. La fenêtre du trafic (touche R) nous permet d'avoir un graphique sur le trafic détecté. On peut aussi connaître les types des paquets (touche P), la puissance du signal de la carte (touche L), un état du GPS (touche F), la liste des serveurs Kismet auxquels le client est connecté (touche E), et enfin les messages d'avertissement (touche W).

 


Figure 3. Puissance du signal

Un exemple d'utilisation

Après ce bref aperçu des différentes fenêtres proposées par le logiciel, nous allons passer à un exemple d'utilisation concrète.
Lorsque nous arrivons sur le tableau principal de Kismet, la liste des réseaux détectés est triée dans un mode automatique. La première chose que nous allons faire, c'est de choisir un autre mode de tri. Pour cela nous allons taper sur la touche s, puis choisir, par exemple, le tri first time seen grâce à la touche F. La liste des réseaux détectés est alors triée de manière non automatique, ce qui nous offre désormais la possibilité de naviguer dans la liste avec les touches fléchées du clavier, et ainsi sélectionner un réseau en particulier. Choisissons un réseau et appuyons sur la touche I.

Kismet nous affiche alors une fenêtre avec toutes les informations détaillées du réseau (voir figure 4) : le SSID, le BSSID, le nom du fabricant du matériel, le débit du réseau, le type du matériel, la présence ou non d'un cryptage et quel type de cryptage est utilisé, le nombre de clients qui sont connectés sur l'appareil, la plus petite et la plus grande adresse IP données sur le réseau, et enfin des statistiques sur les données qui transitent sur le réseau. Comme vous pouvez le voir, la liste des informations que nous pouvons recueillir grâce à kismet est tout simplement impressionnante. Mais mieux encore, fermons cette fenêtre (touche X), revenons à la liste des réseaux et appuyons sur la touche "C".


Figure 4.Informations sur le réseau sélectionné

 


Figure 5. Liste des clients connectés au réseau sélectionné

 

Kismet nous affiche alors ni plus ni moins la liste des clients qui sont connectés au réseau que l'on a sélectionné (figure 5). Cette liste est, comme pour la liste des réseaux, triée de manière automatique par défaut, et nous pouvons, comme précédemment, la trier d'une autre manière afin de pouvoir sélectionner un client de la liste et obtenir des informations détaillées avec la touche "i" (figure 6).
 


Figure 6. Informations d'un client

 
Les codes couleurs
Revenons à la liste des réseaux. Au cours de vos utilisations de Kismet, vous vous apercevrez que certains réseaux apparaissent en blanc, d'autres en vert, en rouge... Ce code couleur utilisé par Kismet est très pratique et permet, d'un coup d'oeil, de connaître le niveau de sécurité d'un réseau. En blanc, nous avons les réseaux non cryptés, en vert les réseaux cryptés, en rouge les appareils qui sont configurés avec les paramètres d'origine du constructeur. Pour ces derniers, il suffit alors de se rendre sur le site du constructeur, de télécharger la documentation afin de connaître l'adresse IP par défaut, le mot de passe par défaut, les services qui sont utilisés sur l'appareil et leur réglage (firewall, serveurs...). Bien entendu, Kismet ne peut pas affirmer que l'appareil en question est configuré avec les réglages par défaut, mais il peut nous indiquer si certains éléments (comme le SSID) sont ceux par défaut, ce qui peut nous laisser penser dans ce cas, que le reste peut aussi ne pas avoir été changé. Et enfin, les réseaux affichés en bleu sont les réseaux dont le SSID est caché (cas du broadcast SSID désactivé).
Conséquences sur la sécurité
Nous espérons, par l'intermédiaire de cet article,  vous faire prendre conscience du problème que pose la sécurité des réseaux Wi-Fi. Ainsi,  si vous pensiez qu'il suffit de cacher le réseau Wi-Fi (en désactivant le broadcast ssid), qu'il suffit de mettre un filtrage par adresse MAC, ou qu'il suffit de se contenter du cryptage WEP, vous êtes dans l'erreur. Il faut obligatoirement mettre en place un système de cryptage autre que le WEP. En outre, si vous avez la possibilité de mettre en place une authentification (de type radius), n'hésitez surtout pas à le faire. Le filtrage par adresse MAC peut être mis en place, mais ne sera d'aucune utilité si vous ne cryptez pas votre réseau Wi-Fi. Le mieux reste encore de mettre en place un tunnel VPN, qui assurera à la fois une authentification et un cryptage des données sur le réseau sans fil. Malgré tout, cette méthode nécessite une configuration supplémentaire de la part de l'utilisateur, ce qui entraine une contrainte supplémentaire qui n'est pas toujours souhaitable si nous voulons garder une certaines souplesse d'utilisation.


Figure 7. Diverses informations collectées pour un même réseau

Pour s'en convaincre, les figures 5, 6 et 7 font toutes références à un même réseau. Malgré le masquage du SSID, Kismet a pu le détecter, (ce qui  nous permet de nous connecter au réseau Wi-Fi). La figure 5 nous informe de tous les clients qui sont connectés au réseau Wi-Fi, leur adresse MAC, leur adresse IP (au revoir la protection par filtrage d'adresse MAC !). Sur la figure 7, on peut voir tout ce qui se passe sur le réseau Wi-Fi, et même sur le réseau filaire qui se trouve derrière le point d'accès. En l'occurrence, on voit que la machine dont l'adresse IP est 192.168.1.3 est connectée à une imprimante de marque HP, et que l'un des appareils utilisés est un PDA qui tourne sous Pocket PC 4.21.

Conclusion

Surveiller son réseau avec kismet
Comme on vient de le voir, Kismet permet  littéralement d'espionner les réseaux Wi-Fi mal protégés. Une autre utilisation du "sniffer" est de s'en servir pour protéger son propre réseau Wi-Fi. Pour ce faire, il faut ajouter des points d'accès qui serviront de drones (et donc qui ne pourront pas être utilisés par les usagers du réseau) à divers endroits de votre réseau Wi-Fi. Il faut ensuite ajouter autant de sources de type Kismet_drone sur le serveur qu'il y a de drones sur le réseau. Si votre réseau Wi-Fi utilise plusieurs canaux Wi-Fi, vous pouvez configurer chaque drone sur un canal particulier (et il écoutera uniquement sur ce canal). Pour fixer une source sur un canal particulier, il suffit d'ajouter un argument à cette source et de désactiver le channel hopping. L'exemple suivant reprend l'exemple du drone pour lequel on fixe le canal sur le canal 11 (notez le changement de la configuration de la source). Le fichier kismet_drone.conf contiendra alors :
source=wrt54g,eth1,wireless,11
channelhop=false
En plus de tout cela, il est possible de créer un fichier fifo sur le serveur Kismet afin de le connecter à un système de détection d'intrusion tel SNORT.
Créer des cartes des réseaux Wi-Fi
Si vous avez compilé Kismet avec les bonnes dépendances, vous pouvez aussi générer des cartes du réseau à partir des fichiers de logs de Kismet par l'intermédiaire du programme gpsmap. Si vous souhaitez utiliser gpsmap, nous vous recommandons de le compiler depuis la version de développement de Kismet. Plusieurs patchs ont été ajoutés depuis la dernière version stable du logiciel, et plus particulièrement le support des cartes en Europe via les cartes du site Expedia.
Pour créer des cartes des réseaux Wi-Fi, il vous faut les fichiers de logs de kismet dont un qui contient les coordonnées GPS détectées par kismet (le fichier .gps), et une source pour le fond de la carte (la ville, les rues...). Il existe à l'heure actuelle (dans la version de développement) trois sources utilisables pour les cartes :
·    Terraserver
·    Tiger US Census
·    Expedia EU
La source se paramètre avec l'option -S. Il est possible de générer une carte sans avoir de source. On utilisera alors l'option -S -1 qui nous créera une carte sur un fond blanc.
Une fois que l'on a sélectionné la source, il faut choisir le type d'informations que l'on veut afficher. Bien entendu on peut afficher plusieurs informations en même temps sur la carte. Pour la description des différentes informations que l'on peut afficher, je vous renvoie à la documentation de kismet. La commande gpsmap -S6 -ar -M Kismet-Sep-07-2006-4.gps -o kismet_map.png va générer une carte dans le fichier kismet_map.png représentée sur la figure 8.
 

Figure 8. Une carte générée à l'aide de gpsmap

Il est également possible de générer un fichier javascript pour pouvoir positionner les hotspots Wi-Fi sur une carte google maps pour créer des cartes interactives. On peut également donner à gpsmap une image de fond que l'on possède déjà (si vous avez des cartes plus précises par exemple, ou avec des données en plus). Il faudra alors connaître les coordonnées GPS du centre de l'image et jouer sur les échelles afin de superposer les informations extraites de gpsmap sur l'image.
Conclusion
Comme on a pu le constater, les fonctionnalités de Kismet vont bien au-delà de ce que ses concurrents peuvent nous apporter, tout ceci grâce à l'utilisation du mode RFMON. L'utilisation d'un tel logiciel doit nous faire comprendre les enjeux de la sécurité du Wi-Fi, et nous amener à une réflexion sur la sécurité de notre propre réseau, que ce soit dans un cadre professionnel ou non. La capacité du logiciel à fonctionner sur le mode client/serveur, la possibilité d'utiliser les drones et de le coupler à un système de détection d'intrusion en font un outil de choix pour protéger un réseau Wi-Fi quelle que soit sa taille.
Pour en savoir plus
·     http://www.kismetwireless.net – site officiel de Kismet ( En anglais)