Comptes locaux SAM¶
Ce que contient la SAM¶
La ruche du gestionnaire des comptes de sécurité (Security Account Manager, SAM) stocke les enregistrements des comptes locaux. Juntei décode les
noms de comptes, les RID, les champs de profil/commentaire, les indicateurs de contrôle de compte, les horodatages de dernière ouverture de session et de mot de passe, les compteurs,
les indications de mot de passe, la liaison à un compte Microsoft, les chemins de profil et le fait que Windows masque ou non le compte
dans l'interface de connexion.
Ces informations sont utiles pour repérer des administrateurs locaux nouvellement créés, des comptes dormants réactivés, des modifications de mot de passe, des comptes masqués et des comptes préparés pour un déplacement latéral.
Meilleure conclusion : la SAM locale représentait le compte avec l'état enregistré. Il ne s'agit pas d'un historique d'authentification complet, et elle ne décrit pas les comptes de domaine.
Emplacement et collecte¶
C:\Windows\System32\config\SAM
C:\Windows\System32\config\SAM.LOG1
C:\Windows\System32\config\SAM.LOG2
Collectez la ruche et les journaux avec des privilèges/un accès brut suffisants. L'identité de l'hôte peut être enrichie à partir de
la ruche SYSTEM correspondante dans une collecte.
Précautions d'analyse¶
- Cette commande analyse les comptes locaux, et non les utilisateurs du domaine Active Directory.
- Juntei n'extrait volontairement pas les hachages de mots de passe.
- Le RID 500 correspond au compte Administrateur intégré, même s'il a été renommé ; le nom seul ne suffit pas.
LastLogonet les compteurs reflètent l'état du Registre, et non une piste d'audit complète par session.HiddenFromLogonUImasque un compte sur l'écran de connexion ; il ne désactive pas le compte.- Les comptes intégrés
DefaultAccountetWDAGUtilityAccountpeuvent être masqués de manière légitime. - Des indicateurs de compte nuls provenant d'une valeur
Fendommagée ou absente ne doivent pas être interprétés comme un compte activé. NamesKeyLastWrittenUTCdonne une approximation du contexte d'enregistrement du nom de compte, mais ne garantit pas l'heure de création.
Analyser avec Juntei¶
Usage: juntei parse-registry sam <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SAM hives
-f, --file <FILE> Parse one SAM hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Filtering:
--rid <RID> Parse one decimal RID (example: 500)
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry sam -f SAM -o accounts.csv
juntei parse-registry sam -f SAM --rid 500 -t jsonl | jq .
juntei parse-registry sam -d evidence/ -t jsonl \
| jq 'select(.HiddenFromLogonUi == true or (.AccountFlags | index("disabled") | not))'
Champs de sortie¶
| Champ | Interprétation |
|---|---|
Host, SourcePath |
Contexte de l'hôte et ruche SAM exacte. |
RID |
Identificateur relatif. Pivot solide pour l'identité du compte ; 500 correspond à l'Administrateur intégré. |
User |
Nom actuel du compte local. Peut être renommé ; corrélez par RID. |
FullName, Comment, UserComment |
Texte descriptif ; contrôlable par un attaquant et utile pour détecter une usurpation (masquerading). |
AccountFlags |
États décodés tels que désactivé, verrouillé, mot de passe non requis, compte normal, mot de passe sans expiration. |
AccountFlagsValue |
Indicateurs numériques bruts pour la validation et les bits non pris en charge. |
CountryCode, CodePage |
Métadonnées de paramètres régionaux/page de codes du compte ; généralement du contexte, et non une attribution. |
LastLogonUTC, LastLogonWholeSecondsUTC |
Même état de dernière ouverture de session, en précision complète et en secondes entières pour la compatibilité. Pas un historique complet. |
PasswordLastSetUTC |
Heure de modification du mot de passe enregistrée. Examinez les valeurs récentes ou anciennes inattendues. |
AccountExpirationUTC |
Expiration configurée lorsqu'elle est définie. Null peut signifier jamais/non défini. |
LastFailedLogonUTC |
Dernier échec d'ouverture de session locale enregistré dans l'état de la SAM ; corroborez avec les événements Security. |
FailedLogonCount, LogonCount |
Compteurs cumulatifs/d'état dont le comportement de mise à jour est propre à Windows ; à utiliser comme contexte, et non comme décompte exact d'événements. |
PasswordHint |
Indication sensible fournie par l'utilisateur ; peut révéler des schémas de mots de passe. À manipuler avec les précautions appropriées. |
InternetUserName |
Identité du compte Microsoft lié, le cas échéant. |
HiddenFromLogonUI |
État de masquage dans l'interface. Examinez les RID élevés et les comptes personnalisés inattendus ; ne signifie pas désactivé. |
HomeDirectory, HomeDrive, ProfilePath, LogonScript |
Configuration de l'environnement/de l'ouverture de session du compte local ; des scripts ou chemins UNC inhabituels peuvent indiquer une persistance. |
KeyLastWrittenUTC |
Heure de modification de la clé de compte du RID. Au niveau de la clé, et non propre à un champ. |
NamesKeyLastWrittenUTC |
Heure de modification de la clé de correspondance du nom d'utilisateur ; approximation utile du cycle de vie du compte. |
LastLogonFiletime, PasswordLastSetFiletime, AccountExpirationFiletime, LastFailedLogonFiletime |
Valeurs FILETIME 64 bits brutes conservées pour la validation et la gestion des valeurs sentinelles particulières. |
TransactionLogStatus, LogsApplied |
Contexte de relecture du Registre. |
Problems |
Désaccord entre F/V/Names, entrées manquantes, décalages mal formés ou dommages de décodage. |
Stratégie d'investigation¶
- Comparez le RID, le nom, les indicateurs, le chemin de profil et
NamesKeyLastWrittenUTCà la référence de l'hôte. - Examinez les comptes activés de RID 1000 et plus, ceux dont le mot de passe n'est pas requis ou n'expire jamais, ainsi que les comptes masqués ou récemment modifiés.
- Corrélez avec les événements Security 4720/4722/4724/4732, les événements d'ouverture de session, la création de profils et l'activité à distance.
- Recherchez dans l'historique de récupération du Registre si un compte a été supprimé avant la collecte.
- Distinguez les comptes légitimes de provisionnement/par défaut des comptes interactifs créés par un attaquant.