NTFS には $LogFile があります。$LogFile を調べることで、ファイルシステム上で何か変化したかをより詳細に調べる事が可能です。
テストファイルの作成
Windows 10 環境上で VHD ディスクを作成し、USN ジャーナルを有効にします。
C:\Windows\system32>fsutil usn createjournal m=1 a=1 f:
C:\Windows\system32>fsutil usn queryjournal f:
Usn Journal ID : 0x01d34abf22ab9a4c
First Usn : 0x0000000000000000
Next Usn : 0x0000000000000000
Lowest Valid Usn : 0x0000000000000000
Max Usn : 0x7fffffffffff0000
Maximum Size : 0x0000000000100000
Allocation Delta : 0x0000000000040000
Minimum record version supported : 2
Maximum record version supported : 4
Write range tracking: Disabled
F:ドライブ上に test.txt ファイルを作成し、USN Journal を確認します。
C:\Windows\system32>echo sample > f:\test.txt
C:\Windows\system32>fsutil usn readjournal f:
USN Journal ID : 0x01d34abf22ab9a4c
First USN : 0
Next USN : 240
Start USN : 0
Min major version : Supported=2, requested=2
Max major version : Supported=4, requested=4Usn : 0
File name : test.txt
File name length : 16
Reason : 0x00000100: File create
Time stamp : 10/21/2017 15:52:26
File attributes : 0x00000020: Archive
File ID : 00000000000000000001000000000028
Parent file ID : 00000000000000000005000000000005
Source info : 0x00000000: *NONE*
Security ID : 0
Major version : 3
Minor version : 0
Record length : 96Usn : 80
File name : test.txt
File name length : 16
Reason : 0x00000102: Data extend | File create
Time stamp : 10/21/2017 15:52:26
File attributes : 0x00000020: Archive
File ID : 00000000000000000001000000000028
Parent file ID : 00000000000000000005000000000005
Source info : 0x00000000: *NONE*
Security ID : 0
Major version : 3
Minor version : 0
Record length : 96Usn : 160
File name : test.txt
File name length : 16
Reason : 0x80000102: Data extend | File create | Close
Time stamp : 10/21/2017 15:52:26
File attributes : 0x00000020: Archive
File ID : 00000000000000000001000000000028
Parent file ID : 00000000000000000005000000000005
Source info : 0x00000000: *NONE*
Security ID : 0
Major version : 3
Minor version : 0
Record length : 96
$LogFileのパース
$LogFile をエクスポートし、LogFileParser ツールを利用してパースします。
CSVファイルをExcelで開き、test.txt ファイルのレコードにフィルタします。
test.txtファイルに関連した 1行目のオフセットは 0x00035D48 となっています。これは MFTレコード番号 5番の $INDEX_ALLOCATION:$I30 へデータが追加された事を示しています。
F:\ にファイルが作成されたので、ルートフォルダ内のデータを管理している $INDEX_ALLOCATION:$I30 へレコードが追加されます。MFT レコード番号 5 番はボリューム root を意味します。
$LogFile 内でオフセット 0x00035D48 (220488) のデータ内容を確認します。
参考URLの資料をベースにバイナリをパースしてみます。
A96B100000000000 this_lsn; ⇒ 1076137
9D6B100000000000 client_previous_lsn; ⇒ 1076125
9D6B100000000000 client_undo_next_lsn;
90000000 client_data_length; ⇒ 144
0000 seq_number;
0000 client_index;
01000000 record_type;
18000000 transaction_id;
0400 reserved_or_alignment[3];
000000000000
0E00 redo_operation; ⇒ AddIndexEntryAllocation
0F00 undo_operation; ⇒ DeleteIndexEntryAllocation
2800 redo_offset;
6800 redo_length;
9000 undo_offset;
0000 undo_length;
4000 target_attribute;
0100 lcns_to_follow;
0000 record_offset;
7805 attribute_offset; ⇒ 1400
0000 MFT Cluster Index
0800 alignment_or_reserved;
00000000 Target VCN
00000000 Alignment or Reserved
24000000 Target LCN
00000000 alignment_or_reserved1;
上記では attribute_offset の値が 1400 となっています。$I30 でオフセット 1400 を確認してみます。$I30 に追加されたデータを確認できます。
USN レコード
USN ジャーナルには、test.txt のレコードが3件追加ます。ファイルシステム上でtest.txtファイルが作成されていく流れに従い、USN ジャーナルのレコードも記録されています。
test.txtファイルに関連した 3行目のオフセットは 0x00036260 (221792)となっています。これは $UsnJrnl の $DATA:$J にデータが追加された事を示しています。
$LogFile 内でオフセット 0x00036260 (221792)のデータを確認します。このレコードは、USN 番号 0 の作成に対応したレコードです。
4C6C100000000000 this_lsn; ⇒ 1076300
3B6C100000000000 client_previous_lsn; ⇒ 1076283
3B6C100000000000 client_undo_next_lsn;
78000000 client_data_length; ⇒ 120
0000 seq_number;
0000 client_index;
01000000 record_type;
18000000 transaction_id;
0400 reserved_or_alignment[3];
000000000000
0800 redo_operation; ⇒ UpdateNonresidentValue
0000 undo_operation;
2800 redo_offset;
5000 redo_length; ⇒ 80
7800 undo_offset; ⇒ 120
0000 undo_length;
4802 target_attribute;
0100 lcns_to_follow;
0000 record_offset;
0000 attribute_offset; ⇒ 0
0000 MFT Cluster Index
0000 alignment_or_reserved;
00000000 Target VCN
00000000 Alignment or Reserved
C8070000 Target LCN
00000000 alignment_or_reserved1;
USN_RECORD_V2 structure のデータが 80 バイト続きます。
参考URL:
NTFS Log Tracker - blueangel's ForensicNote
http://forensicinsight.org/wp-content/uploads/2013/06/F-INSIGHT-NTFS-Log-TrackerEnglish.pdf
https://www.sans.org/summit-archives/file/summit-archive-1493741055.pdf