Remote Desktop Protocol (RDP) hijacking

Introduction

En environnement Active Directory, un attaquant cherche à se déplacer latéralement jusqu’à obtention des privilèges d’administration du domaine. L’objectif final étant la compromission totale de l’Active Directory.

Après compromission d’une machine Windows et obtention de privilèges élevés sur cette dernière, il existe plusieurs moyens de récupérer de nouveaux comptes ou accès valides sur le domaine :

  • Dump de LSASS.exe pour la récupération de secrets stockés en clair dans la mémoire ;
  • Récupération de secrets stockés au sein de registres (secrets LSA) ;
  • Manipulation des tokens Windows ;
  • Recherche de secrets d’authentification stockés dans des fichiers en clair sur le système de fichier ;
  • Etc.

Au sein de cet article, une technique un peu moins connue sera présentée : Le vol de session RDP ou RDP session hijacking.

Détail technique

Un attaquant disposant d’une session « desktop » ouverte avec un compte administrateur local sur une machine Windows peut vérifier la présence d’autres sessions « desktop » ouvertes sur le système.

Pour ceci, la commande query user ou quser peut être utilisée. Cette commande liste les utilisateurs authentifiés sur le serveur via une session RDP. Le résultat suivant peut, par exemple, être retourné :

Dans cet exemple, l’utilisateur toto.adm est privilégié sur le domaine et l’attaquant souhaite prendre le contrôle de la session RDP qu’il a laissé déconnectée.

Deux méthodes permettent de prendre le contrôle d’une session RDP déconnectée. L’exploitation de ces dernières demande au préalable une élévation de privilèges sur le système vers « NT AUTHORITE\SYSTEME ».

Utilisation de l’utilitaire « tscon »

La première méthode présentée consiste à créer un nouveau service et le démarrer depuis un invite de commandes exécuté en tant qu’administrateur. La commande suivante peut être exécutée pour réaliser cette action.

PSExec64.exe -i -s -accepteula taskmgr.exe.

Le service peut ensuite être démarré avec la commande net start NOM_SERVICE. Celui-ci sera exécuté avec le plus haut niveau de privilèges (« NT AUTHORITE\SYSTEME »).

Afin de prendre le contrôle d’une session RDP ouverte sur un serveur Windows, l’utilitaire tscon.exe, visant à lier un identifiant de session à une session RDP, peut être utilisé. Dans l’exemple présenté ci-dessous, l’identifiant 7 sera lié à la session RDP rdp-tcp#2 :

Utilisation du gestionnaire de tâche

La seconde technique consiste à utiliser le gestionnaire de tâche Windows « taskmgr.exe ». Cette méthode requiert, comme pour la première, une élévation de privilèges sur le système.

Pour l’élévation de privilège, la technique la plus simple consiste à utiliser (localement) l’utilitaire de SysInternal « PSExec64.exe » :

La commande présentée ci-dessus ouvre le gestionnaire de tâches Windows dans le contexte « NT AUTHORITE\SYSTEME ».

Enfin, il suffit de cliquer sur l’onglet « Utilisateurs », réaliser un clic droit sur l’utilisateur à compromettre et enfin se connecter sur sa session :

Pour conclure

Cette technique n’a pas pour vocation à être discrète. En effet, elle est souvent détectée par les EDR déployés sur les machines Windows. De plus, cette technique peut être identifiée trivialement au sein des événements générés par Windows. Monitorer les événements 4778 et 4779 permet d’identifier ce comportement.

Experts XMCO

Découvrir d'autres articles

  • Pentest

    Des dés aux données : de l’importance des nombres aléatoires (partie 2/2)

    Lire l'article
  • Pentest

    Des dés aux données : de l’importance des nombres aléatoires (partie 1/2)

    Lire l'article
  • Pentest

    Tour d’horizon des attaques et vulnérabilités sur le gestionnaire de mots de passe KeePass 

    Lire l'article