Sécuriser un serveur RDP sur le port 3389
Le protocole RDP (port par défaut 3389) est couramment utilisé dans le monde professionnel pour accéder à des bureaux distants. Il est plutôt performant et compétitif face à la concurrence comme TeamViewer, AnyDesk ou NoMachine. En particulier RDP permet d’imprimer sur des imprimantes locales à partir d’une session distante.
Le protocole RDP est visé par des attaques
Le problème lié à RDP, c’est son taux d’adoption qui en fait une cible de choix pour les pirates informatiques. Une partie de ces attaques vise une faille de sécurité identifiée, et il est alors très difficile de s’en prémunir. La meilleure politique consiste alors à mettre régulièrement à jour son système d’exploitation, en comptant sur l’éditeur pour corriger les failles avant qu’elles soient exploitées contre vous. Il n’y a de toutes manières que l’éditeur qui pourra auditer et corriger le code, puisque RDP n’est pas un logiciel libre au code ouvert.
Mais il y a quelques mesures préventives que l’on peut mettre en place, pour limiter les attaques par force brute. Les exemples qui suivent sont basés sur Windows Server 2012 R2.
Limiter les attaques par force brute
Le système d’exploitation Windows Server 2012 R2 possède par défaut un compte invité. Je ne suis pas certain de l’utilité réelle de ce compte, que je préfère désactiver pour ne pas permettre à n’importe qui d’avoir un pied sur la machine pour tenter une escalade de privilèges.
Pour cela : Gestion de l’ordinateur (compmgmt.msc) > Utilisateurs et groupes locaux > Utilisateurs > Invité (clic droit) > Le compte est désactivé.
Pour réduire le risque de succès d’une attaque par force brute ou par dictionnaire, la première chose à faire est d’employer des mots de passe forts avec tous les types de caractères : majuscules, minuscules, chiffres, ponctuation.
Réglages : Editeur de stratégie de groupe locale (gpedit.msc) > Configuration ordinateur > Paramètres Windows > Paramètres de sécurité > Stratégies de comptes > Stratégie de mots de passe.
Là on a accès notamment à la durée de vie maximale d’un mot de passe, sa longueur minimale, et la possibilité de respecter des exigences de complexité ou pas.
Les tentatives de connexion auprès d’un compte utilisateur devrait alerter le système pour empêcher de répéter ces tests de mots de passe.
Editeur de stratégie de groupe locale (gpedit.msc) > Configuration ordinateur > Paramètres Windows > Paramètres de sécurité > Stratégies de comptes > Stratégie de verrouillage du compte.
Là on a accès au nombre de tentatives au bout duquel le compte se verrouille, pour une durée à déterminer.
Si votre serveur accueille 3 utilisateurs pour un total de 3 salariés, il n’y a aucune raison d’accepter un 4ème pirate qui tenterait de se connecter.
Après quelques tests, il semblerait qu’une tentative de connexion avec mot de passe faux compte pour 1 slot dans cette règle. En tout cas vous pouvez épuiser 5 slots utilisateurs avec 0 utilisateur effectivement connecté…
Pour limiter le nombre de connexions RDP maximum : Editeur de stratégie de groupe locale (gpedit.msc) > Configuration ordinateur > Modèles d’administration > Composants Windows > Services Bureau à distance > Hôte de la session Bureau à distance > Connexions >Limiter le nombre de connexions.
Autant en mode console, il est normal d’avoir plusieurs sessions par utilisateur. Autant en mode graphique, c’est peu courant. Autant désactiver la possibilité qu’un compte utilisateur soit utilisé par deux personnes en même temps.
Editeur de stratégie de groupe locale (gpedit.msc) > Configuration ordinateur > Modèles d’administration > Composants Windows > Services Bureau à distance > Hôte de la session Bureau à distance > Connexions > N’autoriser qu’une session de services Bureau à distance par utilisateur.
Si certains comptes utilisateurs sont nécessaire pour le bon fonctionnement du serveur sans jamais nécessiter de connexion Bureau à Distance (RDP) alors le réglage ci-dessous permettra de limiter aux seuls utilisateurs souhaités.
Editeur de stratégie de groupe locale (gpedit.msc) > Configuration ordinateur > Paramètres Windows > Paramètres de sécurité > Stratégies locales > Attribution des droits d’utilisateur > Autoriser l’ouverture de session par les services Bureau à distance.
Les groupes pourront être gérés avec la fenêtre suivante.
Gestion de l’ordinateur (compmgmt.msc) > Utilisateurs et groupes locaux > Groupes.
Surveiller les attaques
Les logs de connexion RDP sont accessibles via l’observateur d’évènements.
Services de composants (comexp.msc) > Observateur d’événements (Local) > Journaux des applications et des services > Microsoft > Windows > TerminalServices-RemoteConnectionManager > Opérationnel.
Les logs de tentatives d’authentification sont accessibles ci-dessous.
Services de composants (comexp.msc) > Observateur d’événements (Local) > Journaux des applications et des services > Microsoft > Windows > RemoteDesktopServices-RdpCoreTS > Opérationnel.
Les logs d’authentification auprès d’une session utilisateur sont ci-dessous.
Services de composants (comexp.msc) > Observateur d’événements (Local) > Journaux des applications et des services > Microsoft > Windows > TerminalServices-LocalSessionManager > Opérationnel.
Limiter l’exposition du serveur RDP
Pour limiter l’exposition du serveur RDP, l’idéal est de paramétrer le pare-feu pour restreindre les tentatives de connexions. Voici quelques exemples de règles de pare-feu qui sont possibles.
- N’autoriser que des adresses IP identifiées.
- N’autoriser que des blocs IP correspondant à des zones géographiques (ou utiliser GeoIP).
- N’autoriser que des connexions via réseau local (éventuellement VPN).
- Fermer complètement le port RDP sauf si ce dernier est vraiment utile.
- Mettre en place une méthode de port-knocking pour ne pas laisser le port 3389 ouvert à tous.
- Déplacer le port d’écoute 3389 vers un autre port arbitraire et impossible à deviner.
Il semble particulièrement intéressant d’encapsuler RDP dans une couche de chiffrement VPN comme OpenVPN ou un tunnel SSH comme expliqué dans cet article.