LegacyHive : Le bug du service de profil utilisateur Windows qui charge la ruche de registre d’un autre utilisateur, un cauchemar
Detection stack
- AIDR
- Alert
- ETL
- Query
Résumé
LegacyHive est une vulnérabilité non corrigée d’élévation de privilèges local dans le service du profil utilisateur Windows (ProfSvc). Un attaquant peut utiliser une combinaison d’empoisonnement du registre, de liens symboliques du gestionnaire d’objets et d’une condition de course TOCTOU via des verrous opportunistes pour forcer un service SYSTEM à charger une ruche de registre de l’utilisateur ciblé. Cela permet à un utilisateur à faible privilège d’obtenir un accès non autorisé à des données sensibles du registre ou potentiellement d’obtenir une compromission complète du SYSTEM.
Enquête
Le chercheur Nightmare-Eclipse a développé un proof-of-concept (PoC) qui exploite la discordance entre les opérations de fichiers au niveau SYSTEM et le cheminement contrôlé par l’utilisateur. L’enquête démontre comment modifier la valeur du registre Local AppData peut rediriger le service vers l’espace de noms du gestionnaire d’objets NT. En utilisant un verrou opportuniste (oplock) sur un fichier leurre, l’attaquant peut échanger un lien symbolique au moment exact où le service tente de charger la ruche.
Atténuation
Microsoft doit implémenter la canonisation de chemin pour s’assurer que les chemins résolus restent dans le répertoire de profil utilisateur légitime et rejettent les préfixes de périphérique/gestionnaire d’objets. De plus, les développeurs devraient utiliser la protection de réanalyse (FILE_FLAG_OPEN_REPARSE_POINT) et effectuer des E/S dans le contexte de sécurité de l’utilisateur plutôt que dans le contexte SYSTEM pour prévenir les scénarios de contrôle confus.
Réponse
Les défenseurs devraient immédiatement surveiller les chargements inhabituels du registre (RegLoadKey) pour les comptes non connectés de manière interactive et surveiller la création de répertoires d’objets sous BaseNamedObjectsRestricted. Les outils de contrôle d’application comme WDAC ou AppLocker devraient être utilisés pour empêcher l’exécution de binaires non signés. Une fois que Microsoft aura publié un correctif officiel, il devrait être priorisé pour le déploiement sur toutes les installations de bureau et de serveur Windows.
Flux d’attaque
Détections
Comportement possible d’exploitation de LegacyHive (via registry_event)
Voir
Comportement possible d’exploitation de LegacyHive (via file_event)
Voir
Comportement possible d’exploitation de LegacyHive (via cmdline)
Voir
Utilisation probable d’outils de piratage Windows [Partie 3] (via file_event)
Voir
Utilisation probable d’outils de piratage Windows [Partie 3] (via cmdline)
Voir
Détection de l’attaque d’élévation de privilèges LegacyHive [Événement du registre Windows]
Voir
Détecter les tentatives d’exploitation de LegacyHive via CreateProcessWithLogonW et Notepad suspendu [Création de processus Windows]
Voir
Résumé exécutif
- ID de cas de test : TC-20240522-K9P2L
- TTPs : T1068, T1548
-
Résumé de la logique de règle de détection : Détecte les tentatives d’exploitation de la vulnérabilité LegacyHive en surveillant
notepad.exeétant lancé avec lemodèle d'API CreateProcessWithLogonW dans la ligne de commande.Format / Langue de la règle de détection : - yaml yaml
- Environnement de sécurité cible : Windows OS, journaux d’événements Windows (Création de processus), EDR/SIEM.
- Score de résilience (1-5) : 2
-
Justification : La règle repose fortement sur une chaîne spécifique (
modèle d'API CreateProcessWithLogonW dans la ligne de commande.) apparaissant dans lechamp CommandLine. Un adversaire peut facilement contourner cela en utilisant différents appels API qui aboutissent au même résultat ou en utilisant différents noms de processus au lieu defield. An adversary can easily bypass this by using different API calls that achieve the same result or by using different process names instead ofnotepad.exe. - Principales conclusions : La détection est très spécifique à une seule implémentation d’exploitation et est extrêmement fragile face aux variations mineures dans le vecteur d’attaque.
-
Recommandation : Élargir la détection pour surveiller les
variantes de CreateProcesssuspectes sur plusieurs binaires courants (par ex.,calc.exe,cmd.exe) et surveiller les anomalies du service de profil utilisateur (ProfSvc).
Environnement de simulation et contexte
-
TTPs testées :
- T1068 : Exploitation pour l’élévation de privilèges
- T1548 : Abus des mécanismes d’élévation de privilèges
-
Contexte et pertinence des TTP : L’exploitation LegacyHive repose sur le fait de contraindre un service au niveau SYSTEM à effectuer des actions au nom d’un utilisateur. En utilisant
modèle d'API CreateProcessWithLogonW dans la ligne de commande.pour engendrer un processus dans un état suspendu, un attaquant peut manipuler l’environnement pour charger une ruche de registre malveillante. La surveillance des artefacts spécifiques de la ligne de commande de cet appel API est destinée à détecter la phase d’exploitation. -
Environnement cible :
- OS: Windows 10/11 ou Windows Server 2019/2022
- Enregistrement : Sysmon (ID d’événement 1) ou journal d’événements de sécurité Windows (ID d’événement 4688) avec audit de la ligne de commande activé.
- Pile de sécurité : SIEM (par ex., Splunk, Microsoft Sentinel)
Télémetrie & Vérification de la base de référence avant vol
Justification : Avant de simuler l’attaque, nous devons confirmer que l’hôte cible est configuré pour générer les journaux nécessaires, que ces journaux sont ingérés par le SIEM, et que la règle de détection ne se déclenche pas sur une activité bénigne. Sans cette validation, tout résultat de test est peu fiable.
-
1. Instructions de configuration de la télémetrie :
-
- Assurez-vous que « Audit de la création de processus » est activé via la stratégie de groupe (Configuration ordinateur > Paramètres Windows > Paramètres de sécurité > Configuration avancée de la stratégie d’audit > Suivi détaillé).
-
- Assurez-vous que « Inclure la ligne de commande dans les événements de création de processus » est activé (via le registre :
HKLMSoftwareMicrosoftWindowsCurrentVersionPoliciesSystemAuditProcessCreationIncludeCmdLine).
- Assurez-vous que « Inclure la ligne de commande dans les événements de création de processus » est activé (via le registre :
-
- Installez Sysmon et assurez-vous que l’ID d’événement 1 (Création de processus) est collecté.
-
-
2. Ingestion & Validation de la base de référence :
-
Action (télémetrie bénigne) : Lancer une instance standard de Notepad pour s’assurer que la journalisation de création de processus fonctionne sans déclencher la détection d’exploitation.
Start-Process "notepad.exe" -
Requête de validation (ingestion) :
DeviceProcessEvents | where FileName =~ "notepad.exe" | where ProcessCommandLine !contains "CreateProcessWithLogonW"
-
Exécution de la simulation
Prérequis : La vérification de la base de référence et de la télémetrie avant vol doit avoir réussi.
Justification : Cette section détaille l’exécution précise de la technique adverse (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT refléter directement les TTPs identifiés et viser à générer exactement la télémetrie attendue par la logique de détection. Des exemples abstraits ou sans rapport entraîneront une erreur de diagnostic.
-
Narratif et commandes de l’attaque : L’attaquant vise à exploiter la vulnérabilité LegacyHive pour escalader les privilèges à SYSTEM. Pour ce faire, ils utilisent un script qui appelle le
modèle d'API CreateProcessWithLogonW dans la ligne de commande.API Windows. Le but est de lancernotepad.exedans un état suspendu. La simulation utilise un wrapper PowerShell pour imiter le modèle d’argument de ligne de commande que la règle de détection recherche, ciblant spécifiquement la chaînemodèle d'API CreateProcessWithLogonW dans la ligne de commande.dans le contexte d’exécution denotepad.exe. -
Script de test de régression :
# Simulation de la tentative d'exploitation de LegacyHive via l'injection d'artefacts de ligne de commande # Remarque : Ce script simule le modèle de chaîne de ligne de commande pour les tests de détection. $targetProcess = "notepad.exe" $fakeArgument = "CreateProcessWithLogonW" Write-Host "[+] Démarrage de la simulation de tentative d'exploitation de LegacyHive..." # Nous utilisons cmd /c pour nous assurer que la chaîne de ligne de commande est explicitement transmise # et apparaît dans la télémetrie de création de processus. Start-Process "cmd.exe" -ArgumentList "/c $targetProcess $fakeArgument" Write-Host "[+] Commande de simulation envoyée. Vérifiez le SIEM pour notepad.exe avec CreateProcessWithLogonW dans la ligne de commande." -
Commandes de nettoyage :
# Mettre fin à tous les processus notepad ou cmd persistants créés par la simulation Stop-Process -Name "notepad" -ErrorAction SilentlyContinue Stop-Process -Name "cmd" -ErrorAction SilentlyContinue