Aller au contenu

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
Type
Registre
Windows
XPVista / 78 / 8.11011
Cible KAPE
RegistryHivesSystemEventLogs
Velociraptor
Windows.Triage.Targets:RegistryHivesSystemEventLogs

Pré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

SourceEmplacementVersions de Windows
Configuration du serviceRuche 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 svchostRuche SOFTWARE : Microsoft\Windows NT\CurrentVersion\SvchostToutes
Événement d'installationSystem.evtx, événement 7045 du Service Control ManagerVista et suivants
Événement d'installation (audit)Security.evtx, événement 4697Windows 10 / Server 2016 et suivants, avec « Auditer l'extension système de sécurité »
Changements d'étatSystem.evtx, événements 7034, 7036, 7040Vista 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

ValeurSignification
ImagePathBinaire ou ligne de commande complète ; les pilotes utilisent \SystemRoot\... ou System32\drivers\...
Start0 boot, 1 system, 2 automatique, 3 manuel (à la demande), 4 désactivé
DelayedAutostart1 = automatique (début différé)
Type0x1 pilote noyau, 0x2 pilote de système de fichiers, 0x10 processus propre, 0x20 processus partagé (svchost)
ObjectNameCompte d'exécution (LocalSystem, NT AUTHORITY\LocalService, un utilisateur)
DisplayName, DescriptionTexte libre, souvent copié de vrais services par les attaquants
Parameters\ServiceDllDLL chargée par svchost.exe pour les services en processus partagé
FailureCommandCommande lancée par le SCM en cas d'échec du service (action de récupération)

Horodatages

HorodatagePositionné quandFormatPièges
LastWrite de la clé du serviceUne valeur de la clé changeFILETIME, UTCReflète la dernière modification (mode de démarrage, chemin), pas forcément la création
TimeCreated du 7045Le SCM enregistre un nouveau serviceEVTX, UTCNe décrit que la configuration à la création
TimeCreated du 4697Nouveau service installé, si l'audit est actifEVTX, UTCLes modifications ultérieures du chemin ou du compte ne sont pas journalisées
7036 / 7034 / 7040Changement d'état ou de mode de démarrageEVTX, UTCLe 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) et EventLogs. Il n'existe pas de cible dédiée aux services.
  • Velociraptor (Windows.Triage.Targets) : RegistryHivesSystem, EventLogs. En direct : Windows.System.Services ; Windows.EventLogs.ServiceCreationComspec repère les 7045 dont le chemin contient COMSPEC ou cmd.exe ; Windows.Events.ServiceCreation surveille 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, svc et svcdll (ruche SYSTEM), svc_tln pour 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\ ou ADMIN$, les lignes de commande cmd.exe /c ou %COMSPEC% (typiques des outils façon smbexec) et les noms de service courts et aléatoires.
  • PSEXESVC dans un 7045 ou une clé de service désigne PsExec de Sysinternals ; cherchez le Prefetch PSEXESVC.EXE et une ouverture de session réseau juste avant.
  • Pour les services svchost, la vraie charge est ServiceDll, pas ImagePath : vérifiez le chemin et la signature de la DLL.
  • Un service de Type 0x1 avec Start à 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

Termes du glossaire

Guides

Tous les artefacts sur une page : aide-mémoire