Fernzugriff (Benutzerseite)¶
Was es ist¶
Die NTUSER.DAT eines Benutzers bewahrt Spuren der Remoteverbindungen, die der Benutzer von diesem Computer aus hergestellt hat.
Sie bilden die Quellseite lateraler Bewegung:
- Remotedesktop (
mstsc): - die in den Client eingegebenen Computer, die jüngsten zuerst;
- ein Schlüssel pro Computer, bei dem sich der Benutzer angemeldet hat, mit dem verwendeten Kontonamen und dem Fingerabdruck des vom Benutzer akzeptierten Serverzertifikats;
- die Computer, denen der Benutzer die Nutzung lokaler Geräte erlaubt hat.
- PuTTY:
- gespeicherte Sitzungen: Host, Port, Konto, Protokoll, Schlüsseldatei, Proxy und Portweiterleitungen;
- die zuletzt gestarteten Sitzungen;
- jeder vom Benutzer akzeptierte SSH-Serverschlüssel.
- WinSCP: gespeicherte Sitzungen und akzeptierte SSH-Serverschlüssel, in derselben Form wie bei PuTTY.
- Verbundene Laufwerke: jedes Laufwerk, das bei der Anmeldung wiederhergestellt werden soll, und die in Netzlaufwerk verbinden (Map Network Drive) eingegebenen Pfade.
- Freigaben: die vom Explorer eingebundenen Freigaben (
MountPoints2).
Sie zeigen, wohin ein Konto als Nächstes ging und mit welchen Anmeldeinformationen, selbst wenn die eigenen Protokolle des Remote- computers nicht mehr vorhanden sind.
Bestmögliche Schlussfolgerung: Das Profil dieses Benutzers hat sich mit diesem Ziel verbunden oder
eine Verbindung dorthin gespeichert. Eine gespeicherte Sitzung oder ein eingegebener Name allein beweist nicht, dass eine
Verbindung erfolgreich war. Ein akzeptierter Hostschlüssel oder ein Servers-Schlüssel mit einem UsernameHint ist stärker:
Der Client hat den Server erreicht.
Speicherort¶
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Terminal Server Client\Default MRU0 … MRU9
Software\Microsoft\Terminal Server Client\Servers\<host> UsernameHint, CertHash
Software\Microsoft\Terminal Server Client\LocalDevices <host> = devices
Software\SimonTatham\PuTTY\Sessions\<session>
Software\SimonTatham\PuTTY\Jumplist Recent sessions
Software\SimonTatham\PuTTY\SshHostKeys <type>@<port>:<host> = key
Software\Martin Prikryl\WinSCP 2\Sessions\<session>
Software\Martin Prikryl\WinSCP 2\SshHostKeys
Network\<letter> RemotePath, UserName, ProviderName
Software\Microsoft\Windows\CurrentVersion\Explorer\Map Network Drive MRU
Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##server#share
Sichern Sie NTUSER.DAT mit seinen Transaktionsprotokollen für jedes Profil. Sichern Sie auch den SOFTWARE-Hive des Systems:
Er liefert die SID jedes Benutzers.
Hinweise für die Analyse¶
- Schlüsselzeiten sind Listenzeiten.
Default,SshHostKeysundMap Network Drive MRUenthalten Listen, und der letzte Schreibzugriff auf ihren Schlüssel ist der Zeitpunkt der letzten Änderung der Liste. Diese Zeit gehört zum ersten Element (MruPosition0). Für die anderen ist sie nur eine Obergrenze. Ein SchlüsselServers\<host>, ein Sitzungs-,Network\<letter>- oder Freigabeschlüssel hat seine eigene Zeit. - Gespeichert heißt nicht verwendet. Eine PuTTY- oder WinSCP-Sitzung kann gespeichert werden, ohne jemals eine Verbindung herzustellen. PuTTY
schreibt
Recent sessionsneu, wenn eine gespeicherte Sitzung gestartet wird, und fügt einen Hostschlüssel hinzu, wenn ein Server erstmals erreicht wird. - Kennwörter:
- WinSCP kann Kennwörter für Sitzungen, Tunnel und Proxys speichern.
- PuTTY speichert nur das Kennwort eines Proxys, im Klartext.
PasswordStoredundStoredPasswordsinDetailsgeben an, welche Werte gesetzt sind. Sie werden nie dekodiert oder ausgegeben.- WinSCP lässt Standardwerte weg. Eine Sitzung ohne
FSProtocolist SFTP, und eine ohnePortNumberverwendet den Standardport des Protokolls.ProtocolundPortbleiben dann leer, statt zu raten. - Fingerabdrücke von Hostschlüsseln sind
SHA256:…im OpenSSH-Format, wiessh-keygen -l,sshund PuTTY ab 0.75 sie anzeigen. Juntei berechnet sie aus dem Schlüssel, den PuTTY und WinSCP speichern. Vergleichen Sie sie mit dem eigenen Schlüssel des Servers,known_hosts-Dateien und Protokollen, um den Server hinter einem Namen oder einer IP- Adresse zu identifizieren. Ein SSH-1-Schlüssel (rsa) hat keinen. - Verbundene Laufwerke:
RemoteUsernameist nur gesetzt, wenn das Laufwerk mit einem anderen Konto verbunden wurde; Windows schreibt einREG_DWORD0, wenn das eigene Konto des Benutzers verwendet wurde. - Freigaben:
MountPoints2enthält auch Schlüssel für Volumes und Laufwerksbuchstaben. Hier werden nur Netzwerkfreigaben (##server#share) gemeldet;\\server@SSL@443\DavWWWRootist eine WebDAV-Freigabe. - Entfernung: Das Löschen der Listen oder die Verwendung eines portablen Clients hinterlässt hier keine Spur. Vergleichen Sie mit
Jump Lists, Prefetch,
.rdp-Dateien, dem RDP-Bitmap-Cache und den Protokollen des Ziels.
Mit Juntei parsen¶
Usage: juntei parse-registry remote-access <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find NTUSER.DAT hives
-f, --file <FILE> Parse one NTUSER.DAT
--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 remote-access -d evidence/ -o remote.csv
juntei parse-registry remote-access -f NTUSER.DAT -t jsonl \
| jq 'select(.Client == "rdp" or .HostKeyFingerprint != null)'
Die Zusammenfassung zählt Verbindungen nach Client. Sie listet die Verbindungen auf, deren Schlüssel zuletzt geschrieben wurden, die neuesten zuerst, sowie die Sitzungen, die ein Kennwort speichern.
Ausgabefelder¶
| Feld | Interpretation |
|---|---|
Host, User, UserSID, SourcePath |
Host, Name des Profilordners, SID des Benutzers aus der ProfileList des Systems (mit dem SOFTWARE-Hive des Systems) und der Hive. |
Client |
rdp, putty, winscp, mapped_drive oder network_share. |
Kind |
Herkunft des Datensatzes: rdp_mru, rdp_server, rdp_local_devices, putty_session, putty_host_key, winscp_session, winscp_host_key, network_drive, map_network_drive_mru, mount_point. |
Target, Port |
Der Computer (Hostname oder IP-Adresse) und Port oder die Freigabe (\\server\share). Ein Port wird nur angegeben, wo Windows oder der Client einen geschrieben hat. |
RemoteUsername |
Das auf dem Ziel verwendete Konto: UsernameHint, der UserName einer Sitzung (oder das user@ aus PuTTYs HostName), der UserName eines verbundenen Laufwerks. |
Protocol |
Protocol von PuTTY (ssh, telnet, raw, …), FSProtocol von WinSCP (sftp, scp, ftp, webdav, s3), der Anbieter eines verbundenen Laufwerks (Microsoft Windows Network). |
MRU-Position |
Die Position in der jeweiligen Liste (0 ist die jüngste): MRU<n>, MRUList, Recent sessions von PuTTY. |
SessionName |
Name einer gespeicherten Sitzung, mit dekodiertem %20 und anderen Escape-Sequenzen. |
HostKeyType, HostKeyFingerprint, HostKey |
Typ eines akzeptierten SSH-Hostschlüssels (rsa2, ssh-ed25519, ecdsa-sha2-nistp256, …), sein OpenSSH-Fingerabdruck und seine Zahlen wie gespeichert. |
DriveLetter |
Laufwerksbuchstabe eines verbundenen Laufwerks. |
PasswordStored |
Ob die Sitzung ein Kennwort speichert; wird nie dekodiert. |
Details |
Weitere Einstellungen als Name=Value; … (CSV) oder als Objekt (JSON): CertHash des RDP-Zertifikats, LocalDevices, Schlüsseldatei, Proxy, SSH-Tunnel, Portweiterleitungen, Remotebefehl und Verzeichnisse einer Sitzung, StoredPasswords, Label einer Freigabe, ConnectionType eines Laufwerks. |
KeyPath, ValueName |
Der Schlüssel und – bei einem Datensatz, der aus einem einzelnen Wert besteht – der Wert. |
KeyLastWrittenUTC |
Letzter Schreibzugriff auf den Schlüssel (siehe die Hinweise zu Listen). |
DataRaw |
Die Bytes des Werts (hexadezimal), wenn er keine Zeichenfolge ist oder sich nicht dekodieren lässt. |
TransactionLogStatus, LogsApplied |
Kontext der Registry-Wiederherstellung. |
Problems |
Werte des falschen Typs (mit ihren Bytes), nicht lesbare Hostschlüssel, MRUList-Buchstaben ohne zugehörigen Wert und Werte, die nicht aufgelistet werden. |
Untersuchungsstrategie¶
- Listen Sie die Ziele jedes Benutzers nach Client auf und gleichen Sie sie mit den Systemen ab, die dieser Benutzer
erreichen sollte. Achten Sie auf administrative Freigaben (
C$,ADMIN$) und IP-Adressen. - Notieren Sie die verwendeten Konten (
RemoteUsername): Domänenadministratoren und lokale Konten auf anderen Rechnern. - Gleichen Sie
HostKeyFingerprintmit den Schlüsseln der Server undCertHashmit den Zertifikaten der RDP-Server ab. - Korrelieren Sie mit den Anmeldeereignissen der Ziele (4624 Typ 10 und 3, 1149), Jump Lists und LNK-Dateien
(
mstsc.exe,putty.exe, von Freigaben geöffnete Dateien), Prefetch und dem RDP-Bitmap-Cache. - Verwenden Sie
parse-registry read --recover-deletedfür gelöschte Einträge und ältere Kopien derNTUSER.DATdes Profils (Volumeschattenkopien, Sicherungen) für geleerte Listen.