剖析器驗證¶
Juntei 所維護的剖析器 crate 均以公開證據與獨立實作進行測試。這些比較有助於 偵測迴歸問題與判讀上的差異;但並不會使任何剖析器變得萬無一失。請保留來源證據、檢查每筆記錄的問題或 損毀欄位,並以其他跡證或實作驗證具有重大影響的發現。
以下說明保留了先前記載於 Juntei 主要 README 中的驗證資訊。目前的測試資料與實作細節, 請參閱所連結的剖析器儲存庫。
Amcache¶
Juntei 使用 ys-amcache-parser,這是 Security Ronin 的 amcache-forensic 之 Apache-2.0 分支。其 輸出文件 定義了每一個執行檔、裝置、發現與摘要欄位。
主檔案表¶
ys-ntfs-parser 的 mft crate 是 Omer
Ben-Amram 的 mft crate 之維護分支。在八個 $MFT 檔案中——包括該 crate 的
範例、NIST 駭客入侵案例,以及六個 DFIR Artifact Museum 檔案——共 1,048,733 列 CSV 的資料列與欄位
依序與參考剖析器一致。比較涵蓋預設輸出、--all-times、
--short-names 與 --cutoff;時間戳記的呈現方式則是刻意保留的差異。
NTFS 交易記錄 ($LogFile)¶
ys-ntfs-parser 的 logfile crate 以 Sootmark ntfslog 為基礎進行維護。其驗證涵蓋六份完整的 DFIR Artifact Museum 記錄、公開的 1.1 版與 2.0 版測試資料、解碼後的 redo/undo 中繼資料,以及與獨立剖析之 NTFS 資料 相互比較的日誌寫入。詳細的涵蓋範圍與已知差異,請參閱該剖析器儲存庫。
Juntei 另外加入了 CLI 測試:在公開的 go-ntfs 測試磁碟區(2,129 筆記錄)上比較每個 CSV 欄位與 JSON 及 JSONL,
驗證分開的 redo/undo 資料與原始酬載長度、測試損毀的記錄、
拒絕覆寫證據,並防止目前的 MFT 路徑追蹤到被重複使用的記錄編號。
迴歸測試案例會區分受影響的 MFT 記錄與其寫入時所經由的開啟中屬性、
檢查扁平的目錄項目/資料屬性中繼資料,並防止跨磁碟區的 MFT 配對。
多磁碟區的 auto-parse 測試則涵蓋分開的 CSV 檔案,以及帶有出處資訊的單一 JSONL 檔案。
此命令也在六份私人收集的 Windows 記錄上進行過檢查:所匯出的全部 708,465 筆 CSV
記錄均與 JSONL 逐欄一致,且各主機的 auto-parse 匯出也保留了相同的記錄
筆數。這些來源證據並未隨儲存庫散布。這些檢查驗證的是輸出的
一致性,而非每一筆記錄下來的交易都代表一個已完成的使用者動作。
Prefetch¶
ys-prefetch-parser 是 ForensicRS 的 frnsc-prefetch 之維護分支。其解碼輸出曾與 libyal 獨立的 Prefetch 實作 libscca 進行比較。
USN 日誌¶
ys-ntfs-parser 的 usn crate 是
Sootmark usn 的維護分支。在六份真實的日誌上,只要獨立剖析器能解析出路徑,
Juntei 考量時間因素的父路徑都與其一致。Juntei
也解析出了比較對象未能解析的 4,321 筆記錄。其擷取器在 880 MB 的 $MFT 資料上測試時,
沒有產生任何錯誤的記錄。
目錄索引 ($I30)¶
ys-ntfs-parser mft crate 中的 i30 模組會讀取 INDX
記錄及其 slack。在以 ntfs-3g 建立之磁碟區的兩個 $I30 資料流(Juntei 的
test_files/i30/)以及三個由 Windows 寫入的公開 $I30 範例上,其使用中與位於
slack 中的項目,均與 Maxim Suhanov 的 dfir_ntfs 一致,名稱與時間
也相同。當 dfir_ntfs 回報超過 32 位元的父參照(父參照被覆寫的位元組)時,
Juntei 會將父項目保留為空白。
開機磁區 ($Boot)¶
ys-ntfs-parser 的 boot crate 是 Yamato
Security 自行開發的。在 DFIR Artifact Museum 的五個公開 $Boot 檔案(Windows 10、11 與
Server 2012 R2)上,每個欄位都與參考剖析器一致。在以 mkntfs 建立、磁區大小為 512、
1,024 與 4,096 位元組,叢集大小為 4 KiB 至 64 KiB 的磁碟區上,大小、$MFT 與 $MFTMirr
叢集以及序號均與 The Sleuth Kit 的 fsstat 一致。Museum 的 Windows 11 $Boot
具有與同一主機之 LNK 檔案所記錄相同的磁碟區序號,且這五個檔案具有
相同的開機程式碼。
安全性描述元 ($Secure:$SDS)¶
ys-ntfs-parser 的 secure crate 是 Yamato
Security 自行開發的。在 Museum 的五個 $SDS 資料流(7,808 個描述元、60,781 個 ACE)中,
安全性 ID、雜湊、位移、擁有者、群組、控制旗標與 ACE 數量均與參考
剖析器一致,且每個 ACE 的類型、旗標、遮罩、SID 與物件類型均與 dissect.ntfs 一致。每個
記錄的雜湊都屬於其描述元,每份鏡像副本都與其項目一致,且每個描述元都有
SDDL,包括其 3,384 個回呼 ACE 的條件。
SRUM¶
ys-srum-parser 以 Sootmark 的
ese 與 srum crate 為基礎。在
11 個真實資料庫中,所輸出之 45,255 筆項目的每個欄位,都與對 dissect.esedb 所提供之值
進行的獨立解碼結果一致。
使用者存取記錄¶
parse-ese ual 使用相同的 ESE 讀取器讀取 UAL 資料庫。在 16 個真實資料庫(308 筆資料列,
其中 145 筆為用戶端資料列)中,每個值都與對 dissect.esedb 所提供之值進行的獨立解碼結果一致。
在每一筆用戶端資料列中,有計數的日子都從 InsertDate 的 UTC 日期開始、到 LastAccess 的
UTC 日期為止,且其總和等於 TotalAccesses。
網頁瀏覽器¶
ys-browser-parser 是 Sootmark 的 browser、
sqlite 與 plist crate 之維護分支,是在相同的資料庫上與另一個 Rust 函式庫以及 Plaso、
Velociraptor(SQLiteHunter)與 Hindsight 比較後選定的。parse-sqlite browser 曾在 38 個公開資料庫上,
與以 sqlite3 函式庫讀取各資料庫連同其 -wal 檔案之複本的結果進行比較:這些資料庫包括 Plaso 的
測試檔案(Chrome 8 至 68、Firefox 2 至 118)、由 Chromium 150 與 Firefox 140 建立的設定檔,以及
ys-browser-parser 的表單歷程測試資料庫。全部 293 筆造訪、21 筆下載、692 個 Cookie 與 41 筆表單項目
皆一致。已刪除的項目只在確實有項目被刪除之處才被復原:即從 Firefox 140 歷程中刪除的兩個網頁與兩筆
造訪(連同其時間、URL 與標題),以及測試資料庫中已刪除的表單項目。
Internet Explorer 與舊版 Edge(WebCache)¶
parse-ese webcache 使用 ys-browser-parser
讀取 WebCacheV01.dat。它曾在 Plaso 的兩個公開 WebCache 資料庫上與 dissect.database 的 ESE 讀取器
進行比較:一個是 Internet Explorer 11 的資料庫,另一個是處於 dirty 狀態、含有舊版 Edge 瀏覽歷程記錄、
下載與 Cookie 的 Windows 10 資料庫。全部 4,156 筆資料列逐值一致:44 個容器、182 筆歷程記錄項目、
6 筆下載、170 個 Cookie 與 3,754 筆其他項目。比較時另行獨立解碼了下載記錄。資料庫標記為已刪除的
記錄,在兩邊皆予以排除。
Outlook¶
parse-file outlook 使用 ys-outlook-parser
讀取 PST、OST、.msg 與 .oft 檔案;其 PST 與 OST 讀取器是 Microsoft 的
outlook-pst-rs 之分支,而其 .msg 讀取器則是依據
Microsoft 的公開規格撰寫而成。
- PST 與 OST:66 個公開的 PST 與 OST 檔案(Apache Tika、artemis、Aspose.Email 範例、DFIR Artifact Museum、Enron、GroupDocs 範例、java-libpst、libyal 的測試資料、outlook-pst-rs 與 pst-extractor)曾與 libpff 逐一屬性進行比較:涵蓋每個存放區、資料夾、郵件、收件者與附件的每一個 屬性,以及每個附件的資料。324,175 個值相同,且沒有任何無法解釋的差異。其餘部分為:只有 ys-outlook-parser 讀得到的內容(libpff 無法讀取之郵件、收件者與附件,以及一個它無法開啟之存放區的 15,846 個值;隱藏項目的 8,223 個值)、其資料列標示為不存在、libpff 卻以空白或零呈現的收件者儲存格 (49,077 個)、依 MAPI 方式計算的資料夾 entry ID 與類型(2,004 個),以及 libpff 以原始資料呈現的 物件與內嵌郵件(480 個)。其中有兩個檔案,兩邊的讀取器都完全無法讀取。
.msg與.oft:214 個公開檔案,含 2,404 個郵件、收件者與附件以及 41,002 個屬性,曾與 extract-msg 進行比較:110,114 個值相同,而不同的 791 個值都各有解釋:其中 601 個是 extract-msg 在 時間上的錯誤,35 個來自它以錯誤字碼頁解碼的 ANSI 檔案,其餘則是它遺漏或額外加入的內容。- 損毀的輸入:超過 260,000 個經變異的
.msg檔案與 160,000 個經變異的 PST,以及特製的檔案, 皆在未發生當機、停滯或記憶體無限制增長的情況下讀取完成。
LNK 捷徑¶
ys-lnk-parser 是 Sootmark 的 shell crate 之維護分支。它曾在 1,118 個公開 捷徑上進行比較。在與參考剖析器共有的 30 個 CSV 欄位中,有 16 個個別值不同: 13 個目標路徑涉及損毀、截斷、預留位置、MTP 或控制台項目;兩份 額外資料區塊清單涉及未知或截斷的區塊;以及一個參考剖析器從不同位元組讀取的 MFT 參照。Juntei 會回報損毀的結構,而不是默默地 將其正規化。
Jump Lists¶
ys-jump-lists-parser 使用 Sootmark 的
複合檔案與 Jump List 相關成果,內嵌的連結則由 ys-lnk-parser 解碼。在 77 個公開的
Jump Lists 中,全部 13,057 個共同比較的儲存格——包括精確到 100 ns 的時間戳記——都與
參考剖析器一致。參考剖析器拒絕處理的六個檔案(空白的自訂清單、缺少頁尾,或
並非 Jump List 的檔案),Juntei 則加以解碼或明確地回報。
ShimCache¶
ys-shimcache-parser 是
Security Ronin 的
shimcache-forensic 之維護分支,並加入了登錄區與
交易記錄的支援。在 20 個公開的 SYSTEM 登錄區(24 個控制集與 7,290 個項目)以及 17 個
獨立的 AppCompatCache 值上,每個項目的路徑、時間、執行旗標、旗標與
位置都與參考剖析器的輸出一致。
Microsoft Defender 隔離資料¶
ys-defender-history-parser 是
Sootmark 的
defender crate 之維護分支。由剖析器的測試工具以 Defender
格式寫入的隔離資料夾,可由獨立的
dissect.target 隔離資料讀取器一致地解碼。
從登錄檔衍生的跡證¶
ys-registry-parser 會與 yarp 比較已配置的機碼、值、dirty 登錄區的交易重播、 可用 cell 復原、cell slack、登錄區 bin 之外的資料,以及因重播而被移除或取代的記錄。 各跡證特定的比較包括:
- 來自 Windows 7 與 dirty Windows 11
SYSTEM登錄區的服務、值與失敗動作; - 在九個公開
NTUSER.DAT登錄區上,以 yarp 與 libfwsi 解碼的 RecentDocs; - 在涵蓋 Windows 7–11、Server 2012 R2 與 Server 2022 的七個公開
SOFTWARE登錄區上, 以 yarp 獨立解碼的排程工作;以及 - 在七個公開
SAM登錄區上,與dissect.target比較的 SAM 帳戶結構。
完整的參考工具、格式研究、規格與公開證據來源清單,請參閱致謝。