Services Windows¶
Ce qu'enregistre la configuration des services¶
Les services Windows et les pilotes du noyau sont configurés sous chaque jeu de contrôles (control set) de SYSTEM. Les enregistrements nomment
l'exécutable/le pilote ou la DLL du service, le mode de démarrage, le type de service, le compte, le groupe d'ordre de chargement, le démarrage
différé, le comportement en cas d'erreur et les actions que Windows effectue après un échec.
Les attaquants créent ou modifient des services pour la persistance, l'élévation de privilèges, le chargement de pilotes et le déplacement latéral. Les logiciels légitimes utilisent exactement le même mécanisme ; les chemins, les comptes, la signature, le contexte de création et les preuves d'exécution sont donc déterminants.
Meilleure conclusion : le jeu de contrôles analysé configurait le service/pilote tel qu'indiqué. La configuration seule ne prouve pas que le service a démarré avec succès.
Emplacement¶
Collectez SYSTEM avec ses journaux de transactions. Des ID d'événements tels que System 7045 et Security 4697 peuvent
enregistrer l'installation ; les événements de contrôle des services et de processus peuvent étayer un démarrage/une exécution effectifs.
Précautions d'analyse¶
ImagePathpeut contenir des variables d'environnement, des guillemets, des arguments, des chemins de périphérique ou un chemin non entre guillemets comportant des espaces. Conservez-le tel quel avant de le normaliser.ServiceDllest essentiel pour les services hébergés parsvchost.exe;ImagePathseul peut ne nommer que l'hôte.StartType=automaticne prouve pas que le service a démarré ni qu'il est resté activé.ObjectNameest le compte configuré, pas nécessairement l'utilisateur qui a installé le service.- Les pilotes et les services en mode utilisateur utilisent des indicateurs
ServiceTypeet des conventions de chemin différents. - Les actions en cas d'échec peuvent exécuter une commande sous le compte du service après un échec ; il s'agit d'une surface de persistance facile à manquer.
- D'autres jeux de contrôles peuvent conserver une configuration antérieure ; utilisez
IsCurrentControlSet.
Analyser avec Juntei¶
Usage: juntei parse-registry services <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SYSTEM hives
-f, --file <FILE> Parse one SYSTEM hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Filtering:
--service <NAME> Only this service name
--all-control-sets Parse every ControlSet00N
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry services -f SYSTEM -o services.csv
juntei parse-registry services -f SYSTEM --all-control-sets -t jsonl \
| jq 'select(.FailureCommand != null or (.ImagePath? | test("temp|public"; "i")))'
Champs de sortie¶
| Champ | Interprétation |
|---|---|
Host, SourcePath |
Identité du système et ruche d'entrée. À conserver d'une collecte à l'autre. |
ControlSet, IsCurrentControlSet |
Jeu de contrôles source et indication que Select\Current le désigne ou non. Privilégiez le jeu courant pour toute affirmation sur l'état actif. |
ServiceName |
Nom de la clé de Registre/nom interne du service. Pivot solide vers les événements et les commandes du Service Control Manager. |
DisplayName, Description |
Texte destiné à l'utilisateur ; il peut s'agir de références à des ressources ou de texte contrôlé par l'attaquant. |
ImagePath |
Commande de l'exécutable/du pilote telle que configurée. Analysez les guillemets, les arguments, les variables d'environnement et les chemins de périphérique. |
ServiceDLL |
DLL chargée par un service hôte. Souvent la véritable charge utile des services à processus partagé. |
StartType, StartValue |
Mode de démarrage lisible/brut : boot (0), system (1), automatic (2), manual (3), disabled (4). |
DelayedAutostart |
Le service automatique démarre après la phase initiale du démarrage ; il permet tout de même la persistance. |
ServiceType, TypeValue |
Indicateurs décodés/bruts : pilote du noyau, pilote de système de fichiers, processus propre/partagé, service utilisateur, etc. |
ErrorControl |
Niveau de gestion des erreurs au démarrage du système/du service. Principalement un contexte opérationnel. |
ObjectName |
Compte de service configuré ou nom d'objet du pilote. Pas l'identité de l'installateur. |
Group |
Groupe d'ordre de chargement, particulièrement important pour les pilotes boot/system. |
FailureResetPeriod |
Nombre de secondes avant la remise à zéro du compteur d'échecs ; 4294967295 signifie jamais. |
FailureCommand |
Commande configurée pour une action d'échec run_command. Champ de persistance à forte valeur. |
FailureActions |
Liste complète des actions décodées (restart, reboot, run_command, none) et délais. |
FailureActionType, FailureActionDelayMs |
Première action, aplatie pour le filtrage ; examinez également la liste complète. |
FailureActionsRaw |
Octets d'origine lorsque le décodage est incomplet/endommagé. |
KeyLastWrittenUTC |
Dernière modification de la clé du service, pas nécessairement l'heure d'installation/de démarrage. |
TransactionLogStatus, LogsApplied |
Contexte de rejeu du Registre. |
Problems |
Incohérence de type, structure d'échec malformée ou champs manquants/illisibles. |
Stratégie d'investigation¶
- Examinez les chemins non standard, les répertoires accessibles en écriture, les comptes inhabituels, les horodatages de clé récents et les commandes d'échec.
- Développez les variables d'environnement selon la configuration de l'hôte concerné, et non celle de la machine de l'analyste.
- Calculez l'empreinte et vérifiez la signature de l'exécutable ou de la DLL effectifs s'ils ont été collectés.
- Corrélez le nom/chemin du service avec les événements 7045/4697, la création de processus, Prefetch,
$MFTet l'USN. - Comparez les jeux de contrôles courant et non courants pour repérer une persistance modifiée/supprimée.