SecurityInsider
Le blog des experts sécurité Wavestone

CTF, un nouveau challenge pour Microsoft


Résultat de recherche d'images pour "ctfmon"

Présentation du protocole CTF

Différentes vulnérabilités affectant le protocole CTF ont été découvertes par le chercheur Tavis Ormandy de l’équipe Google Project Zero. 
Ce protocole est partie intégrante du Windows Text Services Framework. Ce dernier permet, entre autres, la gestion de la disposition du clavier, le paramétrage du traitement de texte ou encore la configuration de la méthode de saisie des caractères.
Un des rôles du protocole CTF est ainsi d’informer les différentes applications en cas d’éventuel changement de ces paramétrages. 
Ces notifications sont réalisées à l’aide du service ctfmon. Chaque application lors de son lancement va systématiquement se connecter à ce service, lui permettant alors d’être notifiée par ce dernier, ainsi que d’échanger avec les diverses applications également clientes.
Un processus ctfmon est instancié pour chaque session ou bureau créé.

Exécution du processus ctfmon.exe

Ce dernier ouvre alors un port ALPC (Asynchronous Local Inter-Process Communication) dédié nommé \BaseNamedObjects\msctf.server<DesktopName><SessionId>.

Port ALPC ouvert par un serveur CTF

Lorsqu’une nouvelle fenêtre est instanciée par un processus, le client CTF est automatiquement chargé et communique certaines de ses propriétés au serveur CTF au travers du port ALPC. Notamment, le processus client transmet son handle de fenêtre (HWND), ainsi que son identifiant et celui de son thread.

Faiblesses du protocole CTF

Le protocole CTF, implémenté à l’origine pour LPC au sein de Windows XP puis adapté à ALPC depuis Windows Vista, souffre de différentes faiblesses de conception.
D’une part, le protocole ne bénéficie d’aucun mécanisme d’authentification ni de contrôle d’accès. Ainsi, toute ressource est en mesure de se connecter à n’importe quelle session CTF. En effet, pour rappel tout processus communique ses propriétés lors de son inscription auprès d’un serveur CTF ; ces dernières peuvent alors être altérées par des valeurs arbitraires.
D’autre part, toute ressource est en mesure de se déclarer serveur, et ainsi exploiter illégitimement des connexions émanant d’applications clientes s’y connectant, privilégiées ou non.

Exploitation via ctftool

Afin de faciliter ses recherches, Tavis Ormandy a développé un outil permettant d’interagir avec le protocole CTF : ctftool. Ce dernier permet l’envoi ainsi que la réception de message au travers du protocole CTF avec un serveur ou un client CTF arbitraire.

Liste des commandes mises à disposition par l’outil ctftool

Etablissement d’une connexion à un serveur CTF

La connexion au serveur CTF se réalise au travers de la commande connect. Sans argument, la commande permet la connexion au serveur CTF de la session courante. 


Néanmoins, le protocole CTF n’assure aucune isolation des différentes sessions et bureau. Ainsi, il est possible de se connecter au serveur CTF d’une session arbitraire via le renseignement du nom du bureau ainsi que de la session souhaitée. La vidéo suivante illustre la connexion à un serveur CTF d’une session arbitraire.



Suite à l’établissement d’une connexion avec un serveur CTF, il est possible d’énumérer les différents clients connectés via la commande scan.



Communication inter-clients

L’outil ctftool permet la communication entre les différents clients connectés à un serveur CTF ; ce dernier faisant alors office de proxy.
Une telle exploitation nécessite cependant la présence d’un langage exploitant un IME (Input Message Editor) autorisant l’accès aux entrées utilisateurs par un autre processus, tel que les langages Chinois ou Japonais par exemple. En effet, ces IME autorisent l’accès aux entrées utilisateurs renseignées au travers du clavier dans le but de les convertir vers les caractères spéciaux du langage configuré.

Par ailleurs, l’absence de l’implémentation d’un mécanisme de contrôle d’accès au sein du protocole CTF permet le contournement d’un principe fondamental de la sécurité Windows : UIPI, ou User Interface Privilege Isolation. 
En effet, introduit au sein du modèle de sécurité Windows depuis Windows Vista et Windows Server 2008, ce principe de sécurité interdit notamment l’envoi de message par un processus vers un autre disposant d’un niveau de privilège plus élevé.
Les vulnérabilités affectant par nature le protocole CTF permettent le contournement de l’UIPI, et ainsi l’injection et la consultation, depuis une session non privilégiée, des données manipulées par un processus privilégié. Une telle action est grandement facilitée par l’outil ctftool, qui offre la possibilité d’attendre la connexion d’un processus arbitraire à un serveur CTF maîtrisé pour éventuellement échanger avec ce dernier. Une telle action se réalise au travers de l’action wait.
La vidéo suivante illustre l’injection de données arbitraire depuis une session non privilégiée au sein d’un processus privilégié.



Ainsi, un utilisateur malveillant est en mesure, via l’exploitation des faiblesses de contrôle d’accès du protocole CTF, d’injecter des commandes arbitraires au sein d’une invite de commande exécutée par un administrateur.

Exploitation SYSTEM

Au moment des recherches conduites par Tavis Ormandy, le protocole CTF souffrait de différentes vulnérabilités critiques de corruption de mémoire.
Le chercheur a donc développé un code d’exploitation pour l’une de ces vulnérabilités, lui permettant alors la compromission de toute session cliente connectée à un serveur CTF ; cela indépendamment de la présence d’un langage IME autorisant l’accès aux entrées utilisateur par un autre processus.
La mire de consentement UAC (consent.exe) est exécutée avec les privilèges SYSTEM et est cliente du serveur CTF privilégié Winlogon Desktop. Cette dernière peut être générée par tout utilisateur non privilégié au travers de la méthode runas.

Processus consent.exe client du serveur CTF WinLogon 1

L’exploitation d’une vulnérabilité de corruption de mémoire au sein de la session CTF de l’interface de consentement UAC permet donc l’élévation de privilège par tout utilisateur d’un système Windows, comme l’illustre la vidéo suivante :



Par ailleurs, une telle élévation de privilège peut être réalisée via la corruption de la session CTF de l’interface de connexion Windows (LogonUI.exe), elle aussi exécutée en tant que SYSTEM. 


Remédiation

Les mises à jour de sécurité Windows publiées le mardi 13 août 2019 assurent la correction des vulnérabilités de corruption de mémoires présentes au sein de l’implémentation du protocole CTF.
Néanmoins, ces correctifs ne permettent pas de se prémunir des abus liés à l’absence de contrôle d’accès ou d’authentification affectant le protocole CTF. En effet, de telles améliorations nécessiteraient une revue en profondeur de l’implémentation du protocole CTF.


François LELIEVRE

Aucun commentaire:

Enregistrer un commentaire