WRT54G, tomato, kismet & ...
I wrote this explanation in french, for info in english you can read the Kismet forum
Introduction
J’ai trouvé beaucoup de documentation sur l’installation de Tomato/Openwrt/Hyperwrt/DD-WRT en anglais, mais pas d’exemple en français.
Et pire pour Kismet, il n’y a pratiquement pas de documentation récente
(on en trouve pour une version de 2004, pratiquement rien après).
Voici donc mon expérience
- changement de firmware, chargement de Tomato,
- installation de kismet drone sur le wrt54g.
- les resultats
- quelques considérations
Il n'y a aucune garantie que cela fonctionne chez vous et vous devez savoir qu'il y a toujours un risque à flasher/configurer un appareil. A vous de voir!
Chargement de Tomato
Avant de commencer
Matériel
un modem wifi Linksys compatible, Linksys WRT54G (v1-v4), WRT54GS (v1-v4), WRT54GL (v1 & v1.1), WRTSL54GS
Pour savoir quelle version vous utilisez, vous pouvez regarder ici
Je vais faire l’installation avec un WRT54G V1.1.
Pourquoi Tomato
J’ai choisi Tomato par rapport aux autres firmwares pour 3 raisons:
- simplicité d’utilisation et d’installation,
- l’interface est plutôt jolie et simple, plein de graphique fort bien fait,
- linux (2.4), ssh, shell.
Autres prérequis/info
- il faut un browser recent (ajax, svg) Firefox par exemple
- le login/passwd pour l’interface graphique est admin/admin
- il faut un client SSH ou telnet, voici le login/passwd ⇒ root/admin
mise à jour du firmware
- charger le firmware
- le decompresser et cherché la bonne version
WRT54G_WRT54GL.bin => Linksys WRT54G v1-4, WRT54GL. WRT54GS.bin => Linksys WRT54GS v1-3. WRT54GSv4.bin => Linksys WRT54GS v4. WRTSL54GS.bin => Linksys WRTSL54GS
- aller sur http://192.168.1.1/ il n’y a pas de login et le password est admin (si vous ne l’avez pas changé, sinon un petit reset du linksys peut aider)
- vous allez dans administration / firmware upgrade
- charger le fichier correspondant à votre linksys, pour moi: WRT54G_WRT54GL.bin
- attendre un peu
- cliquer sur “continue” puis encoder le nouveau login/passwd ⇒ admin/admin
- voilà Tomato est installé, plutôt simple non !
Kismet-drone & wrt54g
Kismet est un paquet sniffeur pour réseau wifi.
Il écoute simplement les informations qui passent dans l’air et les analysent.
Le problème est que finalement assez peu de cartes wifi ont la capacité de simplement écouter
et que les systèmes d’exploitation ne facilitent pas la tâche (ne marche pas sous windows).
La solution consiste donc a utiliser le wrt54g comme une “oreille”, un drone
et d’utiliser son pc/mac pour l’analyse de donnée (kismet-server et kismet_client)
pour plus de détail, voici une introduction sur harakiwi.net
Préparation
Installer kismet drone, le plat de résistance …
tomato n’a pas de système de gestion de package, mais rien n’empêche de copier l’exécutable (compilé en statique) sur le linksys.
1er chose à faire, autoriser les connections ssh dans tomato.
dans le menu ⇒ administration ⇒ Admin Access
SSH daemon, enable at startup, allow pass, je n’ai pas donné de clef, il n’y a pas de remote access, pas de gros risque.
Le drone
J’ai chargé kismet-drone http://www.kismetwireless.net/code/kismet-drone-2005-08-R1-wrt54.ipk
Noté que j’ai passé des heures sur ce point, les drones de 2004 n’utilise le même protocole,
il démarre bien mais impossible de les lier à kismet-server.
j’ai aussi tester des drone de 2008 et 2007 mais ils ont besoin d’une librairie non présente sur tomato…
(une compilation croisée devrait solutionner ce problème, mais vu que cette version 2005 fonctionne !!)
Renommé en tgz, décompacté, vous avez 2 tar.gz dedans.
- control, pas très interessant.
- data, à decompresser qui contient un fichier de configuration et l’exécutable.
on modifie kismet_drone.conf, voici les champs a adapter:
allowedhosts=192.168.0.6 #source=wrt54g,eth1:prism0,wrt54g #source=wrt54g,prism0,drone source=wrt54g,eth2:prism0,wrt54g #WRT v1, v1.1 #source=wrt54g,eth2,wrt54g #WRT v2 #source=wrt54g,eth1,wrt54g channelhop=true splitchannels=false
J’ai indiqué toute les “source” que j’ai trouvé, celle qui n’est pas en commentaire est utilisée sur ma configuration.
Puis il faut les copier sur le linksys.
scp Downloads/kismet-drone/kismet_drone root@192.168.0.1:/root/ scp Downloads/kismet-drone/kismet_drone.conf root@192.168.0.1:/root/
ensuite vous vous connectez en ssh sur le linksys
ssh -l root 192.168.0.1
password:
cd /root
./kismet_drone -f kismet_drone.conf
Suid priv-dropping disabled. This may not be secure.
No specific sources given to be enabled, all will be enabled.
Disabling channel hopping.
Source 0 (drone): Enabling monitor mode for wrt54g source interface eth1 channel 0…
Source 0 (drone): Opening wrt54g source interface eth1…
FATAL: pcap reported netlink type 1 (EN10MB) for eth1.
This probably means you’re not in RFMON mode or your drivers are reporting a bad value.
Make sure you have the correct drivers and that entering monitor mode succeeded.
marche pas, il ne peut passer le WRT en mode écoute,
la source n’est peut être pas bonne dans le fichier de configuration et il faudrait vérifier l‘état du linksys.
passer en mode écoute, RFMON
Voici un script qui passe le linksys en mode écoute, à nouveau, j’ai pas mal chipoter dessus.
Il faudra surement l’adapter suivant le modèle que vous utilisez.
#desactive les interfaces reseaux ifconfig prism0 down ifconfig eth2 down
#on les reactive ifconfig prism0 up ifconfig eth2 up
#on passe en mode passif d‘écoute wl ap 0 wl passive 1 wl promisc 1
#wl disassoc #cette commande ne marche pas pour moi #on fait un scan, histoire de tester wl scan sleep 5 #attendre un peu wl scanresults
si l’interface est bien configurée, “wl scanresults” devrait afficher qq chose comme
SSID: “XXXXXXXXXXX” Mode: Managed RSSI: -78 dBm noise: -99 dBm Channel: 6 BSSID: 00:12:BF:XX:XX:XX Capability: ESS WEP ShortPre ShortSlot Supported Rates: [ 1(b) 2(b) 5.5(b) 11(b) 22 6 9 12 18 24 36 48 54 ]
SSID: “XXXXXXXXXXXX” Mode: Managed RSSI: -84 dBm noise: -99 dBm Channel: 6 BSSID: 00:1A:2A:XX:XX:XX Capability: ESS WEP ShortPre ShortSlot Supported Rates: [ 1(b) 2(b) 5.5(b) 11(b) 22 6 9 12 18 24 36 48 54 ]
la commande “ifconfig” permet aussi de contrôler les interfaces activent:
#ifconfig
br0 …
eth0 …
eth1 …
eth2 Link encap:Ethernet HWaddr 00:0C:41:XX:XX:XX
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:6 Base address:0×2000
lo …
prism0 Link encap:UNSPEC HWaddr 00-0C-41-XX-XX-XX-00-00-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:0 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
de mon expérience, il vaut mieux s’arranger pour que le wl scanresults fonctionne puis commencer a chipoter avec la source du fichier de config. et il vaut mieux reinitialiser l’interface apres chaque test (ifconfig … puis les wl)
après ca marche ;)
# ./kismet_drone -f kismet_drone.conf Using alternate config file: kismet_drone.conf Suid priv-dropping disabled. This may not be secure. No specific sources given to be enabled, all will be enabled. Enabling channel hopping. Disabling channel splitting. NOTICE: Disabling channel hopping, no enabled sources are able to change channel. Source 0 (drone): Enabling monitor mode for wrt54g source interface prism0 channel 0… Source 0 (drone): Opening wrt54g source interface prism0… NOTICE: bind address not specified, using INADDR_ANY. Kismet Drone 2005.08.R1 (Kismet) Listening on port 3501 (protocol 9). Allowing connections from 192.168.0.6/255.255.255.255
Remarques
Un autre truc à savoir, /root c’est de la ram, donc si on reboot le linksys, il oublie. Il est donc plus simple d’avoir un répertoire avec les fichiers sur son pc et copier quand on en a besoin.
scp Documents/kismet-drone/* root@192.168.0.1:/root/
dans ce répertoire, j’ai kismet_drone, la fichier de config, et un script d’initialisation avec les ifconfig et wl.puis on va simplement le lancer en ssh.
./init_kismet
./kismet_drone -f kismet_drone.conf
voici trois liens qui m’ont bien aidé:
- http://toys.lerdorf.com/archives/20-Kismet-on-the-Linksys-WRT54G.html
- http://www.dd-wrt.com/wiki/index.php/Kismet_Server/Drone#When_installed_on_WRT_as_drone
- http://www.kismetwireless.net/
h3. Kismet-server & client
bon j’installe kismet sur le mac (avec macport)
sudo port install kismet
modifier /etc/kismet.conf (en fonction de vos parametres)
source=kismet_drone,192.168.0.1:3501,drone
suiduser= moi
j’ai remarqué ici qu’il y a un problème avec leopard et libpcap si vous essayez d’utiliser kismet avec la carte wifi de votre mac, vous serez obliger d’installer une version plus récente de libpcap que celle présente dans macport. mais ce bug n’a pas d’impact si vous utilisez le drone wrt54g.

les resultats
channel hopping
Assez rapidement j’ai remarqué un problème, mon mac détectait 6 wifi autour de moi,
le wrt54g uniquement 4, dont 2 que le mac ne voyait pas (SSID caché).
La raison était assez simple, la fonction de channel hopping du WRT ne marche pas.
Le routeur restait bloquer sur le channel 1, et n‘écoutait jamais les 13 autres channels :/
Après quelques recherches, il semble que ce soit “normal”.
J’ai donc désactive la channel hopping du kismet-drone.conf
channelhop=false
Puis installer sur le routeur un petit script trouvé sur le site de dd-wrt qui va changer régulièrement le canal d‘écoute.
#!/bin/sh # #hop.sh Hop true all channels # #Version: @(#)hop 1.78 06-Feb-2006 ramiro.rikkert [AT] hva.nl #http://www.dd-wrt.com/wiki/index.php/Channel_hopping_on_kismet_drone # #USA channels #CHANNELS=1,6,11,2,7,3,8,4,9,5,10 #NBHOPS=11 #EU channels CHANNELS=1,7,13,2,8,3,14,9,4,10,5,11,6,12 NBHOPS=14 #How many seconds to dwell on channel SECONDS=2 #End of settings INDEX=0 while true do let INDEX=INDEX+1 [ $INDEX -gt $NBHOPS ] && INDEX=1 CURRENT=`echo $CHANNELS | cut -d ‘,’ -f $INDEX` echo -n -e “\r\33[KCurrent channel: $CURRENT\r” wl channel $CURRENT sleep $SECONDS done
Grâce à ce script, Kismet a maintenant une vue sur l’ensemble des wifi actifs (une bonne dizaine ici)
il faut bien comprendre qu’avec le channel hopping, le routeur passe sans arrêt d’un channel à un autre, il n‘écoute pas en parallèle tous les channels !!
la suite
Quelques idées:
Free wifi
Le plus simple est d’utiliser kismet pour détecter les wifi ouverts.
Une fois trouvé le SSID d’un wifi ouvert, il suffit de s’y connecter.
Si jamais il y a un filtre sur l’adresse MAC, il faut s’y connecter en utilisant l’adresse mac d’un client de ce wifi (visible dans kismet).
Casser une clef wep
La fonction de channel hopping est très pratique pour voir les statuts des réseaux, trouver les wifi non-protégés, les types de protection, ceux qui sont actifs, etc.
Mais si vous voulez aller plus loin, il va falloir le couper. Et vous concentrer sur un channel ou même juste le SSID du réseau wifi que vous voulez écouter.
Cette commande lancée sur votre routeur permet par exemple d‘écouter le 6ème channel.
wl channel 6
A partir de ce moment, Kismet devrait commencer à sauvegarder l’ensemble du trafic sur le channel 6.
Si vous ne trouvez pas le fichier dump, il faut regarder dans la config de kismet.
Une fois que vous avez assez de dump, il est possible de retrouver la clef en utilisant des outils comme aircrack-ng.
Pour cela, il suffit d’avoir assez de vecteur d’initialisation (IV). Pour donner une idée, j’ai chargé 1giga de dump, qui contenait 200000 IV, au bout de quelques heures de calcul, j’avais la clef.
Vous pouvez maintenant vous connectez sur ce wifi et/ou decrypter le dump avec airdecap-ng.
que faire avec le dump
On peut faire pas mal d’analyse à partir d’un dump kismet (wifi ouvert ou decrypté avec airdecap-ng).
De manière manuelle, avec wireshark
il est facile de retrouver les cookies de session d’utilisateur.
Ou bien en mode automatique avec des outils comme dsniff et drifnet.
Le script ci-dessous va, par exemple,
- extraire les login/passwd pop3 & imap
- sortir une log de toutes les urls consultées
- extraire toutes les images contenues dans le log
Lancé chaque ligne dans un terminal différant et nom.dump est le nom du dump à analyser.
dsniff -i eth1
urlsnarf -i eth1
driftnet -a -i eth1 -d .
tcpreplay -i eth1 -t nom.dump
quelques considérations sur la sécurité
SSID
Cacher le SSID ne sert à rien. Le montrer est plus facile pour configurer un appareil,
le caché n’offre aucune protection.
Kismet/kismac/NetStumbler detecte aussi vite un réseau caché que non caché
(pour autant qu’il y ait du traffic)
MAC
Filtrer les adresses mac n’offre pas une grande protection non plus.
Cela n’empêche pas d‘écouter ce que votre routeur/machine émet,
il est très facile de découvrir quelle adresse MAC vous utilisez et de se faire passer pour elle.
Open WIFI
L’utilisation d’un wifi ouvert ou public peut poser des problèmes de sécurité.
Vous ne savez pas comment ce routeur est configuré, il peut très facilement sniffer toute votre session.
WEP
Les clefs WEP sont assez faciles à craquer si vous downloader/uploader beaucoup.
Elles restent efficaces si vous downloader peu et que vous la changez régulièrement.
WPA
Les clefs WPA offrent une protection efficace.
Il existe des techniques d’attaque mais rien comparable à celle contre les clefs WEP.
Proxy
Installer un proxy sur un serveur connecté à Internet et l’utiliser via un tunnel SSH est une bonne façon de se protéger, bien plus efficace que du WEP ou WPA et vous protège aussi dans le cas d’utilisation de free/public wifi.
SSL
Si vous avez le choix, privilégiez les sites en SSL (HTTPS)