Persistance
Clés Run et dossiers Démarrage
Fiche clés Run et dossiers Démarrage : chemins Run, RunOnce, Wow6432Node et Policies, octets StartupApproved activé/désactivé, horodatages.
- Emplacement
- NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Run
- Prouve
- Un programme a été configuré pour démarrer à l'ouverture de session, d'un ou de tous les utilisateurs
- Horodatages
- LastWrite des clés Run et heure de désactivation StartupApproved en FILETIME, UTC ; dates $SI/$FN des fichiers du dossier Startup, UTC
- Rétention
- Entrées persistantes jusqu'à suppression, sans événement par défaut ; valeurs RunOnce supprimées à l'exécution ; anciennes valeurs dans logs de ruche et VSS
- Accès
- NTUSER.DAT et SOFTWARE verrouillés à chaud : collecte en NTFS brut ou VSS, ou reg save ; dossiers Startup copiables directement
- Preuve de
- Persistance
- Type
- Registre
- Windows
- XPVista / 78 / 8.11011
- Cible KAPE
- RegistryHivesUserRegistryHivesSystemStartupFolders
- Velociraptor
- Windows.Triage.Targets:RegistryHivesUserRegistryHivesSystemStartupFolders
Outils
Comparer tous les outilsPrésentation
Les clés Run et les dossiers Démarrage sont les emplacements de démarrage automatique les plus anciens et les plus courants de Windows. Chaque ligne de commande placée sous une clé Run, et chaque fichier déposé dans un dossier Démarrage, est lancé à l'ouverture de session d'un utilisateur. Les emplacements propres à l'utilisateur ne demandent aucun droit d'administration : c'est le mécanisme de persistance préféré des malwares courants, et un gain rapide lors du tri d'une machine.
À partir de Windows 8, les clés StartupApproved indiquent si chaque entrée est activée ou désactivée, selon le réglage fait dans l'onglet Démarrage du Gestionnaire des tâches (et dans les Paramètres sous Windows 10/11).
Emplacement
| Portée | Emplacement | Remarques |
|---|---|---|
| Utilisateur courant | NTUSER.DAT : Software\Microsoft\Windows\CurrentVersion\Run et \RunOnce | S'exécute à l'ouverture de session de cet utilisateur |
| Tous les utilisateurs | SOFTWARE : Microsoft\Windows\CurrentVersion\Run et \RunOnce | Le RunOnce de HKLM ne s'exécute qu'à l'ouverture de session d'un administrateur |
| Entrées 32 bits sur Windows 64 bits | SOFTWARE : WOW6432Node\Microsoft\Windows\CurrentVersion\Run et \RunOnce | Écrites par les installeurs 32 bits |
| Par stratégie | Microsoft\Windows\CurrentVersion\Policies\Explorer\Run (SOFTWARE et NTUSER.DAT) | Normalement renseigné par les stratégies de groupe |
| État activé/désactivé (8 et suivants) | Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run, \Run32, \StartupFolder (SOFTWARE et NTUSER.DAT) | Une valeur par nom d'entrée |
| Dossier Démarrage de l'utilisateur (Vista et suivants) | C:\Users\<utilisateur>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup | |
| Dossier Démarrage commun (Vista et suivants) | C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp | |
| Dossiers Démarrage (XP) | C:\Documents and Settings\<utilisateur>\Start Menu\Programs\Startup et ...\All Users\Start Menu\Programs\Startup |
L'emplacement des dossiers eux-mêmes est défini par Shell Folders / User Shell Folders sous Software\Microsoft\Windows\CurrentVersion\Explorer (valeurs Startup et Common Startup). Les rediriger constitue en soi une technique de persistance.
Ce que l'artefact prouve
- Un programme a été configuré pour démarrer à l'ouverture de session, avec sa ligne de commande complète (registre) ou sous forme de fichier ou de raccourci dans un dossier Démarrage.
- La portée : une entrée de NTUSER.DAT appartient à cet utilisateur ; une entrée de SOFTWARE s'applique à tous.
- Activée ou non : StartupApproved indique si Windows lancera réellement l'entrée.
- Elle ne prouve pas que le programme s'est exécuté. Confirmez avec le Prefetch, BAM ou les événements de processus.
Champs clés
| Champ | Signification |
|---|---|
| Nom de valeur (Run / RunOnce) | Libellé libre, imitant souvent un éditeur |
| Données de la valeur | Ligne de commande (260 caractères maximum), arguments compris |
Préfixe ! d'un nom de valeur RunOnce | Supprimer la valeur seulement après l'exécution de la commande |
Préfixe * d'un nom de valeur RunOnce | Exécuter même en mode sans échec |
| Données StartupApproved, premier octet | 0x02 activé, 0x03 désactivé |
| Données StartupApproved, octets 4 à 11 | FILETIME de la désactivation (zéro si l'entrée est activée) |
| Fichier du dossier Démarrage | .lnk, .bat, .vbs, .exe, .url ou tout fichier exécutable |
Horodatages
| Horodatage | Positionné quand | Format | Pièges |
|---|---|---|---|
| LastWrite de la clé Run | Une valeur de la clé est ajoutée, modifiée ou supprimée | FILETIME, UTC | Concerne la clé, pas une valeur précise ; les installeurs légitimes la modifient souvent |
| Date de désactivation StartupApproved | Entrée désactivée dans le Gestionnaire des tâches ou les Paramètres | FILETIME, UTC, dans les données de la valeur | Remise à zéro quand l'entrée est réactivée |
| Horodatages $SI / $FN d'un fichier du dossier Démarrage | Création, modification du fichier | NTFS, UTC | $SI peut être falsifié (timestomping) ; comparez avec $FN dans la $MFT |
| Horodatages internes d'un LNK | Dates de la cible à la création du raccourci | FILETIME, UTC | Décrivent la cible, pas le raccourci ; voir fichiers LNK |
Rétention et effacement
- Les entrées Run restent jusqu'à leur suppression. Une suppression ne génère aucun événement par défaut ; cherchez les anciennes valeurs dans les journaux de transactions de la ruche, les clichés instantanés et l'espace non alloué de la ruche.
- Windows supprime les valeurs
RunOncejuste avant (ou, avec!, juste après) leur exécution : une charge à usage unique peut ne laisser que le LastWrite de la clé et des traces d'exécution. - Supprimer une valeur de
Runne supprime pas l'entrée StartupApproved correspondante ; une valeur StartupApproved orpheline peut trahir une entrée Run retirée. - Leurre possible : une entrée ajoutée à
Runmais marquée désactivée dans StartupApproved ressemble à une persistance mais ne s'exécute jamais. Vérifiez toujours les deux.
Collecte
- Cible KAPE :
RegistryHivesUser(NTUSER.DAT),RegistryHivesSystem(SOFTWARE) etStartupFolders. - Velociraptor (
Windows.Triage.Targets) :RegistryHivesUser,RegistryHivesSystem,StartupFolders. En direct :Windows.Sys.StartupItemsréunit clés Run, StartupApproved et dossiers Démarrage. - Commandes natives : le NTUSER.DAT chargé est verrouillé ; utilisez
reg savepour l'utilisateur connecté ou récupérez-le depuis un cliché instantané.
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run
reg query HKLM\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved /s
dir /a /t:c "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup" "%ProgramData%\Microsoft\Windows\Start Menu\Programs\StartUp"
Outils d'analyse
- Registry Explorer / RECmd (Eric Zimmerman) : navigation dans les clés et export via les fichiers batch communautaires.
- RegRipper : plugin
run(SOFTWARE et NTUSER.DAT, chemins StartupApproved compris) etrunonceex. - Autoruns (Sysinternals, gratuit) : l'onglet Logon liste clés Run et dossiers Démarrage, en direct ou sur un répertoire Windows hors ligne.
- Velociraptor :
Windows.Sys.StartupItems. - LECmd (Eric Zimmerman) : analyse les
.lnktrouvés dans les dossiers Démarrage. - Plaso : plugin de registre
windows_run.
Conseils d'investigation
- Signalez les lignes de commande qui pointent vers
\AppData\,\Temp\,\Users\Public\, ou qui utilisentpowershell,mshta,rundll32,regsvr32,wscriptou des arguments encodés. - Analysez le NTUSER.DAT de chaque utilisateur, y compris les comptes de service et les anciens comptes : la persistance est souvent posée dans un profil peu utilisé.
- Contrôlez StartupApproved pour chaque valeur Run : une entrée désactivée ne s'est pas lancée aux dernières ouvertures de session, et son FILETIME indique quand elle a été désactivée.
- Pour les raccourcis du dossier Démarrage, résolvez la cible et les arguments du
.lnket vérifiez l'existence de la cible dans la $MFT. - Corrélez le LastWrite de la clé Run avec le Prefetch et les heures d'ouverture de session de l'utilisateur pour confirmer le lancement de la charge.
- Poursuivez avec les démarrages automatiques moins courants : Winlogon et IFEO, services et tâches planifiées.
Artefacts liés
- Services WindowsFiche services Windows : valeurs de la clé Services (ImagePath, Start, Type, ServiceDll), événements 7045 et 4697, traces de PsExec et pièges.
- Tâches planifiéesFiche tâches planifiées : XML et .job, clés TaskCache, horodatages DynamicInfo, tâches masquées, événements TaskScheduler et 4698.
- Persistance IFEO et WinlogonFiche IFEO et Winlogon : détournement par Debugger, GlobalFlag et SilentProcessExit, porte dérobée sticky keys, Userinit/Shell, Notify, AppInit_DLLs.
- Fichiers de raccourci LNKFiche LNK : raccourcis du dossier Recent, première et dernière ouverture, horodatages de la cible, numéro de série, partage réseau et adresse MAC.
- Ruches du registreFiche ruches du registre : SYSTEM, SOFTWARE, SAM, SECURITY, NTUSER.DAT, UsrClass.dat, journaux de transactions, RegBack, LastWrite et collecte.
- Fichiers Prefetch (.pf)Fiche Prefetch Windows : emplacement des .pf par version, nombre d'exécutions, huit dernières dates, fichiers référencés, rétention et analyse.
- Artefacts de stratégie de groupeFiche stratégie de groupe : SYSVOL, Registry.pol, mots de passe GPP, historique côté client et journaux, et comment les attaquants détournent les GPO.
Termes du glossaire
- PersistanceMécanismes permettant à un malware ou à un attaquant de survivre aux redémarrages : clés Run, services, tâches planifiées, abonnements WMI.
- NTUSER.DATLa ruche du Registre propre à chaque utilisateur, stockée dans son profil et chargée comme HKEY_CURRENT_USER, riche en traces d'activité.
- LastWrite d'une clé de RegistreL'unique FILETIME stocké dans chaque clé de Registre, qui indique en UTC la dernière modification de la clé ou de l'une de ses valeurs.
- FILETIMELe format d'horodatage Windows sur 64 bits qui compte les intervalles de 100 nanosecondes depuis le 1er janvier 1601 UTC.