Elouan

La persistance sous Windows

Comment un programme malveillant survit à un redémarrage : clés Run, services, tâches planifiées, WMI… et comment retrouver chacun de ces mécanismes.

Elouan

Série Systèmes Windows et Linux · article 4 sur 6
  1. Les processus Windows et leur arborescence normale
  2. Comptes, SID et droits sous Windows
  3. Lire les journaux Windows
  4. La persistance sous Windows
  5. Linux : utilisateurs, permissions et processus
  6. Linux : journaux et persistance

Un attaquant qui a réussi à exécuter du code sur une machine n’a pas envie de tout recommencer au prochain redémarrage. Il installe donc un mécanisme de persistance : quelque chose qui relancera son programme automatiquement. Windows offre des dizaines d’endroits pour ça, mais une poignée d’entre eux couvrent la grande majorité des cas réels.

Ce qu’on appelle persistance

Dans MITRE ATT&CK, la persistance est une tactique à part entière (TA0003) : l’ensemble des techniques qui permettent de garder un accès malgré un redémarrage, une fermeture de session ou un changement de mot de passe.

Elle se cache presque toujours dans un endroit que Windows consulte de lui-même : au démarrage, à l’ouverture de session, à heure fixe, ou quand un événement se produit.

Les emplacements classiques

MécanismeOùDroits nécessairesTechnique ATT&CK
Clés Run / RunOnceHKCU\…\CurrentVersion\Run, HKLM\…\RunUtilisateur (HKCU), admin (HKLM)T1547.001
Dossier Démarrage%APPDATA%\…\Startup, %ProgramData%\…\StartUpUtilisateur / adminT1547.001
ServiceHKLM\SYSTEM\CurrentControlSet\ServicesAdminT1543.003
Tâche planifiéeC:\Windows\System32\TasksUtilisateur ou admin selon la tâcheT1053.005
Abonnement WMIDépôt WMIAdminT1546.003
Winlogon (Userinit, Shell)HKLM\…\WinlogonAdminT1547.004
Image File Execution OptionsHKLM\…\Image File Execution OptionsAdminT1546.012
Fonctions d’accessibilitésethc.exe, utilman.exeAdminT1546.008
Détournement COMHKCU\Software\Classes\CLSIDUtilisateurT1546.015
Création de compteBase SAM ou annuaireAdminT1136

Les clés Run

C’est la méthode la plus simple et la plus répandue : une valeur dans la clé Run contient la commande à lancer à chaque ouverture de session.

HKCU\Software\Microsoft\Windows\CurrentVersion\Run
    OneDrive      REG_SZ   "C:\Users\alice\AppData\Local\Microsoft\OneDrive\OneDrive.exe" /background
    WinUpdate     REG_SZ   "C:\Users\alice\AppData\Roaming\winupd.exe"      ← suspect

HKCU ou HKLM, ça ne raconte pas la même histoire

Écrire dans HKCU ne demande aucun droit particulier : n’importe quel malware lancé par l’utilisateur peut le faire. Écrire dans HKLM demande des droits administrateur : si la persistance est là, l’attaquant a déjà élevé ses privilèges.

Les services

Un service démarre avec la machine, souvent en SYSTEM, sans que personne ne se connecte. Les attaquants en créent pour la persistance, mais aussi pour exécuter du code à distance : c’est le principe de PsExec et de nombreux outils de mouvement latéral.

Ce qu’on voit : un événement 7045 dans le journal Système, avec le nom du service et le chemin de l’exécutable. Un nom aléatoire (ABCDEFGH), un chemin dans C:\Windows\Temp ou une ligne de commande avec cmd.exe /c ou powershell -enc sont des signaux forts.

Les tâches planifiées

Une tâche planifiée lance une commande à heure fixe, au démarrage, à l’ouverture de session ou sur un événement. Elle peut tourner en SYSTEM.

schtasks /create /tn "MicrosoftEdgeUpdateCore" /tr "C:\ProgramData\upd.exe" /sc onlogon /ru SYSTEM

Ce qu’on voit : l’événement 4698 (journal Sécurité) et 106 (journal du planificateur), et un fichier XML dans C:\Windows\System32\Tasks. Les attaquants choisissent souvent un nom qui ressemble à une tâche légitime.

Les abonnements WMI

Plus discrets, ils associent un événement déclencheur et une action dans le dépôt WMI, et s’exécutent en SYSTEM. Ils ne figurent dans aucun des emplacements « classiques », ce qui les rend faciles à rater.

# Lister les abonnements WMI permanents
Get-CimInstance -Namespace root\subscription -ClassName __EventFilter
Get-CimInstance -Namespace root\subscription -ClassName CommandLineEventConsumer
Get-CimInstance -Namespace root\subscription -ClassName __FilterToConsumerBinding

Ce qu’on voit : les événements Sysmon 19, 20 et 21.

Les portes dérobées de l’écran de connexion

Remplacer sethc.exe (les touches rémanentes) ou utilman.exe (les options d’ergonomie) par cmd.exe donne une invite de commandes SYSTEM depuis l’écran de connexion, sans mot de passe. On obtient le même résultat sans toucher au fichier, en ajoutant une valeur Debugger dans la clé Image File Execution Options du programme.

Retrouver la persistance

La méthode

  1. Lancer Autoruns (Sysinternals, et à mon avis l’outil le plus pratique pour ça), qui liste presque tous les emplacements de démarrage automatique. Masquer les entrées signées par Microsoft pour réduire le bruit.
  2. Chercher les chemins inhabituels (AppData, Temp, ProgramData, Public), les noms qui imitent des éditeurs connus, les fichiers non signés.
  3. Comparer avec une machine saine du même modèle, ou avec un export Autoruns fait avant l’incident.
  4. Croiser avec les journaux : 7045, 4697, 4698, 4720, Sysmon 12-14, 19-21, et la date de création des fichiers trouvés.

La persistance qui ne laisse pas de fichier

Il existe une persistance plus simple que toutes les autres : des identifiants valides. Un attaquant qui a volé le mot de passe d’un compte VPN, d’un administrateur ou d’un compte de service peut revenir quand il veut, sans rien laisser sur les machines. C’est pour ça qu’une remédiation sérieuse ne se limite pas à nettoyer les postes : elle inclut la réinitialisation des mots de passe concernés, la révocation des sessions, et, dans le cas d’un domaine compromis, des opérations plus lourdes (voir la série Active Directory).

Les deux articles suivants passent du côté de Linux.

L'essentiel

  • La persistance, c'est tout mécanisme qui relance le code d'un attaquant après un redémarrage, une fermeture de session ou un changement de mot de passe (tactique TA0003 de MITRE ATT&CK).
  • Les grands classiques : clés Run / RunOnce du registre, dossier Démarrage, services, tâches planifiées, abonnements WMI, création de comptes.
  • Clés Run : HKCU\Software\Microsoft\Windows\CurrentVersion\Run (utilisateur) et HKLM\…\Run (toute la machine, droits administrateur).
  • Service installé = événement 7045 (System) ou 4697 (Security). Tâche planifiée = 4698 (Security) ou 106 (TaskScheduler).
  • Autoruns (Sysinternals) liste presque tous les emplacements de démarrage automatique. On compare toujours avec une machine saine ou une référence.
  • Un attaquant qui a volé des identifiants valides n'a parfois besoin d'aucune persistance technique : c'est pour ça qu'on réinitialise les mots de passe après un incident.

Idées reçues

On a supprimé l'exécutable malveillant et redémarré la machine. L'incident est-il clos ?

L'erreur courante. Répondre oui.

En réalité. Pas forcément. Il faut vérifier tous les mécanismes de persistance (un autre fichier, une tâche planifiée qui le retélécharge, un service, un abonnement WMI), les comptes créés ou modifiés, et les identifiants volés. Il faut aussi comprendre comment l'attaquant est entré, sinon il reviendra par le même chemin.

Quelle différence entre une persistance dans HKCU et dans HKLM ?

L'erreur courante. Dire que c'est la même chose.

En réalité. HKCU ne concerne que l'utilisateur courant et ne demande aucun droit administrateur : le code se relance à chaque ouverture de session de cet utilisateur. HKLM concerne toute la machine et nécessite des droits administrateur. Une persistance dans HKLM indique donc que l'attaquant a déjà élevé ses privilèges.

Pourquoi les abonnements WMI sont-ils appréciés des attaquants ?

L'erreur courante. Ne pas connaître le mécanisme.

En réalité. Un abonnement WMI associe un filtre (un événement, par exemple « le système a démarré depuis 60 secondes »), un consommateur (l'action, par exemple lancer une commande) et une liaison entre les deux. Il est stocké dans le dépôt WMI, pas dans les emplacements habituels, et s'exécute en SYSTEM. Il est moins connu et moins surveillé. Sysmon le trace avec les événements 19, 20 et 21.

Que se passe-t-il si sethc.exe est remplacé par cmd.exe ?

L'erreur courante. Ne pas voir le rapport avec la persistance.

En réalité. C'est la porte dérobée des touches rémanentes : en appuyant cinq fois sur Maj à l'écran de connexion, on obtient une invite de commandes en SYSTEM, sans mot de passe (technique T1546.008, Accessibility Features). Même principe avec utilman.exe. On peut aussi le faire sans remplacer le fichier, avec la clé Image File Execution Options.

Tester ses connaissances

Références

  • Applied Incident ResponseSteve Anson · Wiley
  • Troubleshooting with the Windows Sysinternals Tools (2e éd.)Mark Russinovich, Aaron Margosis · Microsoft Press
  • Windows Internals, Part 1 (7e éd.)Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich, David A. Solomon · Microsoft Press

Textes de référence en ligne