遠端存取(使用者端)¶
這是什麼¶
使用者的 NTUSER.DAT 會保留該使用者從這台電腦建立之遠端連線的痕跡。這些是橫向移動的來源端:
- 遠端桌面(
mstsc): - 輸入到用戶端中的電腦,由新到舊;
- 使用者曾登入的每台電腦各有一個機碼,其中記錄所使用的帳戶名稱,以及使用者接受之伺服器 憑證的指紋;
- 使用者允許使用本機裝置的電腦。
- PuTTY:
- 已儲存的工作階段:主機、連接埠、帳戶、通訊協定、金鑰檔、Proxy 與連接埠轉送;
- 最後啟動的工作階段;
- 使用者接受的每個 SSH 伺服器金鑰。
- WinSCP:已儲存的工作階段與已接受的 SSH 伺服器金鑰,形式與 PuTTY 相同。
- 對應的磁碟機:每個設定為登入時還原的對應磁碟機,以及輸入到 連線網路磁碟機 中的路徑。
- 共用資料夾:Explorer 掛載過的共用資料夾(
MountPoints2)。
即使遠端電腦本身的記錄已經消失,它們仍能顯示某個帳戶接下來前往何處,以及使用了哪些認證資訊。
最佳結論:此使用者的設定檔曾連線至此目標,或曾儲存
連至此目標的連線。單憑已儲存的工作階段或輸入的名稱,並不能證明連線成功。已接受的主機金鑰,
或具有 UsernameHint 的 Servers 機碼則是較有力的證據:用戶端曾連上該伺服器。
位置¶
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
請收集每個設定檔的 NTUSER.DAT 及其交易記錄檔。也請收集系統的 SOFTWARE:它提供每位使用者的 SID。
分析注意事項¶
- 機碼時間是清單的時間。
Default、SshHostKeys與Map Network Drive MRU保存的是清單, 其機碼的最後寫入時間是清單最後一次變更的時間。該時間屬於第一個項目(MruPosition0)。 對其他項目而言,它只是一個上限。Servers\<host>、工作階段、Network\<letter>或共用資料夾 機碼則有其自己的時間。 - 已儲存不代表已使用。 PuTTY 或 WinSCP 工作階段可以在從未連線的情況下被儲存。PuTTY 會在
啟動已儲存的工作階段時重新寫入
Recent sessions,並在第一次連上伺服器時新增主機金鑰。 - 密碼:
- WinSCP 可以儲存工作階段、通道與 Proxy 的密碼。
- PuTTY 只儲存 Proxy 的密碼,且為純文字。
PasswordStored與Details的StoredPasswords會指出設定了哪些值。這些值絕不會被解碼或寫出。- WinSCP 會省略預設值。 沒有
FSProtocol的工作階段為 SFTP,而沒有PortNumber的工作階段 使用該通訊協定的預設連接埠。此時Protocol與Port會保持空白,而不會進行猜測。 - 主機金鑰指紋採用 OpenSSH 的
SHA256:…格式,與ssh-keygen -l、ssh以及 PuTTY 0.75 及之後版本顯示的形式相同。Juntei 會從 PuTTY 與 WinSCP 保存的金鑰計算它們。請將它們與伺服器 本身的金鑰、known_hosts檔案及記錄進行比較,以識別名稱或 IP 位址背後的伺服器。SSH-1 金鑰 (rsa)沒有指紋。 - 對應的磁碟機:只有在以其他帳戶對應磁碟機時,才會設定
RemoteUsername;若使用的是 使用者自己的帳戶,Windows 會寫入REG_DWORD0。 - 共用資料夾:
MountPoints2也有磁碟區與磁碟機代號的機碼。此處只回報網路共用資料夾 (##server#share);\\server@SSL@443\DavWWWRoot是 WebDAV 共用資料夾。 - 移除:清除清單或使用可攜式用戶端,都不會在此處留下痕跡。請與 Jump Lists、Prefetch、
.rdp檔案、RDP 點陣圖快取及目標的記錄進行比較。
使用 Juntei 剖析¶
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)'
摘要會依用戶端計算連線數量。它會列出機碼最後寫入的連線(由新到舊),以及保存密碼的工作階段。
輸出欄位¶
| 欄位 | 判讀 |
|---|---|
Host、User、UserSID、SourcePath |
主機、設定檔資料夾的名稱、取自系統 ProfileList 的使用者 SID(需有系統的 SOFTWARE 登錄區),以及登錄區。 |
Client |
rdp、putty、winscp、mapped_drive 或 network_share。 |
Kind |
記錄的來源: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 |
電腦(主機名稱或 IP 位址)與連接埠,或共用資料夾(\\server\share)。只有在 Windows 或用戶端寫入連接埠時才會提供。 |
RemoteUsername |
在目標上使用的帳戶:UsernameHint、工作階段的 UserName(或 PuTTY HostName 中的 user@)、對應磁碟機的 UserName。 |
Protocol |
PuTTY 的 Protocol(ssh、telnet、raw……)、WinSCP 的 FSProtocol(sftp、scp、ftp、webdav、s3)、對應磁碟機的提供者(Microsoft Windows Network)。 |
MRU-Position |
在其清單中的位置(0 為最新):MRU<n>、MRUList、PuTTY 的 Recent sessions。 |
SessionName |
已儲存工作階段的名稱,%20 與其他跳脫字元已解碼。 |
HostKeyType、HostKeyFingerprint、HostKey |
已接受之 SSH 主機金鑰的類型(rsa2、ssh-ed25519、ecdsa-sha2-nistp256……)、其 OpenSSH 指紋,以及所儲存的數值。 |
DriveLetter |
對應磁碟機的代號。 |
PasswordStored |
工作階段是否保存密碼;絕不會解碼。 |
Details |
其他設定,以 Name=Value; …(CSV)或物件(JSON)表示:RDP 憑證的 CertHash、LocalDevices、工作階段的金鑰檔、Proxy、SSH 通道、連接埠轉送、遠端命令與目錄、StoredPasswords、共用資料夾的 Label、磁碟機的 ConnectionType。 |
KeyPath、ValueName |
機碼,以及對於由單一值構成的記錄而言的值。 |
KeyLastWrittenUTC |
機碼的最後寫入時間(清單請參閱注意事項)。 |
DataRaw |
當值不是字串或無法解碼時,該值的位元組(十六進位)。 |
TransactionLogStatus、LogsApplied |
登錄復原脈絡。 |
Problems |
類型錯誤的值(連同其位元組)、無法讀取的主機金鑰、不存在的 MRUList 字母,以及未列出的值。 |
調查策略¶
- 依用戶端列出每位使用者的目標,並與該使用者應該連線的系統進行核對。請尋找系統管理共用資料夾
(
C$、ADMIN$)與 IP 位址。 - 記下所使用的帳戶(
RemoteUsername):網域系統管理員以及其他電腦上的本機帳戶。 - 將
HostKeyFingerprint與伺服器的金鑰比對,並將CertHash與 RDP 伺服器的憑證比對。 - 與目標的登入事件(4624 類型 10 與 3、1149)、Jump Lists 與 LNK 檔案(
mstsc.exe、putty.exe、從共用資料夾開啟的檔案)、Prefetch 以及 RDP 點陣圖快取進行關聯分析。 - 使用
parse-registry read --recover-deleted找出已刪除的項目,並使用該設定檔NTUSER.DAT的較舊副本(磁碟區陰影複製、備份)找出已清除的清單。