滲透技巧——Windows下NTFS文件的USN Journal
0x00 前言
在上篇文章《滲透技巧——Windows下NTFS文件的時間屬性》介紹了修改NTFS文件時間屬性的方法和細節,以及取證上的建議。 本文將要繼續研究NTFS文件另一處記錄文件修改時間的位置——USN Journal,同樣是分析利用思路,給出取證上的建議。
0x01 簡介
本文將要介紹以下內容:
·基本概念
·讀取USN Journal的方法
·利用思路
·取證建議
0x02 USN Journal的基本概念
官方文檔:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/bb742450(v=technet.10)
USN Journal (Update Sequence Number Journal),也稱作Change Journal,用來記錄NTFS volume中文件修改的信息,能夠提高搜索文件的效率。
每個NTFS volume對應一個USN Journal,存儲在NTFS metafile的$Extend$UsnJrnl中,也就是說,不同的NTFS volume對應的USN Journal不同。
USN Journal會記錄文件和目錄的創建、刪除、修改、重命名和加解密操作,每條記錄的格式如下:
typedef struct {
DWORD RecordLength;
WORD MajorVersion;
WORD MinorVersion;
DWORDLONG FileReferenceNumber;
DWORDLONG ParentFileReferenceNumber;
USN Usn;
LARGE_INTEGER TimeStamp;
DWORD Reason;
DWORD SourceInfo;
DWORD SecurityId;
DWORD FileAttributes;
WORD FileNameLength;
WORD FileNameOffset;
WCHAR FileName[1];
} USN_RECORD_V2, *PUSN_RECORD_V2;
官方資料:https://docs.microsoft.com/en-us/windows/desktop/api/winioctl/ns-winioctl-usn_record_v2
在NTFS metafile的$Extend$UsnJrnl$Max保存USN Journal文件的總大小,如果USN Journal的記錄長度超出總大小,會從最初始的記錄開始覆蓋。
0x03 讀取USN Journal的方法
1、使用命令fsutil usn
官方文檔:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc788042(v=ws.10)
(1)查看C盤的USN Journal信息
fsutil usn queryjournal c:
包括以下信息:
·Usn Journal ID
·First Usn
·Next Usn
·Lowest Valid Usn
·Max Usn
·Maximum Size
·Allocation Delta
(2)查看C盤所有的USN Journal
fsutil usn enumdata 1 0 1 c:
包括以下信息:
·File Ref#
·ParentFile Ref#
·Usn
·SecurityId
·Reason
·Name
輸出結果不夠詳細。
2、使用開源工具
(1)導出USN Journal
下載地址:
https://github.com/jschicht/ExtractUsnJrnl
參數如下:
ExtractUsnJrnl /DevicePath:c: /OutputPath:c: est /OutputName:UsnJrnl_vol1.bin
(2)將USN Journal轉為CSV格式輸出
下載地址:
https://github.com/jschicht/UsnJrnl2Csv
參數如下:
UsnJrnl2Csv /UsnJrnlFile:c: estUsnJrnl_vol1.bin /OutputPath:c: est
包括以下信息:
·Offset
·FileName
·USN
·Timestamp
·Reason
·MFTReference
·MFTReferenceSeqNo
·MFTParentReference
·MFTParentReferenceSeqNo
·FileAttributes
·MajorVersion
·MinorVersion
·SourceInfo
·SecurityId
輸出結果很完整。
3、c 實現
我這裡寫了一個簡單的示例代碼,下載地址:https://github.com/3gstudent/Homework-of-C-Language/blob/master/EnumUsnJournal.cpp
代碼實現了枚舉C盤的USN Journal,僅輸出文件名。
0x04 利用思路
1、清除所有USN Journal
(1)使用fsutil
fsutil usn deletejournal /d c:
註:我在測試環境下沒有刪除成功。
(2)API
https://docs.microsoft.com/en-us/windows/desktop/api/winioctl/ns-winioctl-delete_usn_journal_data
註:我在測試環境下沒有刪除成功。
2、清除單條USN Journal
我還沒有找到可用的API介面。
唯一的方法是直接修改NTFS文件,但是自nt6.x開始,Windows禁止載入未經簽名的驅動文件。
這裡可以嘗試使用付費版的WinHex對NTFS文件進行操作,修改$Extend$UsnJrnl中的內容。
也可以嘗試繞過驅動保護。
$UsnJrnl的內容可參考:
http://forensicinsight.org/wp-content/uploads/2013/07/F-INSIGHT-Advanced-UsnJrnl-Forensics-English.pdf
按照格式讀取USN Journal,刪除指定USN Journal,再寫入磁碟。
3、暴力覆蓋
首先查看磁碟USN Journal文件的總長度。
然後通過創建、刪除、修改、重命名等操作生成USN Journal的記錄,當超過總長度後會覆蓋最初始的記錄,直至覆蓋所有的USN Journal。
0x05 取證建議
1、讀取USN Journal,列出所有記錄,查找是否存在可疑記錄
該方法並非完全可信,攻擊者只要能夠繞過驅動保護,就能修改USN Journal。
2、嘗試其他方法
比如從內存中讀取$MFT records。
https://github.com/jschicht/HexDump
https://github.com/jschicht/MftCarver
Joakim Schicht的github有很多取證的工具值得參考:
https://github.com/jschicht/
0x06 小結
本文介紹了NTFS文件的USN Journal的利用思路,給出取證上的建議。
※以索尼PSV為例,說說如何從F00D中提取密鑰?
※首次在微軟商店中發現挖礦劫持軟體
TAG:嘶吼RoarTalk |