LSA 機密資訊¶
這些是什麼¶
本機安全性授權(LSA)將機密資訊保存在 SECURITY 登錄區中。這些機密資訊包括
自動登入密碼、服務執行時所用帳戶的密碼、電腦帳戶的網域
密碼、DPAPI 系統金鑰,以及用來加密快取網域登入資訊的金鑰。它
也會保存快取的網域登入資訊,讓網域使用者在沒有網域控制站的情況下也能登入。
parse-registry lsa-secrets 會列出系統持有哪些機密資訊及其設定時間,以及
保存與使用了多少個快取登入。它只讀取名稱與時間:不會解密任何內容,也
不會讀取或寫入任何機密資訊的位元組。Juntei 讀取的是證據;它不會擷取認證資訊。
最佳結論:系統曾持有此名稱的機密資訊,且於
此時間設定。服務的機密資訊(_SC_<service>)表示 LSA 儲存了該服務執行時
所用帳戶的密碼。
位置¶
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
| 名稱 | 類型 | 內容 |
|---|---|---|
DefaultPassword |
autologon |
Winlogon 自動登入時所使用的密碼。 |
_SC_<service> |
service_account |
<service> 執行時所用帳戶的密碼。 |
$MACHINE.ACC |
machine_account |
電腦帳戶在其網域中的密碼。 |
DPAPI_SYSTEM |
dpapi_system |
系統的 DPAPI 金鑰。 |
NL$KM |
cached_logon_key |
用來加密快取登入資訊的金鑰。 |
L$_SQSA_<SID> |
security_questions |
本機帳戶的安全性問題(Windows 10 及更新版本)。 |
RasDialParams!<SID>#n、L$_Ras… |
ras_credentials |
撥號與 VPN 認證資訊。 |
L$…、G$…、M$… |
local、global、machine |
其他私人資料,依 LsaStorePrivateData 所給予的前綴區分。 |
請收集 SECURITY 及其交易記錄,以及提供主機名稱的系統 SYSTEM
登錄區。
分析注意事項¶
- 只有名稱與時間,沒有值。值是否包含資料是依其大小判斷。其內容 不會被讀取。
DefaultPassword不代表已啟用自動登入。大多數系統上都存在此機密資訊,包括 從未自動登入的系統。SOFTWARE的Microsoft\Windows NT\CurrentVersion\Winlogon(AutoAdminLogon、DefaultUserName)才能說明 是否已設定自動登入。最近的CurrentSetUTC是值得釐清的變更。- 服務的機密資訊:當服務被設定為以有密碼的帳戶執行時,就會出現
_SC_<service>。 請將其與parse-registry services(ObjectName)比較,並尋找 最近安裝或不明的服務。服務被移除後,該機密資訊仍可能留存。 - 時間:
CurrentSetUTC與OldSetUTC是 Windows 設定目前值與先前 值的時間。$MACHINE.ACC的密碼預設每 30 天變更一次,因此其時間會變動。KeyLastWrittenUTC以及CurrVal/OldVal機碼的時間,大約是機密資訊最後一次 變更的時間。 - 快取登入:當槽位的記錄中有使用者名稱時,該槽位即為使用中。記錄的標頭並未
加密;只會讀取其使用者名稱長度。
CachedLogonsKept是NL$Control的計數, 它依循CachedLogonsCount(預設為 10)。使用中的槽位表示有網域使用者曾以互動方式 登入,而且其認證資訊可以從此登錄區離線破解。使用者名稱 經過加密,不會被解碼。只有標頭完整且使用者名稱長度一致、經過驗證的二進位記錄才會計為使用中。若Problems回報有損毀的槽位,使用中的計數只涵蓋經過驗證的槽位;請勿將損毀的槽位解讀為空槽位。
使用 Juntei 剖析¶
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")'
對於每個登錄區,摘要會列出每項機密資訊及其類型與設定時間。接著列出 LSA 儲存了其帳戶密碼的服務,並計算使用中的快取登入槽位數。
輸出欄位¶
| 欄位 | 判讀 |
|---|---|
Host、SourcePath |
主機(取自系統的 SYSTEM 登錄區),以及 SECURITY 登錄區。 |
Secret、Kind |
機密資訊的名稱及其內容(請參閱上表);快取登入記錄則為 Cache 與 cached_logons。 |
ServiceName、UserSID |
_SC_ 機密資訊所屬的服務,以及名稱中所含的使用者 SID(L$_SQSA_、RasDialParams)。 |
CurrentSetUTC、OldSetUTC |
CupdTime 與 OupdTime:目前值與先前值的設定時間。 |
HasCurrentValue、HasOldValue |
CurrVal 與 OldVal 是否包含資料。 |
CurrentValueLastWrittenUTC、OldValueLastWrittenUTC、KeyLastWrittenUTC |
CurrVal、OldVal 與機密資訊機碼的最後寫入時間。 |
CachedLogons、CachedLogonsInUse、CachedLogonsKept |
快取登入記錄:槽位數、使用中的槽位數,以及 NL$Control 的計數。 |
TransactionLogStatus、LogsApplied |
登錄復原脈絡。 |
Problems |
格式錯誤或超出範圍的時間(僅顯示時間中繼資料)、損毀的快取標頭、錯誤的快取值類型,以及無法讀取的機碼。 |
調查策略¶
- 尋找不明或最近安裝之服務的
_SC_機密資訊,並與parse-registry services及事件 7045(已安裝服務)比對。 - 將
DefaultPassword的時間與Winlogon的自動登入設定互相核對。 - 在網域成員上,記下使用中的快取登入槽位,以及
Cache最後一次寫入的時間。 - 將機密資訊的時間與時間軸比較:在入侵期間設定的機密資訊,可能 標示著新的服務帳戶、自動登入或電腦帳戶的變更。