Si vous avez une box ouverteJe vais décrire les manipulations qui m'ont permises de flasher la Neufbox 6 et de réaliser les captures que je viens de vous montrer. Ces manipulations seront bien sûr totalement différentes avec une autre box.
Étape 1 − flasher la box. Pour cela j'ai utilisé
ce tutoriel. Le firmware que j'ai flashé était semblable à
l'original, j'ai juste effectué deux modifications :
- J'ai ajouté mes identifiants dans /etc/passwd et /etc/shadow, afin de pouvoir me connecter en SSH, comme expliqué dans le tutoriel.
- Dans le script /etc/preinit, j'ai remplacé celle ligne :
[ -x /usr/bin/usb-boot ] && usb-boot && usbfs_union || tmpfs_union
par celle-ci :
usbfs_union || tmpfs_union
Pourquoi ? Parce qu'il y a un bug dans le bootloader de la Neufbox 6, qui n'est pas présent sur la Neufbox 4, qui empêche la box de se souvenir que l'utilisateur a activé le mini_fo sur cette page. Qu'est-ce que le mini_fo ? C'est une fonctionnalité très pratique qui permet de brancher une clé USB formatée en ext2 sur la box, et de s'en servir pour étendre sa capacité de stockage. En effet, de base, elle n'en a pas beaucoup (16 Mo seulement de mémoire flash pour la Neufbox 6, 8 Mo pour la Neufbox 4, et 64 Mo pour la récente Neufbox 6V).
Ainsi, avec le mini_fo, on peut par exemple installer des logiciels supplèmentaires ou faire des captures réseau (c'est pour ça que je vous en parle ) sans trop se soucier de l'espace disque. Cette fonctionnalité est également très pratique parce qu'en cas de plantage à cause d'un logiciel installé sur la box, il suffira de débrancher la clé USB et de redémarrer pour résoudre le problème. Si vous n'avez pas de clé USB, il est également possible de faire une capture qui sera enregistrée sur le système de fichiers temporaire présent dans la RAM, cependant il faut faire attention à ne pas saturer cette dernière.
Bref, en dehors de ça, il suffit de suivre
le tutoriel : télécharger le firmware, l'extraire, modifier les fichiers mentionnés ci-dessus, recompresser le firmware, configurer et lancer dnsmasq, puis redémarrer la box (branchée en ethernet ou en CPL à votre PC) en appuyant quelques secondes sur le bouton de service... Ensuite, attendre quelques minutes, et une fois le flashage fini vous devriez pouvoir vous connecter en SSH sur 192.168.1.1:1288 avec le compte utilisateur que vous avez ajouté.
Attention, si vous avez un autre modèle de Neufbox (4, 5, 6V...), les manipulations ne seront pas les mêmes :
- Avec la Neufbox 4, suivez ce tutoriel (un peu plus simple car il suffit de lancer un script Python pour le flashage, pas besoin de dnsmasq ; pas besoin non plus de modifier le fichier /etc/preinit).
- Avec la Neufbox 5, box beaucoup plus rare, la documentation est moins présente. Pour le téléchargement et la décompression du firmware, allez voir ce tutoriel, pour le flashage, quelques infos ici, dans le doute allez demander plus d'infos sur le forum (MàJ juin 2014 : le tutoriel a été complété avec des informations concernant le flashage).
- Avec la Neufbox 6V, la méthode pour extraire et reconstruire le firmware est ici, pour le flashage vous pouvez appliquer la même méthode que pour la Neufbox 6 (MàJ juin 2014 : un tutoriel complet est désormais disponible).
Des liens vers les derniers firmwares officiels à télécharger sont disponibles
ici (dans la colonne MAIN). En cas de problème, vous pouvez aller demander conseil sur le
forum dédié.
Étape 2 − mettre en place le mini_fo.
Branchez une clé USB sur votre PC, formatez-là en ext2 si ce n'est pas déjà fait, puis mettez un fichier nommé nommé par exemple « toto » à sa racine. Si vous avez une Neufbox 4 ou 5 avec un firmware qui n'est pas encore en 3.3.x, le fichier ne doit pas être à la racine de la clé mais dans un répertoire nommé
/sto/. Allez ensuite brancher la clé USB sur la box.
Ensuite, assurez-vous que le mini_fo est activé :
- Si vous avez une Neufbox 6, la modification du fichier /etc/preinit devrait avoir fait l'affaire (elle est peut-être aussi nécessaire avec la Neufbox 6V, je ne sais pas). Redémarrez manuellement la box.
- Avec la Neufbox 4 et les autres modèles, il faut aller activer le mini_fo sur cette page : http://192.168.1.1/rootfs qui vous proposera ensuite de redémarrer la box.
Une fois la box redémarrée, connectez-vous en SSH : si vous voyez votre fichier
/toto à la racine, c'est bon.
Le fichier /toto devrait être aussi visible dans
/overlay/ si vous avez un firmware 3.3.x, ou dans
/tmp/sto/ si vous avez un firmware moins récent. Ce dossier représente le contenu de la clé USB. On va écrire dedans afin d'être sûr que les fichiers aillent sur la clé USB et pas sur un des autres systèmes de fichiers .
Étape 3 − effectuer une capture du fonctionnement de la box.
Pour cela, j'ai utilisé le programme
tcpdump, qui est installé de base sur la box. En SSH, vous pouvez voir la liste des interfaces réseau sur lesquelles vous pouvez capturer en tapant la commande
tcpdump -D.
root@nb6:~# tcpdump -D
1.ifb0
2.bcmsw
3.eth0
4.wl0
5.wl0.1
6.wl0.3
7.eth0.1
8.hotspot0
9.mv0
10.nas_0_65
11.nas_0_48
12.nas_0_49
13.nas_0_50
14.nas_0_51
15.nas_0_52
16.nas_0_53
17.nas_0_54
18.nas_0_55
19.eth0.2
20.lan0
21.voip0
22.tv0
23.wan0
24.ppp0
25.tun0
26.mv1
27.ppp1
28.mv2
29.nas_8_35
30.nas_8_36
31.any (Pseudo-device that captures on all interfaces)
32.lo
L'interface qui nous intéresse est l'interface nas_8_35, car elle permet de capturer ce qui passe par le VC ATM 8/35, ce qui inclut chez SFR la connexion internet, la récupération des fichiers de configuration, la téléphonie SIP... Il y a peut-être d'autres VC susceptibles de faire passer d'autres données (télévision ?) mais nous ne nous y intéresserons pas ici.
Maintenant, passons à la capture en elle-même. Voici une commande qui permet de capturer sur la clé USB :
tcpdump -w /overlay/macapture.pcap -i nas_8_35 -c 5000Explication des arguments passés au programme :
- -w /overlay/macapture.pcap : la capture sera faîte dans un fichier nommé macapture.pcap, à la racine de la clé USB et du système de fichiers visible de la box.
- -i nas_8_35 : la capture sera faîte sur l'interface nas_8_35, décrite ci-dessus.
- -c 5000 : la capture s'arrêtera au bout de 5000 paquets capturés si vous ne l'arrêtez d'ici là. Vous pouvez modifier cette limitation, la supprimer ou la remplacer par une autre.
Vous pouvez ensuite arrêter la capture en faisant Ctrl+C.
Utilisez ensuite la commande
scp pour transférer votre capture vers votre PC sous Linux (remplacez
ob6 par le nom d'utilisateur que vous avez choisi) :
scp -P 1288 ob6@neufbox:/overlay/macapture.pcap .Si vous souhaitez que la capture continue même si vous vous déconnectez du SSH, il faut ajouter un
& à la fin de la commande :
tcpdump -w /overlay/sfrwifi.pcap -i nas_8_35 -c 5000 &Vous pouvez ensuite vous déconnecter du SSH (Ctrl+D ou
exit) tout en laissant tcpdump tourner. Pour arrêter la capture, il faudra entrer la commande
killall tcpdump.
Étape 4 − effectuer une capture du démarrage de la box.
Voici une petite description partielle du système de lancement des scripts de démarrage de la Neufbox (si par la suite vous souhaitez en savoir plus sur le processus de démarrage des systèmes basés sur OpenWRT, allez voir
ici) : le fichier
/etc/inittab est d'abord lu ;
root@nb6:~# cat /etc/inittab
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K stop
::once:/etc/init.d/networks boot
::once:/etc/init.d/services boot
ttyS0::askfirst:-/bin/login
Ensuite, le script
/etc/init.d/rcS est exécuté, ce dernier exécute tous les scripts présents dans
/etc/rc.d/ dont le nom commence par un
S, en leur passant le mot « boot » comme premier argument.
root@nb6:~# ls /etc/rc.d/
K50dropbear S01devices S11config S50cron S50syslog-ng S80nbd S97watchdog
K99umount S10boot S39usb S50dropbear S50telnet S95done S99sysctl
Les scripts qui commencent par
K sont exécutés à l'arrêt de la box, ceux qui commencent par
S au démarrage. Le nombre présent après cette lettre permet de les exécuter dans l'ordre.
À ce stade-là, c'est trop tôt pour commencer notre capture car l'interface réseau qui nous intéresse n'existe pas encore. La prochaine étape est l'exécution du script
/etc/init.d/networks. Ce dernier attend le lancement du démon nbd (démon propriétaire qui permet notamment aux différents binaires et scripts présents dans la Neufbox de communiquer via un socket UNIX, stocke la configuration en mémoire, et s'occupe de diverses tâches), puis exécute une partie des scripts présents dans
/etc/init.d/. Voici son contenu avec le firmware 3.3.4 :
root@nb6:~# cat /etc/init.d/networks
#!/bin/sh /etc/rc.common
boot() {
networks='eco firewall nat miniupnpd phy switch xtm adsl topology qos hotplug data ppp-adsl dhcpc lan route ipv6'
if test -x /usr/sbin/nbd; then
while [ ! -e /var/state/nbd ]; do sleep 1; done
else
while [ ! -e /var/state/done ]; do sleep 1; done
fi
for i in $networks; do
[ -x /etc/init.d/$i ] && /etc/init.d/$i boot 2>&1
done
touch /var/state/networks
}
Sur le modèle des autres scripts lancés, on va en créer un très simple qui va s'appeler
tcpdump (sans extension) et contenir ceci :
#!/bin/sh /etc/rc.common
boot() {
tcpdump -w /overlay/macapture.pcap -i nas_8_35 -c 5000 &
}
N'oubliez pas de le rendre exécutable (
chmod +x tcpdump). Ensuite il va falloir le transférer sur la box :
scp -P 1288 tcpdump ob6@neufbox:/overlay/etc/init.d/.
Le script qui va créer l'interface réseau qui nous intéresse s'appelle
topology (il se base sur le fichier
/etc/default/topology.xml pour savoir quelles interfaces doivent être créées). Il faudra donc mettre ce qui suit dans
/overlay/etc/init.d/networks, afin d'ajouter notre script à la liste après
topology :
#!/bin/sh /etc/rc.common
boot() {
networks='eco firewall nat miniupnpd phy switch xtm adsl topology tcpdump qos hotplug data ppp-adsl dhcpc lan route ipv6'
if test -x /usr/sbin/nbd; then
while [ ! -e /var/state/nbd ]; do sleep 1; done
else
while [ ! -e /var/state/done ]; do sleep 1; done
fi
for i in $networks; do
[ -x /etc/init.d/$i ] && /etc/init.d/$i boot 2>&1
done
touch /var/state/networks
}
Ensuite, rendez-le exécutable, transférez-le sur la box avec
scp comme vous l'avez fait avec l'autre script, puis redémarrez la box.
tcpdump se lancera au démarrage, et il suffira de faire
killall tcpdump pour l'arrêter ! N'oubliez pas de supprimer
/overlay/etc/init.d/networks par la suite pour qu'une capture ne se fasse pas à chaque nouveau démarrage.