[Tuto] Rogue AP – Épisode 1 : Un hotspot transparent

Je vais commencer ici une suite d’articles à propos des Rogue AP, et des possibilités d’attaque qu’ils permettent. C’est un sujet très vaste, dans un premier temps je me limiterai au scénario Honeypot, c’est-à-dire un réseau ouvert et « gratuit » auquel la cible se connecte de son plein gré.

Pour ceux qui se poseraient la question, un Rogue AP dans ce contexte est un point d’accès WiFi en apparence innocent, mais qui est en réalité « piégé » pour attaquer les clients qui s’y connectent : récupération de trafic, détournement vers des sites non-prévus, injection de scripts ou de virus/trojans/malwares,…

Mon but est que cette série soit progressive, en commençant par des trucs simples puis en les complexifiant petit-à-petit. On va donc commencer facile par un simple hotspot transparent, qui servira à partager sa connexion Internet en créant son propre réseau WiFi.

Sauf avis contraire, les commandes que je donnerai ici ont été testées avec succès sur une BackTrack 5R3 KDE 32 bits non-modifiée.

Je pars du principe que vous utilisez une machine qui dispose de deux interfaces réseau :

  • une interface sans-fil qui servira au partage de connexion chez moi ce sera wlan1)
  • et une interface (filaire ou sans fil) qui sera connectée à Internet (chez moi ce sera wlan0)

Il y a une série d’éléments à mettre en place pour réaliser un partage de connexion :

  • le réseau wi-fi lui-même
  • un serveur DHCP pour attribuer une IP aux clients (ainsi que les infos passerelle et DNS)
  • configurer la machine pour autoriser le transfert du trafic d’une interface à l’autre

La partie sans-fil

Pour cet aspect, nous allons utiliser airbase-ng de la suite (aircrack-ng). On crée une interface monitor mon0, et on indique à airbase-ng de l’utiliser pour le réseau

airmong-ng start wlan1
airbase-ng -c 3 -e 'WiFi Gratuit' mon0
# J'ai choisi le canal 3 (-c 3) arbitrairement,
# airbase-ng n'a pas l'air content si on ne lui indique pas un canal

Après ça, un nouveau réseau appelé « WiFi gratuit » devrait apparaître, non sécurisé. Mais même si les clients peuvent se connecter dessus, ils ne pourront rien en faire.

Serveur DHCP

Le serveur DHCP va attribuer une IP aux clients, ainsi que leur indiquer quelle passerelle et quel serveur DNS utiliser. Alors même si dhcp3 est le serveur DHCP de référence sur BackTrack, je préfère utiliser udhcpd qui est plus léger et plus facile à configurer. Il faut commencer par l’installer via les dépôts :

apt-get update && apt-get install udhcpd

Ensuite il faut générer son fichier de configuration, j’utilise ceci :

# Nombre maximum de clients connectés
max_leases 10
# Première adresse disponible pour les clients
start 192.168.2.10
# Dernière adresse disponible
end 192.168.2.20
# Interface sur laquelle udhcpd va écouter, at0 est créée par airbase-ng
interface at0
# Domaine des clients, n'importe quelle valeur fera l'affaire
domain local
# Serveur DNS à utiliser, ici ceux de Google mais on peut choisir
option dns 8.8.8.8
# Sous-réseau à utiliser, valeur typique (le LAN sera du type 192.168.2.*)
option subnet 255.255.255.0
# Adresse de la passerelle (nous), on devra attribuer cette adresse à notre machine
option router 192.168.2.1
# Durée d'attribution de l'adresse IP, 7200 secondes est une valeur standard
lease 7200
# Fichier dans lequel udhcpd va stocker les associations MAC  IP
# On devra le créer avant de lancer udhcpd
lease_file /tmp/udhcpd.leases

On copie tout ça dans un fichier /tmp/udhcpd.conf (attention, comme tout ce qui est dans /tmp/, il sera effacé au reboot).

On en profite pour créer le fichier /tmp/udhcpd.leases

touch /tmp/udhcpd.leases

Avant de démarrer le serveur, on doit encore configurer l’interface at0 (créée par airbase-ng) :

ifconfig at0 up
# Les valeurs doivent correspondre à celles de udhcpd.conf
ifconfig at0 192.168.2.1 netmask 255.255.255.0

On peut alors démarrer le serveur DHCP :

udhcpd /tmp/udhcpd.conf

Routage et pare-feu

Il faut maintenant configurer la machine pour autoriser le transfert de trafic d’une interface à l’autre.

# Activer le transfert au niveau du noyau
echo 1 > /proc/sys/net/ipv4/ip_forward
# Indiquer au pare-feu de rediriger les paquets vers wlan0 (qui est connectée au net, chez moi)
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Et voilà 🙂 Avec ça, les clients devraient pouvoir se connecter au réseau « WiFi gratuit » et surfer de façon transparente sur le net sans savoir qu’ils passent à travers un ordi plutôt qu’un routeur WiFi classique. A noter que ceci ne sert pas qu’à piéger le client, c’est un moyen simple de partager une connexion (par exemple filaire).

Voici un script qui automatise tout ça. Copiez-collez le contenu de ceci dans un fichier « rogue.sh » sur une BackTrack 5R3-KDE-32 « vierge » (mais déjà connectée au net), rendez-le exécutable (chmod +x rogue.sh) et laissez la magie opérer 😀

#!/bin/bash
# Create a transparent WiFi AP to share a connection
# Tested & OK with BackTrack 5R3-KDE-32
# Author : Antares145  - 2013, licence CC-BY-NC

# Spécifier les interfaces réseau ici :
NET_IFACE=wlan0
ROGUE_IFACE=wlan1
# Choisir un répertoire pour les fichiers de log
# (! dans /tmp/ ils seront effacés au reboot)
LOG_FILE=/tmp/log.txt

# Nettoyage des processus et des fichiers
# Les redirections &> sont là pour ne rien afficher à  l'écran
rm /tmp/udhcpd.* &> /dev/null
rm $LOG_FILE &> /dev/null
killall airbase-ng &> /dev/null
killall udhcpd &> /dev/null
airmon-ng stop mon0 &> /dev/null

# Installation de udhcpd et génération de sa config
echo "Installation de Udhcpd"
echo "(Ca peut prendre un peu de temps...)"
# Pour utiliser le script sous Kali 1.0, décommenter la ligne suivante
#apt-get update &>> $LOG_FILE
apt-get install udhcpd &>> $LOG_FILE
echo "max_leases 10
start 192.168.2.10
end 192.168.2.20
interface at0
domain local
option dns 8.8.8.8
option subnet 255.255.255.0
option router 192.168.2.1
lease 7200
lease_file /tmp/udhcpd.leases" > /tmp/udhcpd.conf
touch /tmp/udhcpd.leases &>> $LOG_FILE

#Création du réseau WiFi
echo "Démarage du réseau WiFi"
airmon-ng start $ROGUE_IFACE &>> $LOG_FILE
airbase-ng -c 3 -e 'WiFi Gratuit' mon0 &>> $LOG_FILE &
sleep 5
ifconfig at0 up
ifconfig at0 192.168.2.1 netmask 255.255.255.0 &>> $LOG_FILE
# Démarrage du DHCP et du Transfert de trafic
echo "Démarrage du serveur DHCP"
udhcpd /tmp/udhcpd.conf &>> $LOG_FILE
echo 1 > /proc/sys/net/ipv4/ip_forward
# Effacer toutes les règles IpTables pour ne garder que les bonnes
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# Activer le transfert vers l'interface $NET_IFACE
iptables -t nat -A POSTROUTING -o $NET_IFACE -j MASQUERADE
echo "Le réseau est opérationnel !"
exit 0

Le script est volontairement simple voire simpliste, une fois que j’aurai fini les tutos je travaillerai sur un outil plus complet et intégré. En attendant, j’essaie de faire en sorte que le code puisse être compris par tout le monde.

Remarques

  • Il est possible de travailler avec une seule interface sans-fil (par exemple wlan0) qui sert à la fois d’émetteur et d’interface connectée, mais ça complique un peu le scénario. Il faut faire attention au canal utilisé pour le hotspot (qui doit être le même que pour le réseau entrant), et le surf de la victime sera plus lent (puisque l’interface a deux fois plus de boulot). Dans un objectif de simplicité, je conseille de travailler avec deux interfaces (physiquement) distinctes.
  • La plage IP utilisée par le hotspot devrait être différente de celle utilisée sur le « réseau principal » (et donc sur l’interface qui est connectée au net). J’utilise 192.168.2.*, mais vous devrez adapter si cette plage IP est déjà utilisée sur votre réseau en amont (c’est rare mais on ne sait jamais).

Ce script servira de base pour les autres articles, donc c’est important que ceci fonctionne chez vous avant d’attaquer la suite. Et si en plus vous avez tout compris, c’est encore mieux 😀

Des questions, des réactions ou des suggestions pour améliorer le script (je ne demande pas mieux) ? Les commentaires sont là pour ça !

Advertisements
Cet article a été publié dans rogue-ap, tuto, wifi. Ajoutez ce permalien à vos favoris.

36 commentaires pour [Tuto] Rogue AP – Épisode 1 : Un hotspot transparent

  1. nuwanda dit :

    Salut Antares, et merci pour cet article (et la suite, bien fournie !).
    J’ai une question à laquelle je ne trouve pas de solution dans la littérature internet. J’ai une carte TP-Link TL-WN722N (c’est pas mignon comme nom ça ?), avec un firmware Atheros AR9271 compatible BT. Pour autant, je dois renseigner l’option « –ignore-negative-one » à chaque commande airodump-ng/aireplay-ng pour m’éviter ce fichu message sur le canal -1.
    Et ce problème est persistant avec la commande airbase-ng, qui me renvoie « Error: Got channel -1, expected a value < 256. Please report." Et cette fois, pas moyen d'éviter ça.
    Peut-être as tu rencontré un problème du genre ?

    • antares145 dit :

      Salut !

      Non, là comme ça ça ne me dit rien, quelle version de BT, la 5r3 ? Essaie de télécharger/compiler/installer la version SVN d’aircrack-ng, pour voir si le « bug » a été corrigé. Sinon, essaie avec Kali, t’auras peut-être plusd e chance (mais hje garantis pas que tout le script fonctionnera du premier coup !). Tu tapes exactement les commandes du tuto, ou tu les as adaptées à ton cas particulier ?

      Vérifie également que tu n’as pas d’autre programme qui prendrait le contrôle de ta carte (Wicd, NetworkManager,…), seuls les programmes de aircrack-ng doivent avoir accès à cette carte.

  2. panda dit :

    Tout fonctionne correctement chz moi exepté que les machines externes ne peuvent pas se connecter sur le réseau Wifi gratuit créé.
    La carte wifi doit elle avoir l’AP activé?

  3. BURNIER dit :

    Bonjour, je suis sous kali et je n’arrive pas installer udhcp ou puis-je le trouver ?

  4. fabien dit :

    Salut,

    En reprenant ton script et en modifiant pour adapter à ma config, mon client arrive bien à se connecter mais a un accès limité (pas internet).
    J’ai bien conservé le iptables et le ip_forward tel quel .

    je suis en eth0 vers internet et wlan0 sur mon rogue

    • antares145 dit :

      Salut !

      Avec aussi peu d’infos, je peux difficilement te dire ou chercher… Est-ce que ton client reçoit une IP valide, déjà ? Si c’est le cas, tente un « ping » progressif (vers l’IP du rogue AP, vers une IP sur internet, vers un nom de domaine). Ca peut déjà t’indiquer à quel niveau se trouve le (premier) problème.

      Est-ce que tu as bien « nettoyé » toutes tes autres règles IPtables ?

  5. ubik dit :

    aucune retouche a faire avec kali marche out of the box 🙂

  6. kcdtv dit :

    Buenas noches amig@s
    Contrairement à Ubik j’ai du faire une petite manœuvre en plus sous kali linux : modifier le fichier /etc/default/udhcpd
    Lorsque j’ai installé udhcpd depuis les dépôts (avec kali actualisée) tout c’est bien passé avec en fin d’installation l’avertissement suivant

    Configurando udhcpd (1:1.20.0-7) ...
    update-rc.d: We have no instructions for the udhcpd init script.
    update-rc.d: It looks like a non-network service, we enable it.
    udhcpd: Disabled. Edit /etc/default/udhcpd to enable it.

    Ceci dit la manip est simplissime, il suffit juste de suivre l’indication en première ligne du fichier /etc/default/udhcpd
    Vous l’ouvrez donc avec nano (par example, si vous aimez vim , libre à vous) en tant qu’administrateur

    sudo nano  /etc/default/udhcpd 

    En première ligne direct l’instruction à suivre:

    #Comment the following line to enable 

    La ligne qui suit (la deuxième) est ainsi:

    DHCPD_ENABLED="no"

    Et logiquement ceci déshabille dhcpd. On place donc un dièse en début de ligne pour la désactiver.
    Et notre deuxième ligne devient

    #DHCPD_ENABLED="no"

    A faire en début de procesus sinon la victime n’obtiendras pas d’IP valable.
    Sinon avec la dernière version d’aircrack-ng il faut bien évidemment remplacer monX par wlanXmon. dans notre ligne de commande airbase-ng 😉

    Salut à tous! gracias maestro :p

  7. Redploplop dit :

    Salut 😉

    Merci pour ton travail ..

    Cependant je rencontre un problème avec ton script, le message  » at0 error while getting interface flags  » s’affiche dans le terminal.

    J’ai donc tenté de tout refaire manuellement via les commandes:

    airmong-ng start wlan1
    airbase-ng -c 3 -e ‘WiFi Gratuit’ mon0

    et le message :
    Interface mon0:
    ioctl(SIOCGIFINDEX) failed: No such device

    Je pense que tout vient de là

    Pour l’info je suis sous kali linux 2.0 via VirtualBox ( Penses tu que le fait que ce soit une machine virtuelle à une incidence ? )
    Avec une carte wifi alfa awus036h pour le mode monitoring et une connection ethernet pour l’accès internet.

    As tu des pistes pour moi merci 😉

    • Alex dit :

      Pour info sur kali 2 les cartes montée en monitoring son nommée de la façon suivante:
      wlan0 -> wlan0mon
      c’est pour cela qu’il ne trouvais pas ta carte.

  8. Ping : Hacking – Rogue AP | Thomas Clauzel

  9. Ping : Hacking – Rogue AP – Thomas Clauzel

  10. Sinaî00 dit :

    Salut, merci marche nickel sur kali 2.0.
    Juste changé les commande pour mettre la carte en monitor.
    ifconfig wlan0 down
    iwconfig wlan0 mode monitor
    ifconfig wlan0 up

    ps : Ne marche pas avec la carte awus051 nh v.2 en monitor

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 )

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 )

Photo Google+

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

Connexion à %s