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

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:



Autres prérequis/info


mise à jour du firmware

WRT54G_WRT54GL.bin => Linksys WRT54G v1-4, WRT54GL.
WRT54GS.bin => Linksys WRT54GS v1-3.
WRT54GSv4.bin => Linksys WRT54GS v4.
WRTSL54GS.bin => Linksys WRTSL54GS

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.

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é:



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,

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)