रिमोट एक्सेस (उपयोगकर्ता पक्ष)¶
यह क्या है¶
किसी उपयोगकर्ता का NTUSER.DAT उन remote connections के निशान रखता है जो उपयोगकर्ता ने उस computer से किए।
ये lateral movement का स्रोत पक्ष हैं:
- Remote Desktop (
mstsc): - client में टाइप किए गए computers, सबसे हाल वाला पहले;
- हर उस computer के लिए एक key जिसमें उपयोगकर्ता ने sign in किया, उपयोग किए गए account नाम और उपयोगकर्ता द्वारा स्वीकार किए गए server certificate के thumbprint के साथ;
- वे computers जिन्हें उपयोगकर्ता ने local devices उपयोग करने दिए।
- PuTTY:
- सहेजे गए sessions: host, port, account, protocol, key फ़ाइल, proxy और port forwardings;
- सबसे हाल में शुरू किए गए sessions;
- हर SSH server key जिसे उपयोगकर्ता ने स्वीकार किया।
- WinSCP: सहेजे गए sessions और स्वीकार की गई SSH server keys, PuTTY जैसे ही रूप में।
- Mapped drives: sign-in पर restore होने के लिए map किया गया हर drive, और Map Network Drive में टाइप किए गए paths।
- Shares: वे shares जिन्हें Explorer ने mount किया (
MountPoints2)।
ये दिखाते हैं कि कोई account आगे कहाँ गया और किन credentials के साथ, तब भी जब remote computer के अपने logs मिट चुके हों।
सर्वोत्तम निष्कर्ष: इस उपयोगकर्ता की profile ने इस target से connect किया, या
उससे connection सहेजा। केवल सहेजा गया session या टाइप किया गया नाम यह सिद्ध नहीं करता कि
connection सफल हुआ। स्वीकार की गई host key या UsernameHint वाली Servers key अधिक मज़बूत है:
client server तक पहुँचा।
स्थान¶
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
हर profile के लिए NTUSER.DAT को उसके transaction logs के साथ एकत्र करें। सिस्टम का SOFTWARE
भी एकत्र करें: यह हर उपयोगकर्ता का SID देता है।
विश्लेषक के लिए सावधानियाँ¶
- Key times list times हैं।
Default,SshHostKeysऔरMap Network Drive MRUlists रखते हैं, और उनकी key का last write वह समय है जब list अंतिम बार बदली। वह समय पहले item (MruPosition0) का है। अन्य के लिए यह केवल ऊपरी सीमा है।Servers\<host>, session,Network\<letter>या share key का अपना समय होता है। - सहेजा गया उपयोग किया गया नहीं है। PuTTY या WinSCP session बिना कभी connect किए सहेजा जा सकता है। PuTTY
सहेजा गया session शुरू होने पर
Recent sessionsफिर से लिखता है, और किसी server तक पहली बार पहुँचने पर host key जोड़ता है। - Passwords:
- WinSCP session, tunnel और proxy passwords संग्रहीत कर सकता है।
- PuTTY केवल proxy का password संग्रहीत करता है, plain text में।
PasswordStoredऔरDetailsकाStoredPasswordsबताते हैं कि कौन-सी values set हैं। इन्हें कभी decode या लिखा नहीं जाता।- WinSCP defaults छोड़ देता है।
FSProtocolके बिना session SFTP है, औरPortNumberके बिना session protocol का default port उपयोग करता है। तबProtocolऔरPortअनुमान लगाने के बजाय खाली रहते हैं। - Host key fingerprints OpenSSH के
SHA256:…हैं, जैसेssh-keygen -l,sshऔर PuTTY 0.75 और बाद के versions उन्हें दिखाते हैं। Juntei इन्हें उस key से गणना करता है जिसे PuTTY और WinSCP रखते हैं। किसी नाम या IP address के पीछे के server की पहचान के लिए इनकी तुलना server की अपनी key,known_hostsफ़ाइलों और logs से करें। SSH-1 key (rsa) का कोई fingerprint नहीं होता। - Mapped drives:
RemoteUsernameकेवल तब set होता है जब drive किसी अन्य account से map किया गया हो; जब उपयोगकर्ता का अपना account उपयोग हुआ हो तो WindowsREG_DWORD0 लिखता है। - Shares:
MountPoints2में volumes और drive letters के लिए भी keys होती हैं। यहाँ केवल network shares (##server#share) report किए जाते हैं;\\server@SSL@443\DavWWWRootएक WebDAV share है। - हटाना: lists साफ़ करना, या portable client का उपयोग करना, यहाँ कोई निशान नहीं छोड़ता। इसकी तुलना
Jump Lists, Prefetch,
.rdpफ़ाइलों, RDP bitmap cache और target के logs से करें।
Juntei से parse करें¶
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)'
Summary client के अनुसार connections गिनता है। यह उन connections को सूचीबद्ध करता है जिनकी keys सबसे अंत में लिखी गईं, सबसे नए पहले, और वे sessions जो password रखते हैं।
आउटपुट fields¶
| Field | व्याख्या |
|---|---|
Host, User, UserSID, SourcePath |
Host, profile फ़ोल्डर का नाम, सिस्टम के ProfileList से उपयोगकर्ता का SID (सिस्टम के SOFTWARE hive के साथ), और hive। |
Client |
rdp, putty, winscp, mapped_drive या network_share। |
Kind |
Record कहाँ से आता है: 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 |
Computer (host नाम या IP address) और port, या share (\\server\share)। Port केवल वहीं दिया जाता है जहाँ Windows या client ने उसे लिखा। |
RemoteUsername |
Target पर उपयोग किया गया account: UsernameHint, किसी session का UserName (या PuTTY के HostName का user@), किसी mapped drive का UserName। |
Protocol |
PuTTY का Protocol (ssh, telnet, raw, …), WinSCP का FSProtocol (sftp, scp, ftp, webdav, s3), किसी mapped drive का provider (Microsoft Windows Network)। |
MRU-Position |
अपनी list में स्थान (0 सबसे हाल का): MRU<n>, MRUList, PuTTY का Recent sessions। |
SessionName |
सहेजे गए session का नाम, %20 और अन्य escapes decode किए हुए। |
HostKeyType, HostKeyFingerprint, HostKey |
स्वीकार की गई SSH host key का type (rsa2, ssh-ed25519, ecdsa-sha2-nistp256, …), उसका OpenSSH fingerprint, और संग्रहीत रूप में उसकी संख्याएँ। |
DriveLetter |
Mapped drive का letter। |
PasswordStored |
क्या session password रखता है; कभी decode नहीं किया जाता। |
Details |
अन्य settings, Name=Value; … (CSV) या object (JSON) के रूप में: RDP certificate का CertHash, LocalDevices, किसी session की key फ़ाइल, proxy, SSH tunnel, port forwardings, remote command और directories, StoredPasswords, किसी share का Label, किसी drive का ConnectionType। |
KeyPath, ValueName |
Key, और उस record के लिए value जो एक value है। |
KeyLastWrittenUTC |
Key का last write (lists के लिए सावधानियाँ देखें)। |
DataRaw |
Value के bytes (hex), जब वह string न हो या decode न हो। |
TransactionLogStatus, LogsApplied |
Registry recovery का context। |
Problems |
गलत type की values (उनके bytes के साथ), ऐसी host keys जिन्हें पढ़ा नहीं जा सकता, MRUList के ऐसे letters जो मौजूद नहीं हैं, और ऐसी values जिन्हें यह सूचीबद्ध नहीं करता। |
जाँच की रणनीति¶
- हर उपयोगकर्ता के targets को client के अनुसार सूचीबद्ध करें, और उनकी जाँच उन systems से करें जिन तक उस उपयोगकर्ता को
पहुँचना चाहिए। Administrative shares (
C$,ADMIN$) और IP addresses खोजें। - उपयोग किए गए accounts (
RemoteUsername) नोट करें: domain administrators और अन्य machines पर local accounts। HostKeyFingerprintका मिलान servers की keys से, औरCertHashका मिलान RDP servers के certificates से करें।- Targets के logon events (4624 type 10 और 3, 1149), Jump Lists और LNK फ़ाइलों
(
mstsc.exe,putty.exe, shares से खोली गई फ़ाइलें), Prefetch और RDP bitmap cache से correlate करें। - हटाई गई entries के लिए
parse-registry read --recover-deletedका उपयोग करें, और साफ़ की गई lists के लिए profile केNTUSER.DATकी पुरानी copies (Volume Shadow Copies, backups) का।