當前位置:
首頁 > 新聞 > 滲透技巧——Windows下NTFS文件的USN Journal

滲透技巧——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的利用思路,給出取證上的建議。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

以索尼PSV為例,說說如何從F00D中提取密鑰?
首次在微軟商店中發現挖礦劫持軟體

TAG:嘶吼RoarTalk |