Lokale SAM-Konten¶
Was der SAM enthält¶
Der Hive des Security Account Manager (SAM) speichert Datensätze lokaler Konten. Juntei dekodiert
Kontonamen, RIDs, Profil-/Kommentarfelder, Kontosteuerungs-Flags, Zeitstempel der letzten Anmeldung/Kennwortänderung, Zähler,
Kennworthinweise, die Verknüpfung mit einem Microsoft-Konto, Profilpfade und ob Windows das Konto
auf der Anmeldeoberfläche ausblendet.
Dies hilft beim Auffinden neu erstellter lokaler Administratoren, aktivierter ruhender Konten, Kennwortänderungen, ausgeblendeter Konten und von Konten, die für laterale Bewegung vorbereitet wurden.
Bestmögliche Schlussfolgerung: Der lokale SAM bildete das Konto mit dem aufgezeichneten Zustand ab. Er ist keine vollständige Authentifizierungshistorie und beschreibt keine Domänenkonten.
Speicherort und Sicherung¶
C:\Windows\System32\config\SAM
C:\Windows\System32\config\SAM.LOG1
C:\Windows\System32\config\SAM.LOG2
Sichern Sie den Hive und die Protokolle mit ausreichenden Berechtigungen bzw. per Rohzugriff. Die Hostidentität kann in einer Sammlung anhand
des zugehörigen SYSTEM-Hives ergänzt werden.
Hinweise für die Analyse¶
- Dieser Befehl parst lokale Konten, keine Domänenbenutzer des Active Directory.
- Juntei extrahiert bewusst keine Kennwort-Hashes.
- RID 500 ist das integrierte Administratorkonto, auch wenn es umbenannt wurde; der Name allein reicht nicht aus.
LastLogonund die Zähler sind Registry-Zustand, kein vollständiges Prüfprotokoll pro Sitzung.HiddenFromLogonUIblendet ein Konto auf dem Anmeldebildschirm aus; es deaktiviert das Konto nicht.- Die integrierten Konten
DefaultAccountundWDAGUtilityAccountkönnen legitimerweise ausgeblendet sein. - Leere Konto-Flags aufgrund eines beschädigten/fehlenden
F-Werts dürfen nicht als aktiviert interpretiert werden. NamesKeyLastWrittenUTCgibt näherungsweise den Kontext der Registrierung des Kontonamens wieder, ist aber kein garantierter Erstellungszeitpunkt.
Mit Juntei parsen¶
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))'
Ausgabefelder¶
| Feld | Interpretation |
|---|---|
Host, SourcePath |
Hostkontext und exakter SAM-Hive. |
RID |
Relativer Bezeichner (Relative Identifier). Starker Ankerpunkt für die Kontoidentität; 500 ist der integrierte Administrator. |
User |
Aktueller Name des lokalen Kontos. Kann umbenannt sein; über die RID korrelieren. |
FullName, Comment, UserComment |
Beschreibender Text; vom Angreifer steuerbar und nützlich zur Prüfung auf Tarnung. |
AccountFlags |
Dekodierte Zustände wie deaktiviert, gesperrt, Kennwort nicht erforderlich, normales Konto, Kennwort läuft nie ab. |
AccountFlagsValue |
Numerische Roh-Flags zur Validierung und für nicht unterstützte Bits. |
CountryCode, CodePage |
Metadaten zu Gebietsschema/Codepage des Kontos; in der Regel Kontext, keine Zuordnung. |
LastLogonUTC, LastLogonWholeSecondsUTC |
Derselbe Zustand der letzten Anmeldung in voller Genauigkeit und in ganzen Sekunden zur Kompatibilität. Keine vollständige Historie. |
PasswordLastSetUTC |
Aufgezeichneter Zeitpunkt der Kennwortänderung. Unerwartet neue/alte Werte untersuchen. |
AccountExpirationUTC |
Konfigurierter Ablauf, sofern endlich. Null kann nie/nicht gesetzt bedeuten. |
LastFailedLogonUTC |
Letzte im SAM-Zustand aufgezeichnete fehlgeschlagene lokale Anmeldung; mit Security-Ereignissen untermauern. |
FailedLogonCount, LogonCount |
Kumulative/zustandsbezogene Zähler mit Windows-spezifischem Aktualisierungsverhalten; als Kontext verwenden, nicht als exakte Ereignisanzahl. |
PasswordHint |
Sensibler, vom Benutzer angegebener Hinweis; kann Kennwortmuster offenlegen. Angemessen behandeln. |
InternetUserName |
Identität des verknüpften Microsoft-Kontos, sofern vorhanden. |
HiddenFromLogonUI |
Ausblendungszustand auf der Oberfläche. Hohe RIDs/unerwartete benutzerdefinierte Konten prüfen; bedeutet nicht deaktiviert. |
HomeDirectory, HomeDrive, ProfilePath, LogonScript |
Umgebungs-/Anmeldekonfiguration des lokalen Kontos; ungewöhnliche Skripte/UNC-Pfade können auf Persistenz hindeuten. |
KeyLastWrittenUTC |
Änderungszeitpunkt des RID-Kontoschlüssels. Auf Schlüsselebene, nicht feldspezifisch. |
NamesKeyLastWrittenUTC |
Änderungszeitpunkt des Schlüssels für die Zuordnung des Benutzernamens; nützliche Näherung für den Lebenszyklus des Kontos. |
LastLogonFiletime, PasswordLastSetFiletime, AccountExpirationFiletime, LastFailedLogonFiletime |
Rohe 64-Bit-FILETIME-Werte, aufbewahrt zur Validierung und zur Behandlung spezieller Sentinel-Werte. |
TransactionLogStatus, LogsApplied |
Kontext des Registry-Wiedereinspielens. |
Problems |
Abweichungen zwischen F/V/Names, fehlende Einträge, fehlerhafte Offsets oder Dekodierungsschäden. |
Untersuchungsstrategie¶
- Vergleichen Sie RID, Name, Flags, Profilpfad und
NamesKeyLastWrittenUTCmit der Baseline des Hosts. - Prüfen Sie aktivierte Konten mit RID 1000+, Konten ohne erforderliches Kennwort, mit nie ablaufendem Kennwort, ausgeblendete oder kürzlich geänderte Konten.
- Korrelieren Sie mit den Security-Ereignissen 4720/4722/4724/4732, Anmeldeereignissen, der Profilerstellung und Remoteaktivitäten.
- Durchsuchen Sie die Wiederherstellungshistorie der Registry, falls ein Konto vor der Sicherung entfernt wurde.
- Unterscheiden Sie legitime Bereitstellungs-/Standardkonten von interaktiv durch Angreifer erstellten Konten.