Traçage Wi-Fi {partie 1}

Qu’est ce que le traçage d’appareils (tracking) ? Pourquoi est-il aussi simple de nos jours ? Quelles en sont les applications utiles ? Quelles sont les contre-mesures applicables ? Cet article se propose de répondre à ces questions.

l’outil à posséder absolument !

2000mW 2W 802.11 G / N haut-gagnerUSB sans fil de longue Rang adaptateur réseau WiFi avec Alfa vis d’origine sur l’antenne en caoutchouc pivotante et une tasse 9dBi fenêtre ventouse quai

 

 

Ensuite,pardonnez moi de passer la base du Wi-Fi(voir le wiki si vous la connaissez pas; plus ceci .Je vous le conseil d’ailleurs. C’est une base à savoir.) et de venir directement aux choses utiles.

1) L’adresse MAC


L’adresse MAC est l’identifiant utilisé au niveau de la couche liaison (modèle OSI) pour identifier de manière unique une interface réseau. Cet identifiant est utilisé au sein du protocole MAC (Medium Access Control) qui assure le partage d’un médium (câble Ethernet ou medium radio) entre plusieurs machines. L’hypothèse d’une unicité globale des adresses MAC est primordiale dans le protocole MAC et l’apparition de collisions (plusieurs appareils avec le même identifiant) empercherait le bon fonctionnement du réseau.

Pour assurer l’unicité globale des adresses MAC, une procédure d’attribution à deux niveaux a été mise en place à l’échelle mondiale. L’organisme IEEE (Institute of Electrical and Electronics Engineers) est en charge de son bon fonctionnement. Il attribue à chaque fabricant d’interface réseau un espace d’adressage et lui délègue la tache d’assurer l’unicité des adresses au sein de ce dernier, ce que le fabricant fera en attribuant chaque adresse à une seule interface réseau. Cette adresse unique est généralement gravée en dur dans le chipset de cette dernière. La liste des plages d’adresses allouées ainsi que le nom du fabricant correspondant est publiée par l’IEEE sur son site.

 

Concrètement, l’adresse MAC est un identifiant de 48 bits issu des spécifications de l’IEEE. Comme on peut le voir sur l’image ci dessus à votre gauche, cet identifiant est devisé en deux parties : l’OUI et le NIC. L’OUI (Organisation Unique Identifier) consitue la partie haute de l’adresse et correspond à l’identifiant spécifique de l’interface au sein de la plage de l’espace d’adressage correspondant à l’OUI. La partie OUI de l’adresse inclut 2 bits aux fonctionnalités particulières : le bit multicast et le bit Locally Administered (LA). Le premier est utilisé dans des contextes particuliers qui nous intéressent pas ici. Le second sert à indiquer si l’adresse correspond à celle attribuée par le fabricant de l’interface, ou si au contraire elle a été modifiée par l’administrateur de la machine (d’où son nom : Locally Administered).

mac-adresse-5logical link control

1.2) Découverte de Service dans le Wi-fi :

S’il parait évident qu’un terminal Wi-Fi émet des trames lorsqu’il est connecté à un réseau, il n’en est pas de même lorsqu’il ne l’est pas. Et pourtant, un appareil Wi-Fi non connecté émet des trames plusieurs fois par minutes. La raison : les mécanismes de découverte de service actif.


Afin de pouvoir se connecter à un point d’accès, les terminaux Wi-Fi ont besoin de connaitre les réseaux à portée. C’est là qu’entrent en jeu les mécanismes de découverte de service passif et actif. Le mode passif consiste pour la station à écouter les trames beacons émises par les points d’accès. À l’opposé, dans le mode actif, c’est la station qui émet des trames probe requests auxquelles les points d’accès répondent par des probes responses. S’ils sont globalement équivalents d’un point de vue fonctionnalité, il n’en est pas de même pour la consommation en énergie. En minimisant le temps d’écoute sur les canaux, le mode actif est plus économe en énergie et est donc largement utilisé par nos terminaux portables et mobiles.
Ainsi, nos smartphones, tablettes et ordinateurs portables dont le Wi-Fi est activé, mais non connecté à un point d’accès émettent plusieurs fois par minutes des probes requests, dont l’en-tête contient l’adresse MAC en clair. Dans certains cas, les probes requests contiennent les noms des réseaux (SSIDs) recherchés par l’appareil.


2) Traçage du Wi-Fi :

Quoi de mieux pour se rendre compte de l’ampleur de la menace que de se mettre dans la peau de l’espion ? Nous allons voir quelques outils qui permettent d’observer les appareils Wi-Fi à portée. Mais avant d’aller plus loin, rappelons que la collecte d’adresses MAC (une donnée à caractère personnel) n’est pas autorisée, sauf si l’on dispose de l’autorisation de la personne concernée.

couverture-3
Avant toute chose, la capture des trames Wi-fi nécessite une interface Wi-Fi en mode monitor. Pour cela, on fait appel à l’outil « iwconfig ». Pour une interface Wi-Fi nommée « wlan0 », les commandes suivantes permettront de la mettre en mode monitor :

$ sudo ifconfig wlan0 down
$ sudo iwconfig wlan0 mode monitor
$ sudo ifconfig wlan0 up

Si la suite aircrack-ng est installé, nous pouvons tout de suite utiliser l’outil « airmon-ng » afin d’activer monitor et ensuite lancer « airodump-ng » afin d’observer l’ensemble des stations (HotSpot) à portée :

$ sudo airmon-ng start wlan0
$ sudo airodump-ng mon0


Une fois le logiciel lancé avec la commande précédente (airodump-ng), trois pressions sur la touche <a> permettront de mettre l’affichage en mode STA. C’est à dire que seules les stations seront affichées. Les informations affichées sont l’adresse MAC des stations, l’indicateur de réception (RSSI) ainsi que les SDDIs diffusés car par ceux-ci.

Il peut également être utile de récupérer cette information sous un autre format en affichant le contenu de l’ensemble des trames avec des outils d’analyse réseau comme « tshark/wireshark » ou « tcpdump ».

cmd-4

L’outil « tshark » est la version ligne de commandes de l’incontournable wireshark (mais vous le savez déjà si vous me lisez sinon je vous conseil de lire cet article).
Les deux outils utilisent le même format de filtre et les mêmes dénominations des champs et protocoles. Avec Tshark, nous allons d’abord filtrer les trames de type probe requests grace au filtre suivant : wlan.fc.type_subtype == 4 .
Puis nous allons afficher les champs qui nous intéressent : l’adresse MAC source (wlan.sa), la puissance du signal (radiotap.dbm_antsignal), ainsi que le SSID s’il est présent (wlan_mgt.ssid) :

$ tshark -i mon0 -Y « wlan.fc.type_subtype == 4 » -T fields -e wlan.sa -e radiotap.dbm_antsignal -e wlan_mgt.ssid

De la même façon, il est possible d’utiliser « tcpdump » pour capturer et afficher les probes requests. Cependant, il n’est pas possible de sélectionner les champs particuliers pour l’affichage.

$ sudo tcpdump -i mon0 -e type mgt subtype subtype probe-req

2.1) Retrouver le fabricant de l’appareil à partir de l’adresse MAC :

À partir des données collectées via les méthodes précédentes, il est possible d’identifier le type d’un appareil, ou plutôt son fabricant. En effet, comme les adresses MAC diffusées contiennent l’OUI de l’appareil, il est possible de connaitre son fabricant. Pour cela, on peut effectuer une recherche manuelle dans l’annuaire d’OUIs publié par l’IEEE, voire faire appel à des outils automatisant cette recherche. Il existe un certain nombres d’outils en ligne comme sur le site de wireshark.

Pour faire une résolution d’OUI en ligne de commandes, on peut utiliser un script effectuant une recherche dans le fichier « oui.txt » préalablement téléchargé. Pour cela, on crée un script nommé « oui_resolver.sh » contenant le code suivant :

#!/bin/bash
OUI=$(echo ${1//[:.-]/} | tr « [a-f] » « [A-F] » | egrep -o « ^[0-9A-F] {6} »)
grep $OUI oui.txt

Ce script prend en paramètre une adresse MAC et affiche les informations relatives à l’OUI. C’est à dire le fabricant :

$ sudo chmod +x oui_resolver.sh
$ sudo ./oui_resolver.sh « MAC_adresse »

Il est ainsi possible de déterminer le fabricant d’un appareil visible sur les ondes Wi-fi. Cette première source d’information peut nous servir à inférer le type d’appareil pour effectuer une identification visuelle de celui-ci (par exemple, les appareils de la marque de la pomme « noir » sont facilement reconnaissables ).
Cette information peut également nous renseigner sur une cible : le système d’exploitation utilisé et les vulnérabilités potentiellement exploitables.

2.2) Statistiques des fabricants et des SSIDs :

Les informations collectées via le Wi-Fi peuvent nous donner une bonne estimation de la distribution des types d’appareils dans une zone (à partir de l’adresse MAC), mais également de la fréquence des SSIDs. Nous allons maintenant décrire une procédure permettant de produire un graphique indiquant la distribution des OUIs parmi un ensemble détectés via le Wi-Fi.

Ils nous faut dans un premier temps nous constituer une petite base de données contenant les informations relatives aux probes requests. La commande suivante permet de stocker dans un fichier les informations principales des probes requests (notez l’apparition du séparateur;‘ ) :

$ tshark -i mon0 -Y « wlan.fc.type_subtype ==4″ -T fields -e wlan.sa -e wlan_mgt.ssid -E separator »; » > probe_capture.dat

Ensuite, un petit coup de « cut, sort et uniq » permet de nous donner la liste des adresses MAC observées :

$ cut -f1 -d’ ;’ probe_capture.dat | sort | uniq

Il suffit alors pour chacune de ces adresses de résoudre l’OUI et de compter le nombr d’appareils par fabricant (vendor). Un peu de kung-fu à base de « grep, cut, sort et uniq » permet d’effectuer cette tache. Après avoir téléchargé le fichier « oui.txt » sur  le site de l’IEEE, enregistrez le script suivant dans un fichier nommé « distribution_vendor.sh » :

#!/bin/bash
mac_list=$(cut -f1 -d’;’ « $1 » | sort | uniq)
VENDORS=()
for m in « $mac_list »
do
oui=$(echo ${m//[:.- ]/} | tr « [a-f] » « [A-F] » | egrep -o « ^[0-9A-F] {6} »)
vendor=$(grep $oui oui.txt | cut -f3)
vendor= »${vendor//[^[:alnum:]]/} »
VENDORS+=(‘echo -e « $vendor\n »‘)
done
printf ‘%s\n’ « ${VENDORS[@]} » | sort -k2 | uniq -c | sort -k1 -r -n > vendor_distrib.dat

Ce script prend en paramètre un fichier de capture de probe requests et génère un fichier contenant le nombre d’appareils par fabricant par ordre décroissant.

$ chmod +x distribution_vendor.sh
$ ./distribution_vendor.sh probe_capture.dat

Maintenant, passons au script « gnuplot » qui va permettre de générer notre graphique.
Dans un fichier nommé « plot_distrib_vendor.dem » :

set ylabel « Nb appareils »
set autoscale
set xrange [-1:20]
set output « vendor_distrib.eps »
set term postscript eps   color
set xtics nomirror rotate by -60
set style fill solid border -1
set boxwidth 0.85
plot « vendor_distrib.dat » using 0:1:xtic(2) notile with boxes

La génération du graphique se fait par l’exécution de la commande suivante :

$ gnuplot plot_vendor_distrib.dem

Si Tout se passe bien, le fichier « vendor_distrib.eps » devrait contenir un graphique similaire à celui ci :

De la même manière, le script précédent peut être adapté pour calculer et afficher la distribution des SSIDs. Ceci peut être très utilisé lors d’une attaque de type Rogue-AP ,qui consiste à créer un faux point d’accès avec un SSID populaire (voir un prochain article – airbase-ng + Karmetasploit) de façon à déclencher des connexions automatiques des terminaux alentour, afin de se placer en position d’homme-du-milieu (Man in the Midle).

2.3) Détection de présence :

Le traçage n’a pas que des désavantages. En connaissant l’adresse MAC d’un appareil que l’on possède toujours sur soi (comme un téléphone), on peut s’en servir pour détecter sa propre présence dans un lieu assez facilement. Cela peut par exemple servir à réaliser des actions automatiques lorsqu’on rentre chez soi. Pour un attaquant, cela peut servir à lancer une attaque lorsqu’un individu se trouve dans un lieu donné. Voyons comment allumer automatiquement son ordinateur en rentrant chez soi. L’idée est de détecter la présence d’un téléphone, et d’effectuer une action si c’est la première fois qu’on le voit depuis au moins une heure. Pour cela, nous aurons besoin d’une carte à faible consommation disposant d’une interface Wi-Fi supportant le mode monitor, comme un Raspberry PI avec un dongle Wi-Fi.

La première étape consiste à s’assurer que la carte mère de la machine cible supporte le Wake-On-LAN, standard Ethernet permettant d’allumer l’ordinateur par le réseau.
L’option étant souvent désactivée par défaut, il faut l’activer dans le BIOS de la machine.

Il faut ensuite activer le mode monitor sur notre Raspberry PI (ou autres), comme détaillé dans la section 2 .

Le script permettant de réveiller l’ordinateur est le suivant :

#!/usr/bin/perl

use warnings;
use strict;

# PARAMETERS
my $TIME_TO_WAIT_TO_SEND_WOL = 3600; # 1 hour
my $MAC_ADRESS = « adresse_mac_à_détecter »;

# VARIABLES
my $previous_time = time;
my $new_time;

select STDOUT; $| = 1; # disable buffering

while (<>) {
$new_time = time;
if ($new_time > $previous_time + $TIME_TO_WAIT_TO_SEND_WOL) {
print localtime(time) .  » : « ;
system(« wakeonlan », $MAC_ADRESS);
}
$previous_time = $new_time;
}

Il suffit ensuite d’appeler le script « wol.pl » précédent avec la commande suivante, dans une session screen ou tmux ou encore avec « nohup » :

$ sudo chmod +x wol.pl
$ sudo tcpdump -l -e -i wlan0 | grep adresse_mac_a_detecter | ./wol.pl

l’option -l de tcpdump désactive le buffing, ce qui permet d’éviter de retarder la détection du téléphone. L’option -e affiche les informations du header de chaque trame, qui contient l’adresse MAC. Les pipes nous permettent de ne pas exécuter notre script avec les droits root.

On s’assurera que le paquet « wakeonlan » est bien installé (wol sous ArchLinux).
Idem pour tcpdump .

Si notre carte ne dispose pas d’une interface réseau supportant le mode monitor, il est également possible de fonctionner en mode managed, à condition que le téléphone à détecter se connecte automatiquement au réseau.  On ne détectera alors plus les probe requests, mais les trames échangées par le téléphone associé au réseau. en fonction de la fréquence de ces trames (qui dépendront des applications installés et configurées sur le téléphone), on pourra avoir une réactivité potentiellement meilleur qu’en mode monitor. Pour ce faire, il faut, au lieu de passer la carte en mode monitor, configurer la connexion au réseau dans le fichier « /etc/wpa_supplicant/wpa_supplicant.conf » .
Par exemple, pour un réseau en WPA :

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1network={
ssid= »nom_du_réseau »
psk= »mot_de_passe »
}

Puis associer la carte réseau avec la commande suivante :

$ sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

L’option -B lance le démon en arrière plan, -i sert à indiquer l’interface à utiliser et -c le fichier de configuration.

On lance ensuite le script avec tcpdump comme précédemment.

On peut imaginer d’autres applications intéressantes comme lancer une musique personnalisé à l’individu détecté (faites croire à vos colocataires que votre ordinateur est devenu Skynet !), détecter un intrus dans la pièce (attention, il peut copier votre adresse MAC) … Notons cependant que cette méthode ne permet pas une réactivité extraordinaire, le script pouvant mettre plusieurs minutes à repérer un téléphone. Pour des applications ne nécessitant pas de repérer  présence d’une personne précise, un détecteur de mouvement sera plus adapté.

Voilà déjà une première approche du traçage Wi-Fi .

Énumérons maintenant rapidement quelques solutions pour se protéger :

Le traçage n’est pas une fatalité. Citons des techniques permettant de limiter le traçage de notre appareil. La première permet d’utilisation d’adresses MAC aléatoires et temporairement au sein des mécanismes de découverte de réseaux, tandis que la seconde consiste à modifier directement son adresse MAC (par exemple à chaque redémarrage, par exemple.)

Vous l’avez compris, le but ici est de donner une adresse MAC aléatoire à votre appareil pour éviter le tracking de celui-ci.
Sous GNU/Linux, cette méthode  été implémentée dans le noyau 3.18 pour le driver iwlwifi, et dans le noyau 4.5 pour le driver brcmfmac. Cela permet au driver de changer l’adresse MAC, mais ce changement n’est pas automatique. Il faut qu’un logiciel le provoque. On peut par exemple utiliser wpa_supplicant .

Tout d’abord, il convient de vérifier que le driver utilisé est bien iwlwifi.
La commande suivante devrait renvoyer un lien vers iwlwifi :

$ readlink /sys/class/net/wlan0/device/driver

Il faut aussi une version récente de wpa_supplicant (version 2.3 datée d’octobre 2014).

Il faut également s’assurer que l’interface de contrôle est correctement configurée dans le fichier wpa_supplicant.conf. La ligne suivante doit s’y trouver :

ctrl_interface=/var/run/wpa_supplicant

Cela permet à l’outil wpa_cli de communiquer avec wpa_supplicant, ce qui nous permettra de lancer la commande suivante :

$ sudo ./wpa_cli mac_rand_scan all enable=1

On peut configurer ce comportement dans le fichier de configuration de wpa_supplicant .Pour cela, il faut mettre l’option preassoc_mac_addr à 1 ou 2 (1 utilise une adresse complétement aléatoire, 2 génère une nouvelle adresse à partir d’un même OUI aléatoire). L’option rand_addr_lifetime permet de changer la durée de chaque adresse MAC aléatoire (60 secondes par défaut).

Notons que cette méthode ne supprime pas les SSIDs des probe requests envoyés. wpa_supplicant ne diffuse de toute manière pas les noms des réseaux ajoutés dans son fichier de configuration. En revanche, NetworkManager le fait pour ceux qu’il gère, et ce même si le changement d’adresse MAC est activé.

On pourra alors vérifier avec un Wireshark ou un tcpdump lancé sur une autre machine que nos probe requests utilisent bien une adresse MAC aléatoire changé fréquemment.

L’outil « MacChanger » :

Nous avons vu précédemment comment configurer le changement d’adresse MAC avec wpa_supplicant. si l’on ne possède pas de version récente de cet outil, il existe une méthode un peu plus simple pour effectuer cette action : l’outil « macchanger » permettant de changer manuellement l’adresse MAC d’un appareil. Il dispose de nombreuses options, permettant de choisir si l’on veut générer une adresse complétement aléatoire, conserver l’OUI, l’utiliser un OUI précis, s’assurer que le bit locally-administred est correctement utilisé, ect.

Si l’adresse MAC d’une interface peut etre modifié à la ligne de commandes via ifconfig, l’outil macchanger permet d’automatiser  cette procédure et de choisir entre plusieurs types d’adresses MAC. Plus particulièrement, macchanger permet de générer une nouvelle adresse MAC pour une interface réseau via plusieurs méthode :

=> Adresse totalement aléatoire (-r) : la nouvelle adresse MAC est complétement aléatoire, c’est à dire que l’intégralité des 6 octets de l’adresse est choisie aléatoirement, à l’exception des bits multicast et locally administred du premier octet.

=> Adresse aléatoire valide (-A) : idem que l’option précédente, à la différence que la partie gauche de l’adresse appartiendra à la liste des OUI enregistrés (ceux présents dans le fichier OUI.lst).

=> adresse aléatoire valide du meme type (-a) : idem précédente, à la différence que l’OUI choisi conservera le type d’adresse (sans-fil ou pas).

=> adresse aléatoire de meme OUI (-r), l’option -b permet de forcer le bit locally administered à 0 et donc d’indiquer qu’il s’agit d’une adresse gravée en dur dans l’interface et non pas une adresse assignée localement par l’administrateur de la machine.

Par exemple, la commande suivante permettra d’assigner une adresse complètement aléatoire avec le bit locally administered à 0 :

$ sudo ifconfig wlan0 down
$ sudo macchanger -r -b wlan0
$ sudo ifconfig wlan0 up

Les méthodes décrites précédemment ne sont ps toutes équivalentes du point de vue de la discrétion. Pour ce qui est de la méthode « totalement aléatoire », l’absence de l’option -b générera une adresse avec le bit locally administered à 1, ce qui indiquera directement qu’il s’agit d’une adresse manipulée. De plus, même lorsque le bit locally administered est à 0, une adresse totalement aléatoire a de fortes chances de tomber sur un OUI non enregistré (à l’heure actuelle, environ 1% de ces OUI ont été assignés).
Une adresse MAC ayant un OUI non enregistré apparaitra vraisemblablement manipulée.

Les méthodes -a et -A permettent de remédier à ce problème en assignant une adresse appartenant à un OUI enregistré.Cependant l’option -a va fournir une adresse pouvant correspondre à n’importe quel type d’interface (Ethernet, ATM,ect.).
Dans le cas (probable) où l’adresse ne correspond pas au type Wi-Fi, un observateur pourra rapidement reconnaitre qu’il s’agit d’une adresse usurpée. Heureusement, la méthode -a permet de conserver le type de l’adresse et en choisira une de type sans-fil si tel est le cas.

Finalement, la dernière méthode (-e), qui consiste à uniquement changer la fin de l’adresse et à en conserver la partie haute, est probablement la moins repérable puisque  l’interface conserve ainsi un OUI cohérent avec le modèle. Cependant, si le modèle et donc l’OUI original de l’interface sont peu communs, celles-ci sera facilement repérable. En effet, un appareil sera plus facilement repéré s’il utilise un OUI d’un fabricant obscur plutôt que l’OUI d’un fabricant populaire comme Apple, Samsung, Linksys ou Intel.

Il est possible d’automatiser l’appel macchanger afin par exemple de renouveler les adresses des interfaces réseaux à chaque démarrage à la manière de Tails. Cette automatisation peut se faire facilement avec par exemple un unit systemd (méthode trouvée sur l’excellent wiki Arch Linux. Pour cela, on crée un fichier « /etc/systemd/system/macspoof@.service » contenant les instructions suivantes :

[Unit]
Description=macchanger on %I
Wants=network-pre.target
Before=network-pre.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device[Service]
ExecStart=/usr/bin/macchanger -e %I
Type=oneshot[Install]
WantedBy=multi-user.target

Il suffit ensuite d’activer le service pour chaque interface concerné, en ajoutant le nom de l’interface après le p .
Par exemple, pour wlan0 :

$ sudo systemctl enable macspoof@wlan0.service

Au prochain démarrage, l’adresse MAC devrait avoir changé. On pourra vérifier le bon fonctionnement de la méthode avec ifconfig ou la commande de controle du bon fonctionnement du service, qui devrait indiquer le changement d’adresse MAC :

$ sudo systemctl status macspoof@wlan0.service

Notons que macchanger ne fonctionne pas sur une interface active, ce qui peut rendre compliqué son automatisation dans certains cas.

Le wiki d’Arch Linux contient une page présentant d’autres méthodes (utilisant systemd-network, systemd-udevd, ect.)

Source => GnuLinuxMag,ed-diamond&lt et moi meme.

Merci.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s