Persistance
Services Windows
Fiche services Windows : valeurs de la clé Services (ImagePath, Start, Type, ServiceDll), événements 7045 et 4697, traces de PsExec et pièges.
- Emplacement
- SYSTEM\ControlSet00x\Services\<ServiceName>
- Prouve
- Un service ou pilote a été installé pour lancer un binaire, avec son compte et son mode de démarrage
- Horodatages
- LastWrite de la clé du service en FILETIME, UTC ; TimeCreated des événements System 7045/7036 et Security 4697 en EVTX, UTC
- Rétention
- Clé persistante jusqu'à suppression du service ; journal System circulaire ; 4697 seulement si audité ; les services type PsExec s'autosuppriment
- Accès
- Administrateur ; ruche SYSTEM verrouillée à chaud : reg save, VSS ou NTFS brut avec les fichiers .LOG ; export EVTX via wevtutil
- Preuve de
- PersistanceExécution
- Type
- Registre
- Windows
- XPVista / 78 / 8.11011
- Cible KAPE
- RegistryHivesSystemEventLogs
- Velociraptor
- Windows.Triage.Targets:RegistryHivesSystemEventLogs
Outils
Comparer tous les outilsPrésentation
Chaque service et chaque pilote noyau de Windows est enregistré par le Gestionnaire de contrôle des services (SCM) sous forme de sous-clé de Services dans la ruche SYSTEM. Cette sous-clé contient le binaire à lancer, le mode de démarrage et le compte d'exécution. Créer un service exige des droits d'administrateur, et un service à démarrage automatique tourne par défaut en SYSTEM. Les services sont donc un emplacement classique de persistance, et la création de service à distance (PsExec, Impacket, sc \\hôte create) une technique classique de mouvement latéral.
Les services laissent deux types de traces : la configuration dans le registre, qui montre ce qui est installé à l'instant T, et les journaux d'événements qui enregistrent les installations et les changements d'état.
Emplacement
| Source | Emplacement | Versions de Windows |
|---|---|---|
| Configuration du service | Ruche SYSTEM : ControlSet00x\Services\<NomService> (en direct : HKLM\SYSTEM\CurrentControlSet\Services) | Toutes |
| DLL hébergée par svchost | ...\Services\<NomService>\Parameters\ServiceDll (parfois directement sous la clé du service) | Toutes |
| Groupes svchost | Ruche SOFTWARE : Microsoft\Windows NT\CurrentVersion\Svchost | Toutes |
| Événement d'installation | System.evtx, événement 7045 du Service Control Manager | Vista et suivants |
| Événement d'installation (audit) | Security.evtx, événement 4697 | Windows 10 / Server 2016 et suivants, avec « Auditer l'extension système de sécurité » |
| Changements d'état | System.evtx, événements 7034, 7036, 7040 | Vista et suivants |
Une ruche hors ligne n'a pas de CurrentControlSet : lisez Select\Current pour savoir quel ControlSet00x était actif (jeu de contrôles). Les journaux de transactions .LOG1/.LOG2 de la ruche peuvent contenir des modifications récentes pas encore écrites dans la ruche.
Ce que l'artefact prouve
- Un service ou un pilote a été configuré pour lancer un binaire ou une ligne de commande précise, sous un compte donné, avec un mode de démarrage donné.
- Date d'installation et compte : le 7045 consigne le nom, le chemin de l'image, le type, le mode de démarrage et le compte ; le 4697 ajoute le SID et l'identifiant de session du compte qui l'a installé.
- Exécution : le 7036 montre que le service est passé à l'état « en cours d'exécution » ; le 7034 qu'il s'est arrêté de façon inattendue.
- Elle ne prouve pas qui a installé le service sans le 4697, et le registre seul ne prouve pas que le service a démarré.
Champs clés
| Valeur | Signification |
|---|---|
ImagePath | Binaire ou ligne de commande complète ; les pilotes utilisent \SystemRoot\... ou System32\drivers\... |
Start | 0 boot, 1 system, 2 automatique, 3 manuel (à la demande), 4 désactivé |
DelayedAutostart | 1 = automatique (début différé) |
Type | 0x1 pilote noyau, 0x2 pilote de système de fichiers, 0x10 processus propre, 0x20 processus partagé (svchost) |
ObjectName | Compte d'exécution (LocalSystem, NT AUTHORITY\LocalService, un utilisateur) |
DisplayName, Description | Texte libre, souvent copié de vrais services par les attaquants |
Parameters\ServiceDll | DLL chargée par svchost.exe pour les services en processus partagé |
FailureCommand | Commande lancée par le SCM en cas d'échec du service (action de récupération) |
Horodatages
| Horodatage | Positionné quand | Format | Pièges |
|---|---|---|---|
| LastWrite de la clé du service | Une valeur de la clé change | FILETIME, UTC | Reflète la dernière modification (mode de démarrage, chemin), pas forcément la création |
| TimeCreated du 7045 | Le SCM enregistre un nouveau service | EVTX, UTC | Ne décrit que la configuration à la création |
| TimeCreated du 4697 | Nouveau service installé, si l'audit est actif | EVTX, UTC | Les modifications ultérieures du chemin ou du compte ne sont pas journalisées |
| 7036 / 7034 / 7040 | Changement d'état ou de mode de démarrage | EVTX, UTC | Le 7036 est très bavard : filtrez par nom de service |
Rétention et effacement
- L'entrée de registre reste jusqu'à la suppression du service (
sc delete). Un service supprimé laisse son 7045 dans le journal System et parfois d'anciennes copies de la clé dans les ruches SYSTEM des clichés instantanés ou dans l'espace non alloué de la ruche. - Le journal System tourne selon sa taille ; sur un serveur chargé, les 7045 d'installations anciennes peuvent avoir disparu. L'effacement du journal System produit l'événement 104, celui du journal Security le 1102.
- Le 4697 n'est généré que si la sous-catégorie « Auditer l'extension système de sécurité » est activée.
- Des outils comme PsExec suppriment leur service après usage : le registre peut être propre alors que le 7045, le 7036 et le Prefetch du binaire déposé subsistent.
Collecte
- Cible KAPE :
RegistryHivesSystem(SYSTEM et SOFTWARE avec leurs journaux de transactions) etEventLogs. Il n'existe pas de cible dédiée aux services. - Velociraptor (
Windows.Triage.Targets) :RegistryHivesSystem,EventLogs. En direct :Windows.System.Services;Windows.EventLogs.ServiceCreationComspecrepère les 7045 dont le chemin contientCOMSPECoucmd.exe;Windows.Events.ServiceCreationsurveille les 7045 en temps réel. - Commandes natives :
reg save HKLM\SYSTEM E:\case\SYSTEM.hiv
wevtutil epl System E:\case\System.evtx
Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045} | Format-List TimeCreated, Message
Get-CimInstance Win32_Service | Select-Object Name, StartMode, StartName, PathName
Outils d'analyse
- Registry Explorer / RECmd (Eric Zimmerman) : navigation dans
Services; les fichiers batch communautaires exportent la configuration des services en CSV. - RegRipper : plugins
services,svcetsvcdll(ruche SYSTEM),svc_tlnpour la chronologie. - EvtxECmd (Eric Zimmerman) : convertit en CSV les 7045, 7036, 7034, 7040 et 4697.
- Velociraptor :
Windows.System.Services, avec calcul de hash et vérification Authenticode en option. - Autoruns (Sysinternals, gratuit) : onglets Services et Drivers, y compris sur un répertoire Windows hors ligne.
- Plaso : plugin de registre
windows_services.
Conseils d'investigation
- Cherchez dans les 7045 les chemins situés dans
\Users\,\ProgramData\,\Windows\Temp\ouADMIN$, les lignes de commandecmd.exe /cou%COMSPEC%(typiques des outils façon smbexec) et les noms de service courts et aléatoires. PSEXESVCdans un 7045 ou une clé de service désigne PsExec de Sysinternals ; cherchez le PrefetchPSEXESVC.EXEet une ouverture de session réseau juste avant.- Pour les services
svchost, la vraie charge estServiceDll, pasImagePath: vérifiez le chemin et la signature de la DLL. - Un service de
Type0x1 avecStartà 0 ou 1 est un pilote chargé au démarrage ; un pilote inattendu peut être un rootkit ou un pilote vulnérable. - Comparez les 7045 au registre actuel : un service présent dans le journal mais absent de la ruche a été retiré après usage.
- Rattachez le binaire à Amcache (SHA-1) et cherchez une persistance parallèle dans les tâches planifiées et les clés Run.
Artefacts liés
- 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.
- Clés Run et dossiers DémarrageFiche clés Run et dossiers Démarrage : chemins Run, RunOnce, Wow6432Node et Policies, octets StartupApproved activé/désactivé, horodatages.
- Journaux d'événements Windows (EVTX)Fiche des journaux d'événements Windows : emplacements EVTX, ID indispensables (connexions, processus, services, effacement), rétention, audit et outils.
- 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.
- Amcache.hveFiche Amcache.hve : clés d'inventaire des fichiers et programmes, SHA-1, métadonnées PE, horodatages, et pourquoi une entrée ne prouve pas l'exécution.
- Ruches du registreFiche ruches du registre : SYSTEM, SOFTWARE, SAM, SECURITY, NTUSER.DAT, UsrClass.dat, journaux de transactions, RegBack, LastWrite et collecte.
- Outils d'accès distant (RMM)Fiche RMM et outils d'accès distant : AnyDesk, TeamViewer, ScreenConnect, leurs journaux, IDs de connexion, IP et horodatages, et comment traquer l'abus.
- 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.
- Programmes installés (clés Uninstall, MSI, AppX)Fiche programmes installés : clés Uninstall, événements MSI 1033/11707, MSI en cache, paquets AppX, journaux winget et Amcache pour dater les installations.
- Pilotes noyau (.sys, services de pilote, BYOVD)Fiche pilotes noyau : services de pilote (Type 1/2), événement 7045, DriverStore, setupapi.dev.log, Amcache et journaux CodeIntegrity contre BYOVD et rootkits.
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.
- Mouvement latéralDéplacement d'un attaquant d'un hôte compromis vers d'autres machines du réseau, via RDP, SMB, PsExec, WMI, WinRM ou tâches et services distants.
- ControlSet et CurrentControlSetLes jeux de configuration numérotés de la ruche SYSTEM ; CurrentControlSet est un lien d'exécution absent d'une ruche analysée hors ligne.
- 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.
- ID d'événement WindowsLe numéro qui identifie un type d'événement au sein d'un fournisseur donné ; il n'a de sens qu'associé à ce fournisseur et à son canal.