Artéfacts Windows · Leçon 2 sur 9
Système et comptes : version du système d’exploitation, fuseau horaire, utilisateurs et SID
13 min de lecture
Avant d’interpréter l’activité des utilisateurs sur un ordinateur Windows, vous devez connaître ses caractéristiques de base : son nom, la version et le numéro de build de Windows qu’il exécute, le fuseau horaire configuré et les comptes existants. Ces réponses proviennent des ruches SYSTEM, SOFTWARE et SAM ainsi que de la clé ProfileList, et elles fournissent le contexte de toutes les constatations ultérieures. Cette leçon indique où se trouve chaque valeur sous Windows 10 et 11, comment elle est encodée et comment relier un identificateur de sécurité (SID) à un nom de compte et à un dossier de profil.
Où se trouvent les valeurs
Dans une collecte de triage, les ruches sont des fichiers situés sous C\Windows\System32\config\ (SYSTEM, SOFTWARE, SAM, SECURITY), chacun accompagné de ses journaux de transactions .LOG1 et .LOG2. Rejouez les journaux avant de lire une ruche dont des modifications sont en attente d’écriture (leçon 2.1). Les chemins ci-dessous sont relatifs à la racine de chaque ruche.
CurrentControlSet n’existe pas dans une ruche SYSTEM hors ligne : il s’agit d’un lien que Windows crée au démarrage. Lisez la valeur Current (de type REG_DWORD) dans SYSTEM\Select : si elle vaut 1, le jeu de contrôle actif est ControlSet001 ; si elle vaut 2, il s’agit de ControlSet002. Cette leçon utilise ControlSet001 ; remplacez-le par le jeu désigné par Current.
| Information | Clé | Valeur(s) |
|---|---|---|
| Nom de l’ordinateur | SYSTEM\ControlSet001\Control\ComputerName\ComputerName | ComputerName |
| Fuseau horaire | SYSTEM\ControlSet001\Control\TimeZoneInformation | TimeZoneKeyName, Bias, ActiveTimeBias, DaylightBias |
| Dernier arrêt normal | SYSTEM\ControlSet001\Control\Windows | ShutdownTime |
| Version de Windows | SOFTWARE\Microsoft\Windows NT\CurrentVersion | ProductName, EditionID, DisplayVersion, CurrentBuild, UBR, InstallDate, InstallTime |
| Comptes locaux | SAM\Domains\Account\Users | F, V, sous-clé Names |
| Profils | SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\<SID> | ProfileImagePath |
Fuseau horaire : la première étape de tout examen
Les horodatages NTFS, les heures LastWrite du registre et les enregistrements des journaux d’événements sont stockés en UTC, mais certains artefacts enregistrent l’heure locale, par exemple les dates des profils réseau (ci-dessous) et plusieurs journaux en texte brut. Les outils affichent également les heures dans le fuseau pour lequel ils sont configurés. Tant que vous ne connaissez pas le fuseau horaire du système, vous ne pouvez pas convertir les valeurs locales en UTC ni vérifier que la sortie d’un outil est réellement en UTC. Déterminez-le en premier et consignez-le dans vos notes.
La clé TimeZoneInformation contient :
TimeZoneKeyName: l’identifiant du fuseau, tel queE. South America Standard Time(Brasília) ouW. Europe Standard Time.Bias: le décalage standard en minutes, de type REG_DWORD.DaylightBias: le décalage supplémentaire appliqué pendant l’heure d’été, généralement −60.StandardBiasvaut généralement 0.ActiveTimeBias: le décalage en vigueur lorsque le système a écrit la clé pour la dernière fois, y compris tout ajustement lié à l’heure d’été.
La convention de signe est l’inverse de la notation habituelle « UTC+1 » : UTC = heure locale + biais. Un fuseau en retard de trois heures sur UTC a un biais de 180 ; un fuseau en avance d’une heure a un biais de −60, qu’un REG_DWORD stocke en complément à deux sous la forme 0xFFFFFFC4. En été, l’Europe centrale a un ActiveTimeBias de −120 (0xFFFFFF88). Certains outils affichent la valeur signée, mais Regedit et les vues hexadécimales affichent le nombre brut sur 32 bits, que vous devez interpréter vous-même.
ActiveTimeBias ne décrit qu’un instant donné. Dans un fuseau qui applique l’heure d’été, un événement survenu pendant l’autre saison nécessite l’autre décalage : appliquez donc les règles du fuseau à chaque date plutôt qu’un même biais à toutes les dates. N’oubliez pas non plus qu’un utilisateur peut modifier le fuseau horaire ; l’heure LastWrite de la clé indique quand elle a été écrite pour la dernière fois.
Nom de l’ordinateur et dernier arrêt
ComputerName est une valeur REG_SZ telle que DESKTOP-7K2QF4M (un nom généré automatiquement) ou un nom choisi par l’utilisateur ou l’organisation. Elle identifie l’hôte dans les journaux d’événements, les journaux réseau et les artefacts d’autres machines.
ShutdownTime est une valeur REG_BINARY de 8 octets contenant un FILETIME (intervalles de 100 nanosecondes depuis 1601-01-01 UTC). Windows l’écrit lors d’un arrêt normal ; après un plantage ou une coupure d’alimentation, la valeur indique toujours l’arrêt normal précédent. Comparez-la aux journaux d’événements (leçon 2.7) avant de vous y fier.
Identifier la version de Windows
SOFTWARE\Microsoft\Windows NT\CurrentVersion décrit le système d’exploitation installé :
| Valeur | Type | Exemple | Signification |
|---|---|---|---|
ProductName | REG_SZ | Windows 10 Pro | Nom commercial (voir le piège ci-dessous) |
EditionID | REG_SZ | Professional | Édition ; l’édition Famille correspond à Core |
DisplayVersion | REG_SZ | 23H2 | Mise à jour de fonctionnalités ; les anciens builds utilisent ReleaseId |
CurrentBuild, CurrentBuildNumber | REG_SZ | 22631 | Numéro de build du système d’exploitation |
UBR | REG_DWORD | 4317 | Révision du build de mise à jour (la mise à jour cumulative) |
InstallDate | REG_DWORD | 0x68B6EBA4 | Secondes depuis 1970-01-01 UTC |
InstallTime | REG_QWORD | FILETIME | Même instant au format FILETIME |
Le numéro de build complet est CurrentBuild.UBR, ici 22631.4317.
Le piège : sous Windows 11, ProductName indique toujours « Windows 10 Pro », « Windows 10 Enterprise », etc. Identifiez Windows 11 grâce à un CurrentBuild égal ou supérieur à 22000 (22000 correspond à 21H2, 22621 à 22H2, 22631 à 23H2, 26100 à 24H2 et 26200 à 25H2). Les numéros de build de Windows 10 sont inférieurs à 22000 ; 22H2 correspond à 19045.
InstallDate et InstallTime reflètent généralement la dernière mise à jour de fonctionnalités ou mise à niveau sur place, et non l’installation d’origine, car une mise à niveau réinstalle le système d’exploitation et réécrit ces valeurs. InstallDate 0x68B6EBA4 = 1 756 818 340 secondes = 2025-09-02T13:05:40Z peut simplement correspondre à la date de la dernière mise à niveau sur place. Windows conserve des copies des valeurs antérieures dans des sous-clés de SYSTEM\Setup nommées Source OS (Updated on <date>) ; vérifiez-les avant d’affirmer quand Windows a été installé pour la première fois.
Le contexte réseau en bref
SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\{GUID} contient une sous-clé par interface réseau. Pour les interfaces DHCP, elle enregistre DhcpIPAddress, DhcpSubnetMask, DhcpServer, DhcpDefaultGateway et DhcpDomain, ainsi que LeaseObtainedTime et LeaseTerminatesTime sous forme de valeurs REG_DWORD exprimant des secondes depuis l’époque Unix (UTC). Les interfaces statiques utilisent IPAddress à la place. Il s’agit des dernières valeurs enregistrées, et non d’un historique.
SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\{GUID} répertorie les réseaux auxquels l’ordinateur s’est connecté : ProfileName (souvent le SSID Wi-Fi), DateCreated (première connexion) et DateLastConnected. Les dates sont des structures SYSTEMTIME de 16 octets, composées de huit champs de 16 bits en petit-boutiste (année, mois, jour de la semaine avec dimanche = 0, jour, heure, minute, seconde, millisecondes), enregistrées en heure locale. Le fuseau horaire est nécessaire pour les convertir en UTC.
Comptes utilisateurs et SID
Windows identifie chaque compte par un SID, et non par son nom. Le SID d’un compte local ou de domaine a la forme S-1-5-21-<three sub-authorities>-<RID> :
S: préfixe de la chaîne SID ;1: révision.5: autorité d’identification, SECURITY_NT_AUTHORITY.21: première sous-autorité, indiquant un SID de machine ou de domaine.- Trois sous-autorités de 32 bits qui identifient la machine (pour les comptes locaux) ou le domaine (pour les comptes de domaine). Elles sont générées à l’installation ; tous les comptes locaux d’un même ordinateur les partagent donc.
- L’identificateur relatif (RID), la dernière sous-autorité, qui identifie le compte au sein de cette machine ou de ce domaine.
Sous forme binaire, un SID comprend un octet de révision, un octet indiquant le nombre de sous-autorités, une autorité de 6 octets en grand-boutiste et des sous-autorités de 4 octets en petit-boutiste : 1 + 1 + 6 + 5 × 4 = 28 octets pour un SID comportant cinq sous-autorités.
| SID ou RID | Compte |
|---|---|
| RID 500 | Administrateur intégré (désactivé par défaut sous Windows 10/11) |
| RID 501 | Invité (désactivé par défaut) |
| RID 503 | DefaultAccount |
| RID 504 | WDAGUtilityAccount (Windows Defender Application Guard) |
| RID 1000 ou 1001 et suivants | Généralement, comptes créés par les utilisateurs |
S-1-5-18 | SYSTEM (LocalSystem) |
S-1-5-19 | LOCAL SERVICE |
S-1-5-20 | NETWORK SERVICE |
Les RID sont attribués dans l’ordre croissant et ne sont pas réutilisés ; une interruption dans la séquence peut donc indiquer un compte supprimé. Les comptes joints à Microsoft Entra ID (anciennement Azure AD) utilisent des SID commençant par S-1-12-1-.
La ruche SAM
SAM\Domains\Account\Users (dans le fichier SAM, ce chemin se trouve sous une clé de premier niveau également nommée SAM ; sur un système en cours d’exécution, il s’agit de HKLM\SAM\SAM\Domains\Account\Users) contient une sous-clé par compte local, nommée d’après le RID sous forme de huit chiffres hexadécimaux : le RID 500 correspond à 000001F4, le RID 1001 à 000003E9. Chacune contient deux valeurs binaires que des outils tels que samparse de RegRipper décodent :
F(longueur fixe) : dernière ouverture de session, dernière définition du mot de passe, expiration du compte et dernière tentative d’ouverture de session échouée (toutes au format FILETIME), RID, indicateurs de contrôle du compte (par exemple, désactivé), nombre de tentatives d’ouverture de session échouées et nombre d’ouvertures de session.V(longueur variable) : nom d’utilisateur, nom complet, commentaire, répertoire de base et empreintes de mots de passe chiffrées.
La sous-clé Names contient une sous-clé par nom d’utilisateur, ce qui permet de retrouver le RID à partir du nom. Lorsqu’un compte Microsoft est lié, la clé du RID contient également des valeurs telles que InternetUserName (l’adresse e-mail), GivenName et SurName. Les valeurs de dernière ouverture de session couvrent les ouvertures de session associées à cet enregistrement de compte local ; corroborez-les avec les événements d’ouverture de session (leçon 2.7).
ProfileList : du SID au dossier de profil
SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\<SID> contient une sous-clé par profil utilisateur présent sur l’ordinateur, y compris S-1-5-18, -19 et -20. ProfileImagePath indique le dossier, tel que C:\Users\maria, et donc le chemin vers les fichiers NTUSER.DAT et UsrClass.dat de cet utilisateur.
Comptes locaux, Microsoft et de domaine
| Type de compte | Dans la SAM locale ? | Préfixe du SID | Nom du dossier de profil |
|---|---|---|---|
| Local | Oui | SID de la machine | Nom du compte à sa création |
| Compte Microsoft | Oui, compte local lié | SID de la machine | Souvent les cinq premiers caractères de l’adresse e-mail |
| Domaine | Non | SID du domaine | Nom d’utilisateur du domaine lors de la première ouverture de session |
Les comptes de domaine sont stockés sur le contrôleur de domaine, et non dans la SAM locale. Leurs seules traces locales sont les entrées ProfileList, les dossiers de profil, les journaux d’événements et les informations d’identification mises en cache : par défaut, Windows met en cache les 10 dernières ouvertures de session de domaine (CachedLogonsCount sous SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon) dans la ruche SECURITY, afin que les utilisateurs puissent ouvrir une session sans pouvoir joindre le domaine.
Le nom d’un dossier de profil peut différer du nom actuel du compte. Renommer un compte modifie son nom dans la SAM, mais le dossier conserve le nom qu’il a reçu lors de la première ouverture de session. Effectuez toujours les rapprochements à partir du SID ou du RID, jamais à partir du nom.
Exemple détaillé : relier les éléments de preuve
Une collecte de triage contient les éléments suivants.
1. Relier le SID à l’entrée SAM. ProfileList contient la clé S-1-5-21-1844237615-456351123-789044191-1002, avec ProfileImagePath défini sur C:\Users\maria. Le RID est 1002. Dans la SAM, la clé 000003E9 se convertit ainsi : 0x3E9 = 3 × 256 + 14 × 16 + 9 = 768 + 224 + 9 = 1001. Sa valeur V donne le nom d’utilisateur maria.s, et Names\maria.s le confirme : le compte a probablement été renommé après la création du profil. Le préfixe de la machine (2847193620-1735429082-3318874019) est identique dans les SID des autres comptes locaux, notamment celui de l’Administrateur se terminant par -500, ce qui montre qu’il s’agit d’un compte local. La ruche du registre de l’utilisateur est C:\Users\maria\NTUSER.DAT.
2. Convertir ShutdownTime. Les 8 octets sont 00 24 E3 0D 08 B4 DC 01. Lus en petit-boutiste, ils donnent 0x01DCB4080DE32400 = 134 180 035 600 000 000 intervalles de 100 ns. Après division par 10 000 000, cela représente 13 418 003 560 secondes depuis 1601. En soustrayant 11 644 473 600 (le nombre de secondes entre 1601 et 1970), on obtient l’heure Unix 1 773 529 960, soit 2026-03-14T23:12:40Z.
3. Convertir une heure locale. TimeZoneKeyName vaut E. South America Standard Time et ActiveTimeBias vaut 180 (Brasília, UTC−3, sans heure d’été depuis 2019). La valeur DateLastConnected d’un profil réseau est EA 07 03 00 06 00 0E 00 0E 00 1E 00 00 00 00 00 : année 0x07EA = 2026, mois 3, jour de la semaine 6 (samedi), jour 14, 14:30:00.000 heure locale. UTC = heure locale + biais = 14:30 + 180 minutes = 17:30, soit 2026-03-14T17:30:00Z. L’arrêt ci-dessus a eu lieu à 20:12:40 heure locale.
Outils
Registry Explorer et RECmd (avec un fichier de traitement par lots tel que Kroll_Batch.reb) lisent toutes ces valeurs et convertissent leurs horodatages. RegRipper propose des modules d’extension par artefact, par exemple rip.exe -r SYSTEM -p timezone ; les autres comprennent compname et shutdown (SYSTEM), winver, profilelist et networklist (SOFTWARE), ainsi que samparse (SAM). Vérifiez les valeurs des clés dans une vue hexadécimale lorsqu’une réponse en dépend.
Points clés pour l’examen : Attendez-vous à devoir indiquer le fuseau horaire à partir deTimeZoneKeyNameet des valeurs de biais, puis à appliquer la convention de signe UTC = heure locale + biais, à identifier Windows 11 à partir deCurrentBuildmalgré unProductNameindiquant « Windows 10 », et à convertir des valeurs FILETIME et d’époque Unix en UTC au format ISO 8601. Les questions demandent souvent le SID ou le RID d’un utilisateur ; rapprochez ProfileList et la SAM à l’aide du RID en hexadécimal, et non des noms de dossiers.
Points essentiels
- Lisez
SYSTEM\Select\Currentpour trouver le jeu de contrôle actif ;CurrentControlSetn’existe que sur un système en cours d’exécution. - Déterminez d’abord le fuseau horaire : UTC = heure locale + biais, les biais négatifs étant stockés en complément à deux et
ActiveTimeBiasn’étant valable que pour une saison. - Windows 11 indique toujours « Windows 10 » dans
ProductName; utilisez unCurrentBuildégal ou supérieur à 22000, ainsi queDisplayVersionetUBR. InstallDate(secondes Unix) etInstallTime(FILETIME) indiquent généralement la dernière mise à jour de fonctionnalités ; les valeurs antérieures subsistent sousSYSTEM\Setup\Source OS.- Un SID local est de la forme
S-1-5-21-<machine>-<RID>; la clé SAM correspond au RID sur huit chiffres hexadécimaux, et ProfileList associe le SID au dossier de profil. - Les comptes de domaine ne figurent pas dans la SAM locale, et les noms des dossiers de profil peuvent ne pas correspondre aux noms actuels des comptes.