Comment bloquer les attaques Brute Force RDP avec EvlWatcher ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons voir comment bloquer les attaques Brute Force sur le service RDP (Bureau à distance) d'une machine Windows avec l'outil gratuit EvlWatcher.
Les attaques par brute force sont très courantes sur les services populaires comme le RDP ou le SSH. C'est d'autant plus vrai si vous décidez d'exposer sur Internet le service RDP d'un serveur. Bien souvent, lorsque l'on se connecte sur un serveur Windows pour l'administrer, on le fait à partir du client "Bureau à distance" et du protocole RDP. Donc, cela représente une porte d'entrée potentielle pour les pirates.
Si l'attaque est effectuée sur un compte utilisateur existant au sein de l'Active Directory, il y a des chances pour que le compte soit verrouillé au bout d'un certain nombre de tentatives. Encore que, ça dépend de votre politique à ce sujet.
Pour protéger son serveur Windows contre les attaques de type "Brute Force" sur le service RDP, il y a plusieurs pistes à explorer :
- Utiliser un port d'écoute différent pour le RDP : remplacer le port 3389 par un autre port pour tenter de masquer le service. Voir ce tutoriel : modifier le port RDP par GPO
- Mettre en place la double authentification (MFA) au niveau du RDP : il existe différentes solutions, comme le logiciel UserLock de chez IS Decisions. Voir ce tutoriel : mise en place de la double authentification avec UserLock
- Bannir les adresses IP effectuent des attaques par Brute Force : c'est ce que nous allons voir avec la mise en place du logiciel EvlWatcher
La question que l'on peut se poser, c'est "pourquoi EvlWatcher et pas un autre outil ?". Pour faire simple, il est gratuit, son code source est disponible sur GitHub, il s'installe très rapidement et il fonctionne suffisamment bien pour que je vous en parle !
EvlWatcher va permettre de détecter les attaques par Brute Force sur votre machine Windows en analysant les journaux d'événements de Windows et en bloquant les adresses IP malveillantes à l'aide du pare-feu de Windows. C'est en quelque sorte un fail2ban pour Windows qui surveille le service RDP.
J'aurais pu également vous proposer ma propre solution basée sur PowerShell puisque l'on peut lire les logs avec Get-EventLog et que l'on peut agir sur le pare-feu avec Set-NetFirewallRule. Mais, pour le moment, elle n'existe pas et je suis tombé sur EvlWatcher.
II. Prise en main d'EvlWatcher
Commençons par télécharger EvlWatcher sur GitHub, tout en sachant qu'il est mis à jour de temps en temps. Ce qui est rassurant.
Vous obtiendrez un exécutable très léger : procédez à l'installation, deux trois clics suffisent. Il faut savoir que par défaut l'outil s'installe dans "C:\Program Files (x86)\EvlWatcher" et qu'il crée un service nommé "EvlWatcher service" sur la machine.
Dans le menu Démarrer, vous allez trouver un raccourci nommé "EvlWatcherConsole" qui donne accès à l'interface de gestion du logiciel. Voici à quoi elle ressemble :
L'onglet "Currently banned" se découpe en trois parties :
- Temporarily banned IPs : les adresses IP bannies temporaires, pour une durée limitée
- Permanently banned IPs : les adresses IP bannies définitivement (après plusieurs bannissements temporaires)
- White-Listed IP Patterns : les adresses IP ou les sous-réseaux en liste blanche
Il est possible d'ajouter ou supprimer des adresses IP manuellement dans chaque section. C'est simple, mais efficace pour visualiser rapidement l'état des bannissements sur son serveur.
Au sein des règles de trafic entrant du pare-feu Windows, vous allez retrouver une règle nommée "EvlWatcher" qui est utilisée par le logiciel pour bloquer l'accès (sur tous les ports) aux adresses IP bannies.
L'onglet "Live" permet de suivre en live l'activité du logiciel. Lorsqu'une adresse IP est bannie, de nouveaux messages vont s'afficher :
Temporarily banning 192.168.100.12, this is strike 2 Banned 192.168.100.12
Cela signifie que l'adresse IP "192.168.100.12" a été bannie de façon temporaire pour la deuxième fois. Au bout de trois fois (selon la configuration par défaut), elle sera bannie définitivement.
L'onglet "Global Settings" donne accès à quelques paramètres pour gérer les logs : niveau de log, nombre d'entrées dans le journal "Live" ainsi que l'intervalle d'actualisation des logs.
Enfin, l'onglet "Rule Tester" permet de tester une règle de détection. Vous choisissez une règle, vous collez le contenu du log à analyser au format XML (récupéré à partir de l'observateur d'événements) et vous pouvez tester si EvlWatcher détecte bien l'adresse IP.
C'est surtout utile si vous cherchez à ajouter au logiciel de nouvelles capacités de détection, car par défaut, pour le RDP, il s'appuie déjà sur 3 types d'événements différents (divers ID).
Voyons ce que donne EvlWatcher dans la pratique.
III. Tester l'efficacité d'EvlWatcher
Le logiciel est installé sur ma machine et il est actif. Pour vérifier qu'il fonctionne bien, je vais simuler une attaque sur mon serveur protégé par EvlWatcher.
Pour cela, il me suffit d'ouvrir le client Bureau à distance et d'essayer de me connecter en RDP sur mon serveur en utilisant de mauvais identifiants.
Comme c'est la troisième fois que j'effectue une attaque à partir de ce serveur (IP = 192.168.100.12), je suis banni définitivement ! En temps normal, lors de la première attaque, l'hôte est banni temporairement. Par défaut, la durée du bannissement est de 3600 secondes, c'est-à-dire 1 heure.
Pour qu'une adresse IP soit considérée comme bannie, il faut effectuer 5 tentatives de connexion en échec dans un délai de 3 minutes. Cela est modifiable, comme nous allons le voir dans la prochaine partie de ce tutoriel.
IV. Configurer EvlWatcher
Le logiciel EvlWatcher est préconfiguré, mais on peut personnaliser la configuration grâce au fichier XML suivant :
C:\Program Files (x86)\EvlWatcher\config.xml
À l'intérieur, nous retrouvons plusieurs sections où chaque section correspond à une règle de détection. Par exemple, nous avons la section "<Task Name="BlockRDPBrutersBySecurity4625" Active="true">" et chaque section contient sa propre configuration pour définir la durée du bannissement, etc.
Note : à l'heure actuelle, EvlWatcher est fourni avec 3 règles de détection pour le RDP et une règle pour le SSH.
Concrètement, il y a les paramètres suivants :
- Durée en secondes pendant laquelle un hôte est banni (via le firewall Windows)
<LockTime> 3600 </LockTime>
- Pour bannir, tenir compte des événements des X dernières secondes pour chaque adresse IP, par défaut 120 secondes soit 2 minutes
<EventAge> 120 </EventAge>
- Bannir l'hôte distant au bout de X tentatives en échecs, par défaut 5 (dans le délai imparti défini par EventAge)
<TriggerCount> 5 </TriggerCount>
- Bannir définitivement l'hôte distant au bout de X bannissements temporaires, par défaut 3
<PermaBanCount> 3 </PermaBanCount>
Après modification du fichier de configuration, redémarrez le service d'EvlWatcher. Voici la commande PowerShell :
Restart-Service EvlWatcher
L'outil EvlWatcher est en place et en plus vous savez comment le configurer ! Votre serveur est désormais capable de gérer les attaques par Brute Force RDP. Même s'il y a surement mieux, il présente l'avantage d'être léger, fonctionnel et gratuit.
Il n'est pas possible de mutualiser la base des adresses IP bannies entre plusieurs machines, et il n'est pas non plus possible de recevoir une alerte par e-mail lorsqu'une nouvelle adresse IP est bannie. Lorsque CrowdSec sera compatible Windows, il y a des chances qu'il apporte une réponse encore plus pertinente à cette problématique.
Bonjour,
Cet article est très instructif, malheureusement il y a une petite coquille 120s c’est 2 minutes.
Continuez se super travail.
Cordialement
Christophe
Hello Christophe,
Oula oui bien vu… Merci ! Et puis, j’ai fait l’erreur plusieurs fois… Je vais aller dormir… 🙂
A croire que chez moi, une minute dure seulement 40 secondes…
A+
Florian
Bonjour, Merci pour cette article.
je l’ai donc installer mais je me retrouve avec ce message dans l’onglet live.
29/09/2021 14:53:59 – [Info]: Event Log OpenSSH/Operational was not found, tasks that require these events will not work and are disabled
Apres des essais de connection, aucune addresse n’est filtrées. Une idée ?
Merci d’avance
Hello Jonathan,
Le message d’erreur « Event Log OpenSSH/Operational » n’est pas gênant, c’est que SSH ne doit pas être installé sur ta machine. J’imagine que tu utilises une version Desktop de Windows ?
L’adresse qui n’est pas filtrée n’entre pas dans le périmètre de la liste blanche, à tout hasard ?
Bonjour,
Super Article !
Dommage qu’on ne peut pas mettre cela sur l’OWA ou l’ECP d’exchange.
A bientôt,
C
Bonjour,
interessant, moi j’utilise RDP defender depuis de nombreuses années ( Merci Hicham)et jamais pris a defaut il fonctionne sur le même principe ( firewall windows) malheuresement il a été remplacé par sa version payante rds-knight qui apporte d’autre fonctions utiles ou non. J’ai quand même conservé l’executable 🤣.
Un grand merci pour les tutos
bonjour,
je viens d’installer le logiciel et j’ai fait le test. L’ip est bien banni mais je peux toujours relancer la tentative en rdp même en étant banni.
j’ai même réussi à me connecter en étant banni. Est-ce un problème de mise à jour du logiciel?
sinon bon tuto.
Bonjour, est-ce qu’il est plus fiable que rdp defender ?
merci
Bonjour,
j’ai ce message d’erreur toutes les secondes dans le journal windows la source : EvlWatcher – l’ID : 0 La collection a été modifiée ; l’opération d’énumération peut ne pas s’exécuter.
De quoi s’agit il ?
Super tool, merci !
Pour ceux qui ne détectent rien : la détection RDWeb ne fonctionne pas avec le journal Windows Sécurité car w3wp.exe (worker IIS) ne renvoie pas l’IP. C’est donc le journal IIS qui sera utilisé. Mais par défaut, il peut être réglé en « Fichier journal uniquement » (vous verrez ça dans IIS > Sites > Default Web Site > Journalisation) et ça ne fonctionnera pas ainsi. Il faut alors positionner « Destination des événements de journal » en « Evénements ETW uniquement » (ou les deux) et activer le journal IIS-Logging > Logs.