LSA-Secrets¶
Was sie sind¶
Die Local Security Authority (LSA) bewahrt Secrets im Hive SECURITY auf. Dazu gehören das
Autologon-Kennwort, die Kennwörter der Konten, unter denen Dienste ausgeführt werden, das Domänenkennwort des Computerkontos,
die DPAPI-Systemschlüssel und der Schlüssel, mit dem zwischengespeicherte Domänenanmeldungen verschlüsselt sind. Sie
bewahrt außerdem zwischengespeicherte Domänenanmeldungen auf, damit sich Domänenbenutzer ohne Domänencontroller anmelden können.
parse-registry lsa-secrets listet auf, welche Secrets ein System enthält und wann sie gesetzt wurden, sowie wie
viele zwischengespeicherte Anmeldungen es aufbewahrt und verwendet. Es liest nur Namen und Zeiten: Nichts wird entschlüsselt, und
keine Bytes eines Secrets werden gelesen oder geschrieben. Juntei liest Beweise; es extrahiert keine Anmeldeinformationen.
Bestmögliche Schlussfolgerung: Das System enthielt ein Secret mit diesem Namen, gesetzt
zu diesem Zeitpunkt. Das Secret eines Dienstes (_SC_<service>) bedeutet, dass die LSA das Kennwort des Kontos speichert,
unter dem dieser Dienst ausgeführt wird.
Speicherort¶
C:\Windows\System32\config\SECURITY
Policy\Secrets\<name>\CurrVal the current value (encrypted)
Policy\Secrets\<name>\OldVal the previous value
Policy\Secrets\<name>\CupdTime when the current value was set (FILETIME)
Policy\Secrets\<name>\OupdTime when the previous value was set
Cache\NL$1 … NL$n cached domain logons, one slot each
Cache\NL$Control how many slots Windows keeps
| Name | Art | Was es ist |
|---|---|---|
DefaultPassword |
autologon |
Das Kennwort, mit dem sich Winlogon automatisch anmeldet. |
_SC_<service> |
service_account |
Das Kennwort des Kontos, unter dem <service> ausgeführt wird. |
$MACHINE.ACC |
machine_account |
Das Kennwort des Computerkontos in seiner Domäne. |
DPAPI_SYSTEM |
dpapi_system |
Die DPAPI-Schlüssel des Systems. |
NL$KM |
cached_logon_key |
Der Schlüssel, mit dem die zwischengespeicherten Anmeldungen verschlüsselt sind. |
L$_SQSA_<SID> |
security_questions |
Die Sicherheitsfragen eines lokalen Kontos (Windows 10 und neuer). |
RasDialParams!<SID>#n, L$_Ras… |
ras_credentials |
Anmeldeinformationen für DFÜ und VPN. |
L$…, G$…, M$… |
local, global, machine |
Andere private Daten, nach dem Präfix, das LsaStorePrivateData vergibt. |
Sichern Sie SECURITY mit den Transaktionsprotokollen sowie den System-Hive SYSTEM, der den
Host benennt.
Hinweise für die Analyse¶
- Namen und Zeiten, keine Werte. Ob ein Wert Daten enthält, ergibt sich aus seiner Größe. Sein Inhalt wird nicht gelesen.
DefaultPasswordbedeutet nicht Autologon. Das Secret existiert auf den meisten Systemen, auch auf solchen, die sich nie automatisch anmelden.Microsoft\Windows NT\CurrentVersion\WinlogoninSOFTWARE(AutoAdminLogon,DefaultUserName) gibt an, ob Autologon konfiguriert ist. Ein kürzlich gesetzterCurrentSetUTCist eine erklärungsbedürftige Änderung.- Dienst-Secrets:
_SC_<service>erscheint, wenn ein Dienst so eingerichtet ist, dass er unter einem Konto mit Kennwort ausgeführt wird. Vergleichen Sie es mitparse-registry services(ObjectName) und suchen Sie nach Diensten, die kürzlich installiert wurden oder unbekannt sind. Das Secret kann bestehen bleiben, nachdem der Dienst entfernt wurde. - Zeiten:
CurrentSetUTCundOldSetUTCgeben an, wann Windows den aktuellen und den vorherigen Wert gesetzt hat. Das Kennwort von$MACHINE.ACCändert sich standardmäßig alle 30 Tage, daher verschieben sich seine Zeiten.KeyLastWrittenUTCund die Schlüsselzeiten vonCurrVal/OldValgeben an, wann sich das Secret zuletzt geändert hat. - Zwischengespeicherte Anmeldungen: Ein Slot ist belegt, wenn sein Datensatz einen Benutzer benennt. Der Header des Datensatzes ist nicht
verschlüsselt; nur die Länge seines Benutzernamens wird gelesen.
CachedLogonsKeptist der Zähler ausNL$Control, derCachedLogonsCountfolgt (standardmäßig 10). Belegte Slots bedeuten, dass sich Domänenbenutzer interaktiv angemeldet haben, und ihre Anmeldeinformationen können offline aus dem Hive geknackt werden. Die Namen der Benutzer sind verschlüsselt und werden nicht dekodiert. Nur validierte binäre Datensätze mit vollständigem Header und konsistenter Benutzernamenlänge zählen als belegt. MeldetProblemsbeschädigte Slots, umfasst die Anzahl belegter Slots nur validierte Slots; interpretieren Sie die beschädigten Slots nicht als leer.
Mit Juntei parsen¶
Usage: juntei parse-registry lsa-secrets <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SECURITY hives
-f, --file <FILE> Parse one SECURITY hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry lsa-secrets -d collection/ -o lsa-secrets.csv
juntei parse-registry lsa-secrets -f SECURITY -t jsonl | jq 'select(.Kind == "service_account")'
Für jeden Hive listet die Zusammenfassung jedes Secret mit seiner Art und dem Zeitpunkt auf, zu dem es gesetzt wurde. Anschließend nennt sie die Dienste, deren Kontokennwörter die LSA speichert, und zählt die belegten Slots für zwischengespeicherte Anmeldungen.
Ausgabefelder¶
| Feld | Interpretation |
|---|---|
Host, SourcePath |
Host (aus dem System-Hive SYSTEM) und der Hive SECURITY. |
Secret, Kind |
Der Name des Secrets und was es ist (siehe Tabelle oben); Cache und cached_logons für den Datensatz der zwischengespeicherten Anmeldungen. |
ServiceName, UserSID |
Der Dienst, für den ein _SC_-Secret bestimmt ist, und die SID des Benutzers, die ein Name angibt (L$_SQSA_, RasDialParams). |
CurrentSetUTC, OldSetUTC |
CupdTime und OupdTime: wann der aktuelle und der vorherige Wert gesetzt wurden. |
HasCurrentValue, HasOldValue |
Ob CurrVal und OldVal Daten enthalten. |
CurrentValueLastWrittenUTC, OldValueLastWrittenUTC, KeyLastWrittenUTC |
Die letzten Schreibzugriffe auf die Schlüssel CurrVal, OldVal und den Secret-Schlüssel. |
CachedLogons, CachedLogonsInUse, CachedLogonsKept |
Der Datensatz der zwischengespeicherten Anmeldungen: Slots, belegte Slots und der Zähler aus NL$Control. |
TransactionLogStatus, LogsApplied |
Kontext der Registry-Wiederherstellung. |
Problems |
Fehlerhafte oder außerhalb des gültigen Bereichs liegende Zeiten (nur Zeitmetadaten werden angezeigt), beschädigte Cache-Header, falsche Typen von Cache-Werten und Schlüssel, die nicht gelesen werden können. |
Untersuchungsstrategie¶
- Suchen Sie nach
_SC_-Secrets unbekannter oder kürzlich installierter Dienste und gleichen Sie sie mitparse-registry servicesund Ereignis 7045 (ein Dienst wurde installiert) ab. - Prüfen Sie die Zeiten von
DefaultPasswordanhand der Autologon-Einstellungen vonWinlogon. - Notieren Sie auf Domänenmitgliedern die belegten Slots für zwischengespeicherte Anmeldungen und wann
Cachezuletzt geschrieben wurde. - Vergleichen Sie die Zeiten der Secrets mit der Zeitleiste: Ein während eines Angriffszeitraums gesetztes Secret kann auf ein neues Dienstkonto, Autologon oder eine Änderung des Computerkontos hinweisen.