Comment réaliser une attaque brute force RDP ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à réaliser une attaque par brute force sur le service RDP d'une machine Windows en utilisant l'outil Crowbar. Cette pratique est intéressante dans le cadre d'un pentest (test d'intrusion), mais également pour tester soi-même la sécurité d'une ou plusieurs machines. Bien entendu, on peut tout à fait utiliser cette technique pour réaliser une véritable attaque, mais ce n'est pas mon objectif : chacun sa façon de voir les choses.
Effectuer une attaque par brute force RDP sur un serveur est un bon moyen pour vérifier :
- Que le serveur ciblé est capable de bannir l'adresse IP source à l'origine de l'attaque au bout d'un certain nombre de tentatives en échecs
- Que le serveur ciblé génère des logs correspondants à ces tentatives
- Que le compte utilisateur utilisé, s'il existe réellement, sera verrouillé au bout d'un certain nombre de tentatives en échecs
Autrement dit, on va attaquer l'accès RDP de notre propre serveur pour tester les sécurités en place.
II. L'outil Crowbar
Crowbar est un outil gratuit développé en Python qui va permettre de réaliser des attaques de type "brute force" sur une cible, et sur un protocole spécifique. Cet outil est compatible avec les protocoles suivants : OpenVPN, RDP (avec support du NLA), SSH et VNC. Dans cet article, je vais m'intéresser au cas de figure du RDP même si l'on pourrait l'utiliser sur d'autres services.
Le terme "crowbar" signifie "pied de biche" en français : cette traduction permet de mieux comprendre pourquoi les développeurs ont choisi ce nom pour cet outil compte tenu de ses fonctionnalités.
Le projet Crowbar est disponible sur GitHub : GitHub - Crowbar
Pour l'installation sur Kali Linux, c'est tout simple puisqu'il suffit d'installer le paquet via Apt. Pour une installation à partir des sources, reportez-vous à documentation.
sudo apt-get install crowbar
Une fois que l'outil est installé, nous pouvons commencer à utiliser cet outil ! Pour ma part, je l'ai installé sur une machine Kali Linux à partir de WSL sur Windows.
III. Brute force RDP avec Crowbar
A. Premiers pas avec Crowbar
Pour commencer, nous allons utiliser une méthode assez basique et qui ne ressemble pas à une attaque par brute force : une seule tentative, avec un utilisateur et un mot de passe spécifique. Ainsi, si l'on veut cibler l'adresse IP "192.168.100.11" en spécifiant l'utilisateur "florian" et le mot de passe "itconnect", on va devoir utiliser :
crowbar -b rdp -s 192.168.100.11/32 -u florian -c itconnect
L'option "-b" sert à préciser le service à cibler, donc pour du "Bureau à distance", on précise "RDP". Cette option accepte d'autres valeurs : openvpn, sshkey, vnckey. Lorsque la commande retourne "No results found..." cela signifie que l'identifiant et le mot de passe n'ont pas fonctionné.
Nous pouvons aussi cibler plusieurs adresses IP, et pour cela il y a plusieurs choix :
- Séparer les adresses IP par une virgule
- Préciser un sous-réseau (par exemple 192.168.100.0/24) plutôt qu'une machine mais précisez aussi le timeout (-t) pour que ce ne soit pas trop long
- Utiliser un fichier avec une liste d'adresses IP via l'option -S
crowbar -b rdp -s 192.168.100.11/32,192.168.100.10/32 -u florian -c itconnect
Dans le cas où le serveur est accessible en RDP sur un port différent du port par défaut (3389), on peut préciser un port via l'option "-p". Par exemple :
crowbar -b rdp -s 192.168.100.11/32 -u florian -c itconnect -p 13389
B. Utiliser des listes et dictionnaires avec Crowbar
Si l'on veut simuler une véritable attaque par brute force, il convient d'utiliser un dictionnaire. Soit vous constituez vous-même un dictionnaire, soit vous recherchez une base existante sur Internet. Nous pouvons créer un petit dictionnaire "dico.txt" en local :
nano ~/dico.txt
À l'intérieur, on ajoute quelques mots de passe... puis on enregistre.
Une fois que c'est fait, on repart à l'assaut du serveur en utilisant le dictionnaire (l'option -c est remplacée par -C). Ce qui donne :
crowbar -b rdp -s 192.168.100.11/32 -u florian -C ~/dico.txt
Grâce à la commande ci-dessus, on réalise une véritable attaque brute force sur le compte "florian". Sachez qu'avec la convention de nommage actuel, on cible un compte local. Si l'on veut cibler un compte du domaine, il faut utiliser l'une des conventions de nommage suivante (domaine Active Directory "it-connect.local" avec le nom Netbios "IT-CONNECT") :
crowbar -b rdp -s 192.168.100.11/32 -u florian@it-connect -C ~/dico.txt crowbar -b rdp -s 192.168.100.11/32 -u florian@it-connect.local -C ~/dico.txt crowbar -b rdp -s 192.168.100.11/32 -u IT-CONNECT\\florian -C ~/dico.txt
Pour aller plus loin, on pourrait utiliser notre dictionnaire couplé à une liste d'utilisateurs, plutôt que de cibler seulement "florian". Dans ce cas, on peut créer un fichier nommé "users.txt" (ou autrement) et ajouter un utilisateur par ligne dans ce fichier.
nano ~/users.txt
Pour l'utiliser via Crowbar, il suffira de préciser le nom du fichier en remplaçant l'option "-u" par "-U". Comme ceci :
crowbar -b rdp -s 192.168.100.10/32 -U ~/users.txt -C ~/dico.txt
Crowbar va tester l'accès RDP sur le serveur en essayant chacune des combinaisons possibles.
Sachez que si la tentative de connexion réussit, que ce soit pour un ou plusieurs comptes, vous allez obtenir le message "RDP-SUCCESS" avec le nom de l'hôte, le port, le nom de l'utilisateur et le mot de passe. Ainsi, vous avez les informations sur les combinaisons gagnantes !
Voilà, nous venons de voir comment utiliser Crowbar pour réaliser une attaque brute force RDP.
IV. Comment protéger l'accès RDP d'un serveur ?
Pour protéger l'accès RDP d'un serveur sous Windows, voire même d'un poste de travail sous Windows, je vous recommande la lecture des articles ci-dessous. Au-delà de protéger le service RDP, il est recommandé de protéger les comptes utilisateurs de l'Active Directory.