Wifi ouvert - Attention aux faux hotspot ! (+ une démo avec un module Arduino)

Originally published at: http://korben.info/wifi-ouvert-attention-aux-faux-hotspot-demo-module-arduino.html

Vous kiffez le hotspot wifi gratuit ? Les FreeWifi et ce genre de trucs offerts par votre opérateur ? C’est bien, mais êtes vous certains que vous vous connectez vraiment sur un vrai spot et pas sur un truc destiné à pomper tous vos mots de passe ? C’est difficile de le savoir mais pour…

Du coup on sait comment détecter ce genre de faux hotspot ? Vu que c’est du FreeWifi il peut très bien se faire passer pour une maison de particulier dans une grande agglomération…
Je pense qu’on peut essayer de mettre exprès un mauvais mot de passe au début pour voir s’il arrive quand même à se connecter.

Je ne suis pas un utilisateur de Free, donc pas d’idée si applicable ici, mais je ne me log sur un portail captif que s’il supporte 802.1x (WPA2 sans mot de passe partagé, qui nécessite un login/pw qui sera validé sur les serveurs de l’ISP pour ensuite dériver une clef perso pour accéder au wifi) – ce qui est le cas de mon ISP.
Le gros avantage du coup est que:

  • Le wifi est crypté, et que la clef est unique à ma connection (pas partagée avec tous les utilisateurs du wifi, ce qui ne sert à rien …) et change à chaque fois
  • Le login est crypté (SSL avec le certificat de mon ISP pré-chargé sur ma machine)

Si l’attaque est bien faite (bonne configuration du faux-faux serveur DNS du portail, …) elle sera invisible au login.
Une fois connecté par contre il y aurait moyen de le détecter (traceroute foireux, MTU trop faible du à un tunnel, …)

Je suis Kevin qui a donner la news, le moyen le plus facile et sûrement le plus sur c’est de vérifier que c’est bien en HTTPS et que le certificat est valide ( en vert ) car même si on peut détourner le domaine c’est que hotspot free wifi qui détient le certificat et la clef privé pour chiffrer la communication .

Dans mon exemple je n’ai pas remplacer le domaine par “wifi.free.fr” mais c’est facile avec un petit code JavaScript. Mais c’est facilement détectable car les portails hot-spot ont toujours une interface de login HTTPS étant donner que le réseau et ouvert on peut intercepter les packets littéralement “on the fly” avec le HTTPS c’est la garanti que la personnes parle bien au vrai hotspot et que les données sont chiffrer.

Par contre on pourrait acheter une domaine similaire et le faire certifier par letsencrypt mais ça serait plus wifi.free.fr :slight_smile:

1 J'aime

Heu… un ESP8266 c’est pas du tout un Arduino :wink:

1 J'aime

À partir du moment ou tu contrôles la gateway, tu fais quasi ce que tu veux à la connexion.
Pas besoin de JS pour changer l’URL, il suffit de configurer le serveur DNS sur la box comme autoritatif entre autre pour free.fr et de rediriger toutes les requêtes DNS vers ce serveur (et du coup le faire de façon transparente …)
HTTPS ne suffit pas, car le client n’a pas le certificat de l’ISP, donc le récupère à la volée et le valide, donc est potentiellement vulnérable e.g. à SSLsplit (https://www.roe.ch/SSLsplit) qui permet un MiTM transparent (pour y résister, le client ne doit pas accepter le certificat si OCSP fail, doit avoir un browser sans failles exploitables par le proxy pour installer un faux CA, de plus ce n’est pas comme si les vrais CA étaient toujours fiables (http://www.computerworld.com/article/2901852/microsoft-blacklists-latest-rogue-ssl-certificates.html), ou encore tous compétents, et si ca tombe le client de base s’est fait fumer par son constructeur, … ).
Enfin plus basique encore, les browsers par défaut sous OSX/Android (qui donne une popup vers le portail) n’indiquent pas si la connexion initiale au portail est http ou https …

[Limitation à 2 URLs max :(]

C’est vrai c’est juste “compatible avec l’IDE arduino”

Super article ! Je voulais justement mené un expérience sur les Rogue AP (les points d’accès illégitime)
Je suis preneur si vous avez de la documentation pour moi :slight_smile:

Je pense me baser sur mon raspberry PI (https://www.engetsu-consulting.com/raspberry-pi-raspbian-rogue-access-point-ap-landing-page-captive-portal) mais si je peu en même temps découvrir arduino ce serai parfais !

salut, ton astuce m’intéresse beaucoup car j’envisage le theme des Rogue AP comme sujet pour mon projet perso de l’année prochaine. J’aimerai bien en discuter un peu, si tu à le temps je suis joignable ici : https://0x7c8.wordpress.com/contact

En effet par contre l’ESP8266 modèle ESP-01 (le plus petit) est souvent utilisé comme le compagnon idéal en passerelle WiFi économique pour rendre un Arduino communiquant même si au final l’ESP8266 peut globalement faire la même chose qu’un Arduino sauf quelques points qui peuvent être rédhibitoires avec en particulier les entrées analogiques car il n’y en a qu’une seule (modèle ESP-07 et supérieur) et encore c’est avec une plage 0-1V pas franchement standard.

Mais d’un autre côté l’ESP a la facilité de pouvoir être programmé autrement qu’en C avec du LUA, Micro Python voir même Basic ce qui le rend très accessibles.

Merci pour cet article,
Mais du coup, comment fait-on pour savoir si le hotspot auquel on veut se connecter est un vrai ou un faux qui va bouffer notre mot de passe ?

Première recommandation ne jamais surfer en direct via une passerelle WiFi non maîtrisée (publique ou pas) mais monter un point d’entrée VPN à la maison et s’y connecter pour surfer au travers sans que le relais WiFi ne puisse espionner.

Bien sûr.
Cependant si le login se fait avec un portail captif ‘classique’ (une page web), celui-ci se fera en dehors du VPN, ce qui revient à dire en clair pour la majorité des utilisateurs, vu que la passerelle bloquera le VPN tant que le client ne sera pas authentifié (le VPN ne devrait d’ailleurs pas s’afficher comme actif, e.g. la route par défaut du client restera son wifi et pas un tunnel).
Si le portail est troué (e.g. il ne drop pas les ICMP, n’intercepte pas les paquets DNS, …) comme dans certains lieux publiques, alors pas besoin d’authentification vu qu’on peut direct passer en tunnel …

une fois une éventuelle page d’accès général au point WiFi j’ai un OpenVPN (avec certificat perso) qui se monte et route tout le trafic dedans jusqu’à chez moi c’est déjà pas mal non ?

Merci pour ton explication très constructive .l’occurrence sur le module toutes les requêtes DNS renvoi vers l’adresse IP du serveur donc j’aurais pu très supplément changer l’URL.

Je ne savais qu’on pouvait faire le HTTPS “valide” avec du ssltrip car il me semblait que l’ordinateur stock en statique les certificats root.

Il faut vérifier que c’est en HTTPS et éventuellement stocker le “fingerprint” du certificat

"Le module tiens dans la main est peut-être alimenter"
Aïe aïe aïe aïe !!
Vivement le week-end :wink:

1 J'aime

[quote=“tidju, post:8, topic:3514”]HTTPS ne suffit pas, car le client n’a pas le certificat de l’ISP, donc le récupère à la volée et le valide[/quote] Euh non, le principe même d’un certificat est de faire valider ce certificat par Autorité de Certification, donc tu vas downloader ton certificat le navigateur va vérifier les signatures et tombé sur un serveur d’authentification inconnu.
Tu peux renvoyer tous les certificats pipeautés du monde, le navigateur refusera d’afficher le contenu.

Faire un ManInTheMiddle est loin d’être aussi simple que tu le pense : Avec Firefox c’est quasi impossible, la liste de CA étant hardcodé dans FF. Chrome et IE se basent sur les certificats Windows, faut déjà pas mal grugé pour arriver à faire installer un faux certificat racine.