J’avais besoin de faire un MITM entre un ONT et la box SFR NB6 pour pouvoir capturer les identifiants PPP pour le tunnel ipv6. Je n’avais pas de hub ou de machine avec 2 interfaces Ethernet pour pouvoir le faire de façon passive sans faire du spoofing ARP. Et je n’avais pas envie d’envoyer des trames ARP sur l’infrastructure réseau SFR. J’avais un Netgear WNR3500Lv1 dans un coin, je me suis dit qu’il y avais moyen d’utiliser ce genre de routeur pour faire du tapping passif.
Installer DD-WRT
Première étape avoir un routeur sous DD-WRT qui marche. Netgear font les choses bien, la majorité de leurs routeurs sont compatibles avec les « openfirmwares ». J’ai ma préférence pour DD-WRT qui est vraiment orienté réseau. Pendant le setup, j’ai quand même réussi à briquer une fois mon routeur, je n’ai pas trouvé la raison.
1) Aller récupérer le firmware qui va bien .chk depuis dd-wrt.com
2) Flasher depuis l’interface web
3) Re-flasher avec un dd-wrt complet qui marche, j’ai utilisé le mod de kong qui est un dd-wrt modifié qui est plus stable. (le ssh marchait pas sur l’autre firmware)
4) Penser à configurer le service SSH depuis l’interface web.
5) DESACTIVER LES SERVER ET CLIENT DHCP mettez toutes les ips en statiques
Installer TCPDUMP
Une fois dd-wrt fonctionnel sur la bête, je me suis dit que j’allais utiliser tcpdump pour capturer directe sur les interfaces du routeur. Évidemment le paquet ipkg ne marchait pas mais j’ai appris qu’on pouvait les installer en manuel.
wget http://downloads.openwrt.org/attitude_adjustment/12.09/brcm47xx/generic/packages/libpcap_1.1.1-2_brcm47xx.ipk tar -zxvf libpcap_1.1.1-2_brcm47xx.ipk rm control.tar.gz rm debian-binary rm libpcap_1.1.1-2_brcm47xx.ipk tar -zxvf data.tar.gz rm data.tar.gz wget http://downloads.openwrt.org/attitude_adjustment/12.09/brcm47xx/generic/packages/tcpdump_4.2.1-3_brcm47xx.ipk tar -zxvf tcpdump_4.2.1-3_brcm47xx.ipk rm control.tar.gz rm debian-binary rm tcpdump_4.2.1-3_brcm47xx.ipk tar -zxvf data.tar.gz rm data.tar.gz |
Vous pouvez lancer ce script sur votre machine puis ensuite copier le répertoire usr dans /tmp/root qui est un ram disk car l’espace jffs ne faisait que 600ko sur mon routeur donc pas suffisant pour la libpcap + tcpdump. Il y a 64 Mo de RAM sur mon routeur versus 8Mo flash aller comprendre …
Donc au début je me suis dit c’est tout bon j’ai plus qu’à lancer tcpdump depuis ssh sur la bonne interface et c’est du tout cuit.
ssh root@192.168.2.1 "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/root/usr/lib /tmp/root/usr/sbin/tcpdump -i vlan1 -U -s0 -w -" | wireshark -i - |
Notez ici l’option -U qui permet de flush dans le pipe ssh rapidement les données capturées très utile quand vous avez peu de paquets sur l’interface sinon votre wireshark ne reçoit rien tant que le buffer n’est pas plein.
ET J’AVAIS TORT
J’avais oublié un détail hardware qui m’a pété les couilles, les 4 ports du switch sont géré en hardware via une puce dédié ici un BCM53115. Problème impossible d’écouter le trafic entre les ports car le BCM53115 gère en interne sa table ARP qui n’est pas configurable, donc impossible de capturer le moindre paquet utile à part les broadcast et multicast.
Solution 2
Après avoir creusé la question, j’ai évidement commencer par regarder la documentation du BCM53115 qui est une belle boite noire dont les seules choses que l’on peut configurer sont les vlan par port et le tagging. Je devais donc me passer de cet élément pour faire ma capture. La solution la plus simple qui m’est venu c’est d’utiliser le port WAN qui est séparé du switch au niveau logique et je peux le bridger en software via le kernel linux. Cependant cette solution n’est pas vraiment satisfaisante pour moi dans la mesure ou je pouvais pas isoler de façon sûr le pc d’écoute. (Genre éviter les broadcast ipv6 et mdns sur le réseau SFR)
1) Couper le routage sur l’interface web, onglet setup
2) Coché la case mettre le port WAN dans le switch ( il sera bridgé dans le vlan1)
3) Configurer iptables sur la machine d’écoute pour éviter les merdes (J’ai tout bloqué sauf le ssh sortant)
*filter :INPUT DROP [49:3210] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT -A OUTPUT -o lo -j ACCEPT COMMIT |
Donc au final on se retrouve avec tout le merdier dans le même vlan mais seul les données entre les ports du switch et le port WAN sont écoutables dans notre cas c’est pas un problème.
J’ai cependant trouvé une autre solution pour faire des écoutes entre potentiellement tout les ports du switch en utilisant les vlan ! J’ai pas encore testé mais l’idée est la suivante :
- placer les 4 ports du switch dans 4 vlan différents (5 6 7 8 par exemple)
- Ensuite on bridge les vlan avec le kernel ( brctl addbr test && brctl addif test vlan5 && brctl addif test vlan6 && brctl addif test vlan7 && brctl addif test vlan8 )
- Vous pouvez lancer tcpdump sur l’interface bridge-test sûrement br2
Cette dernière solution serait encore mieux car la machine d’écoute est vraiment isoler du reste, et ça permet d’écouter 4 devices en même temps ce qui peut servir.
1 commentaire
Rudy · 24 juin 2017 à 11 h 55 min
« sa » et non « ça » :)