@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

EventLogとEVTX

eventlogedit が利用されると、イベントログ内で個別のレコードが削除されます。

下記Blogでは、eventlogeditがレコードを削除する仕組み、検出ツールとサンプルのEVTXファイルが紹介されています。

blog.fox-it.com

 サンプルEVTXファイルの内容を確認したいと思います。EVTXのファイル形式については、Windows XML Event Log (EVTX) format の資料を参考にしています。

 サンプルファイル post-Security.evtx をイベントビューアで開きます。イベントビューアでは「4616(S): The system time was changed.」のレコードを確認できません。

f:id:hideakii:20171223153142p:plain

 File header

f:id:hideakii:20171223141431p:plain

45 6C 66 46 69 6C 65 00 "ElfFile\x00" Signature
00 00 00 00 00 00 00 00 First chunk number
01 00 00 00 00 00 00 00 Last chunk number ⇒ 1
7F 00 00 00 00 00 00 00 Next record identifier ⇒ 127
80 00 00 00 Header size ⇒ 128
01 00 Minor version
03 00 Major version
00 10 Header block size(or chunk data offset) ⇒ 4096
02 00 Number of chunks ⇒ 2
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Unknown (Empty values)
00 00 97 1B File flags
1A 82 44 3F Checksum

 Chunk header(Chunk 1)Size 512

f:id:hideakii:20171223142406p:plain

45 6C 66 43 68 6E 6B 00 "ElfChnk\x00" Signature
01 00 00 00 00 00 00 00 First event record number ⇒ 1
66 00 00 00 00 00 00 00 Last event record number ⇒ 102
01 00 00 00 00 00 00 00 First event record identifier ⇒ 1
66 00 00 00 00 00 00 00 Last event record identifier ⇒ 102
80 00 00 00 Header size (or offset to pointer data) ⇒ 128
A0 FA 00 00 Last event record data offset ⇒ 64,160
80 FD 00 00 Free space offset ⇒ 64,896
10 78 56 8C Event records checksum
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Unknown (Empty values)
01 00 00 00 Unknown (flags?)
84 B9 53 5B Checksum

 Chunk header(Chunk 2)Size 512

4096+65536 = 69,632

f:id:hideakii:20171223143732p:plain

45 6C 66 43 68 6E 6B 00 "ElfChnk\x00"  Signature
67 00 00 00 00 00 00 00 First event record number ⇒ 103
7E 00 00 00 00 00 00 00 Last event record number ⇒ 126
67 00 00 00 00 00 00 00 First event record identifier ⇒ 103
7E 00 00 00 00 00 00 00 Last event record identifier ⇒ 126
80 00 00 00 Header size (or offset to pointer data) ⇒ 128
28 5D 00 00 Last event record data offset ⇒ 23,848
F8 61 00 00 Free space offset ⇒ 250.080
A1 A8 17 5D Event records checksum
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Unknown (Empty values)
01 00 00 00 Unknown (flags?)
5F 2D 86 33 Checksum

 Event record ID 104

f:id:hideakii:20171223150709p:plain

2A 2A 00 00  "\x2a\x2a\x00\x00" Signature
68 06 00 00 Size ⇒ 1,640
68 00 00 00 00 00 00 00 Event record identifier ⇒ 104
55 CB 22 91 22 74 D3 01 Written date and time ⇒ FILETIME (UTC): 12/13/2017 2:56:33 PM、FILETIME (local): 12/13/2017 11:56:33 PM

 

上記Size値から、レコード104は73,608~75,248の範囲だと分かります。
しかし、オフセット 74,288 には Event record ID 105 のシグネチャがあります。
この部分が削除されているレコードとなります。

f:id:hideakii:20171223152702p:plain

2A 2A 00 00  "\x2a\x2a\x00\x00" Signature
C0 03 00 00 Size ⇒ 960
69 00 00 00 00 00 00 00 Event record identifier ⇒  105
00 26 28 96 22 74 D3 01 ⇒ FILETIME (UTC): 12/13/2017 2:56:42 PM、FILETIME (local): 12/13/2017 11:56:42 PM

 

オフセット 75,248 には再び、 Event record ID 105 のシグネチャが登場します。 

f:id:hideakii:20171223153545p:plain

2A 2A 00 00 "\x2a\x2a\x00\x00" Signature
38 04 00 00 Size ⇒ 1080
69 00 00 00 00 00 00 00 Event record identifier ⇒  105
37 B8 ED 96 22 74 D3 01 ⇒ FILETIME (UTC): 12/13/2017 2:56:43 PM、FILETIME (local): 12/13/2017 11:56:43 PM

 

イベントビューアでは、12/13/2017 11:56:42 PM のレコードが無い事を確認できます。

参考URL:

blog.fox-it.com

 

github.com

github.com

Windows 10 and Windows Server 2016 security auditing and monitoring reference
https://www.microsoft.com/en-us/download/details.aspx?id=52630

[MS-EVEN6]: BinXml Example Using Templates

 

f:id:hideakii:20171223154827j:plain

RegistryとTransaction log files

Windows 10 環境で取得した ntuser.dat.LOG1 ファイルのデータ内容を確認します。

ファイルフォーマットについては「Windows registry file format specification」のNew format を参照しています。

 ファイルの先頭 512バイトは、Base block となっており、NTUSER.DAT ファイルの一部バックアップとなっています。(部分的には異なる)

f:id:hideakii:20171210091124p:plain

Log entries

オフセット512からLog entrieが開始されます。

f:id:hideakii:20171210092120p:plain

48 76 4C 45 Signature ⇒ HvLE
00 8E 01 00 Size ⇒ 101,888
00 00 00 00 Flags 
9B 01 00 00 Sequence number
00 50 0E 00 Hive bins data size ⇒ 937,984
0D 00 00 00 Dirty pages count ⇒ 13
4E 8D E6 65 CA 45 AE 85 Hash-1 
E7 5 DD 9B AE 69 9 EC 79 Hash-2 

 Dirty pages references

オフセット40から Dirty pages references が Dirty pages count 分(=13)続きます。

f:id:hideakii:20171210092829p:plain

00000000 Offset ⇒ 0
00100000 Size ⇒ 4096
00000300 Offset ⇒ 196,608
00100000 Size ⇒ 4096 
00600300 Offset ⇒ 221,184
00100000 Size ⇒ 4096
00300600 Offset ⇒ 405,504
00200000 Size ⇒ 8192
00C00600 Offset ⇒ 442,368
00100000 Size ⇒ 4096
00B00700 Offset ⇒ 503,808
00100000 Size ⇒ 4096
00E00700 Offset ⇒ 516,096
00100000 Size ⇒ 4096
00200800 Offset ⇒ 532,480
00100000 Size ⇒ 4096
00600B00 Offset ⇒ 745,472
00100000 Size ⇒ 4096
00000C00 Offset ⇒ 786,432
00100000 Size ⇒ 4096
00A00C00 Offset ⇒ 827,392
00800000 Size ⇒ 32768
00A00D00 Offset ⇒ 892,928
00100000 Size ⇒ 4096
00D00D00 Offset ⇒ 905,216
00400000 Size ⇒ 16,384

Dirty page

例えば、「RegistryとFile format(3)」で参照した UserInitMprLogonScript 値は NTUSER.DAT ファイル内の、Hive Bins Data のオフセット 443,304 にあります。

上記 Dirty pages reference の Offset 値から、オフセット  442,368 のDirty Page内にデータが含まれている事を確認できます。

NTUSER.DAT.LOG1 ファイル内では、Base block 512 + Log entrie 40 + Dirty pages references 104 + 4096 + 4096 + 4096 + 8192 = 21,136 からの 4096 バイトになります。

f:id:hideakii:20171210100005p:plain

30 00 00 00 Size ⇒ 48
76 6B Signature ⇒ vk
16 00 Name length ⇒ 22
3C 00 00 00 Data size ⇒ 60
28 33 0E 00 Data offset  ⇒ 930,600
01 00 00 00 Data type ⇒ REG_SZ
01 00 Flags 
04 00  Spare
55736572496E69744D70724C6F676F6E5363726970746D00 ⇒ UserInitMprLogonScriptm

削除データの復元

yarp: yet another registry parser を利用すると、削除データの復元が可能です。

このツールはトランザクションログにも対応しており、オプション指定により含める・含めないを選択できます。 

f:id:hideakii:20171216100611p:plain

--deleteオプションを利用した出力結果で、削除された値を確認できました。

---

Key path: Environment
Last written timestamp (UTC): 2017-12-09 05:58:21.726800
Access bits: 2

Value name: Path
Value type: REG_EXPAND_SZ
Data size: 102
Data (decoded):
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

Value name: TEMP
Value type: REG_EXPAND_SZ
Data size: 66
Data (decoded):
%USERPROFILE%\AppData\Local\Temp

Value name: TMP
Value type: REG_EXPAND_SZ
Data size: 66
Data (decoded):
%USERPROFILE%\AppData\Local\Temp

Value name: OneDrive
Value type: REG_SZ
Data size: 56
Data (decoded):
C:\Users\forensics\OneDrive

Associated deleted values below (may contain reallocated data):

Value name: UserInitMprLogonScript
Value type: REG_SZ
Data size: 60
Data (decoded):
c:\users\forensics\mrset.bat

---

 snip

---

Deleted values (all, may contain reallocated data):

Value name: UserInitMprLogonScript
Value type: REG_SZ
Data size: 60
Data (decoded):
c:\users\forensics\mrset.bat

 素晴らしい!

 

参考URL:

github.com

github.com

www.slideshare.net

f:id:hideakii:20171216101947j:plain

RegistryとFile format(3)

レジストリから値を削除し、変化を確認します。
サンプルとして、HKEY_CURRENT_USER\Environment 配下にUserInitMprLogonScript値を作成します。
この値はAPT28で自動起動の手口としても利用されています。

f:id:hideakii:20171209114741p:plain

この値のオフセット位置を確認します。

Registry Explorer の Technical Details で Relative offset を確認します。
オフセット位置は 4096+968=5064 になります。

f:id:hideakii:20171209142903p:plain

 次に、Value list cell index のオフセットを確認します。
オフセット位置は 4096+443352=447448 となります。 Value countは5ですから、5個の値があります。

f:id:hideakii:20171209143216p:plain

NTUSER.DAT のオフセット 447448 を参照します。 

f:id:hideakii:20171209143539p:plain

E0 FF FF FF -32

C8 18 01 00 ⇒ 71880 ⇒ Path
58 19 01 00 ⇒ 72024 ⇒ TEMP
D0 19 01 00 ⇒ 72144 ⇒ TMP
B8 4D 07 00 ⇒ 478648 ⇒ OneDrive
A8 C3 06 00 ⇒ 443304 ⇒ UserInitMprLogonScript ⇒ 4096+443304=447400
A8 C3 06 00 ⇒ 443304
00 00 41 00 ⇒ 4259840 

Registry Explorer では下記から確認できます。Data のオフセット位置は 4096+930600 =934696 です。

f:id:hideakii:20171209144621p:plain

オフセット位置934696で値を確認します。

f:id:hideakii:20171209145341p:plain

 値を削除

レジストリ Environment キーからUserInitMprLogonScript値を削除します。

f:id:hideakii:20171209145806p:plain

Registry ExplorerからNTUSER.DATを参照し、UserInitMprLogonScript値が無い事を確認します。

f:id:hideakii:20171209150413p:plain

値を削除した後のNTUSER.DAT で、オフセット 447448 を参照します。Value list cell index の内容を確認します。 Value countは4となっています。

f:id:hideakii:20171209151400p:plain

E0 FF FF FF
C8 18 01 00
58 19 01 00
D0 19 01 00
B8 4D 07 00
A8 C3 06 00 ⇒ 443304 ⇒ UserInitMprLogonScript ⇒ 4096+443304=447400
A8C30600
00004100

NTUSER.DAT のオフセット 447400 を確認します。

f:id:hideakii:20171209151618p:plain

NTUSER.DAT のオフセット位置 4096+930600 =934696 で Data 内容を確認します。

f:id:hideakii:20171209152025p:plain

  削除された値を確認できました。

  次はLOGファイルを確認してみたいと思います。

参考URL:

 

port139.hatenablog.com

github.com

 

f:id:hideakii:20171209153323j:plain

RegistryとFile format(2)

前回の続きです。
ROOTキー(nk)のサブキーを確認します。
ROOTキー配下に、サブキーは 9個あります。

f:id:hideakii:20171202083359p:plain

ROOTキーのCELL内容から、サブキーのリストはオフセット位置 72,288(4096 + 68,192)である事を確認できます。

09 00 00 00 Number of subkeys ⇒ 9
01 00 00 00 Number if volatile subkeys ⇒ 1
60 0A 01 00 Subkey list offset ⇒ 68,192

NTUSER.DAT のオフセット 72,288 を参照します。

f:id:hideakii:20171202083827p:plain

Hash leaf (lh)

A0 FF FF FF Cell Size ⇒ -96
6C 68 Signature ⇒ lh ⇒ Hash leaf (lh)
09 00 Number of elements ⇒ 9
78 00 00 00 Key node offset ⇒ 120
86 BC AC 05 Name hash
E8 00 00 00 Key node offset ⇒ 232
23 8E C0 55 Name hash
70 02 00 00 Key node offset ⇒ 624
B9 D7 9C BD Name hash
C8 03 00 00 Key node offset ⇒ 968
C9 CE 48 6F Name hash
28 04 00 00 Key node offset ⇒ 1,064
35 25 37 00 Name hash
20 10 01 00 Key node offset ⇒ 69,664
87 6E 02 E5 Name hash
70 03 00 00 Key node offset ⇒ 880
4B BE 5B 71 Name hash
80 04 00 00 Key node offset ⇒ 1,152
63 14 FE E9 Name hash
68 05 00 00 Key node offset ⇒ 1,384
F9 D0 41 61 Name hash
68050000F9D04161382D303332462D31

Control Panel key

サブキーを更に辿ってみます。

Key node offset ⇒ 624」のサブキーを確認する為、オフセット 4,720(4096 + 624) を参照します。

f:id:hideakii:20171202085538p:plain

A0 FF FF FF Cell Size ⇒ -96
6E 6B Signature ⇒ nk
20 00 Flag
EF 1B CF D2 B9 55 D3 01 ⇒ Last written timestamp ⇒ 11/4/2017 10:11:11 PM
02 00 00 00 Access bits
20 00 00 00 Parent 
0F 00 00 00 Number of subkeys ⇒  15
00 00 00 00 Number of volatile subkeys
60 1F 01 00 Subkeys list offset ⇒ 73,568
FF FF FF FF Volatile subkeys list offset
01 00 00 00 Number of key values ⇒ 1
50 81 07 00 Key values list offset ⇒ 491,856
C8 22 00 00 Key security offset  ⇒ 8,904
FF FF FF FF Class name offset
1E 00 00 00 Largest subkey name length
00 00 00 00 Largest subkey class name length
38 00 00 00 Largest value name length
08 00 00 00 Largest value data size
00 00 00 00 WorkVar
0D 00 Key name length ⇒ 13
00 00 Class name length
436F6E74726F6C2050616E656C ⇒ Control Panel
000000

Key values list

値リストを確認する為、オフセット 495,952( 4096 + 491,856 )を参照します。

f:id:hideakii:20171202091546p:plain

F8 FF FF FF Size ⇒ -8
B8 85 02 00 Key value offset ⇒ 165,304

Key value

f:id:hideakii:20171202092618p:plain

値を確認する為、オフセット 169,400 (4096 + 165,304)を参照します。

f:id:hideakii:20171202092010p:plain

C8 FF FF FF Size ⇒ -56
76 6B Signature
1C 00 Name length ⇒ 28
08 00 00 00 Data size ⇒ 8
F0 85 02 00 Data offset ⇒ 165,360
03 00 00 00 Data Type ⇒ REG_BINARY
01 00 Flags
0D 00 Spare
53657474696E6773457874656E73696F6E417070536E617073686F74 ⇒ SettingsExtensionAppSnapshot
656C0100

Value data

データ内容を確認する為、オフセット 139,456 (4096 + 165,360)を参照します。 

f:id:hideakii:20171202093233p:plain

F0 FF FF FF Size ⇒ -16
00 00 00 00 00 00 00 00 Data
09 04 09 04 Slack

 

 参考URL:

github.com

 

f:id:hideakii:20171202094019j:plain

RegistryとFile format(1)

レジストリのバイナリ構造について確認します。レジストリファイルの構造については、「Windows registry file format specification」の資料を参考にします。

サンプルのレジストリファイルは Windows 10 のNTUSER.DAT を利用します。

f:id:hideakii:20171126081916p:plain

Base Block

72 65 67 66 Signature regf
0C 01 00 00 Primary sequence number
0C 01 00 00 Secondary sequence number
00 00 00 00 00 00 00 00 Last written timestamp
01 00 00 00 Major version
05 00 00 00 Minor version
00 00 00 00 File type ⇒ 0 means primary file
01 00 00 00 File format ⇒ 1 means direct memory load
20 00 00 00 Root cell offset ⇒ 32
00 50 0E 00 Hive bins data size ⇒ 937,984
01 00 00 00 Clustering factor 
3F 00 5C 00 43 00 3A 00 5C 00 55 00 73 00 65 00 72 00 73 00 5C 00 66 00 6F 00 72 00 65 00 6E 00 73 00 69 00 63 00 73 00 5C 00 6E 00 74 00 75 00 73 00 65 00 72 00 2E 00 64 00 61 00 74 00 00 00 File Name
Offset 112
74 A1 A6 47 14 A5 E7 11 A9 4E EC 0D 9A 05 C8 60 RmId
74 A1 A6 47 14 A5 E7 11 A9 4E EC 0D 9A 05 C8 60 LogId
00 00 00 00 Flags
75 A1 A6 47 14 A5 E7 11 A9 4E EC 0D 9A 05 C8 60 TmId
72 6D 74 6D GUID signature ⇒ rmtm
22 CD DD 2A 10 64 D3 01 Last reorganized timestamp ⇒  11/23/2017 4:04:32 AM
4F665267010000000000000000000000 ⇒ ???

Hive bin

f:id:hideakii:20171126084958p:plain

68 62 69 6E Signature hbin
00 00 00 00 Offset
00 10 00 00 Size ⇒ 4096
00 00 00 00 00 00 00 00 ⇒ Reserved
00 00 00 00 00 00 00 00 ⇒ Timestamp
00 00 00 00 Spare (or MemAlloc)

Cell

A8 FF FF FF Size ⇒ -88 (negative if a cell is allocated)
6E 6B nk ⇒ Key node (nk) ⇒ Registry key node
2C 00 Flags
01 21 E3 2A 10 64 D3 01 Last written timestamp(UTC) ⇒ 11/23/2017 4:04:32 AM
02 00 00 00 Access bits
98 07 00 00 Parent
09 00 00 00 Number of subkeys ⇒ 9
01 00 00 00 Number if volatile subkeys ⇒ 1
60 0A 01 00 Subkey list offset ⇒ 68,192 
68 02 00 80 Volatile subkey list offset
00 00 00 00 Number of key values
FF FF FF FF Key values list offset
50 65 00 00 Key security offset
FF FF FF FF Class name offset
2A 00 00 00 Largest subkey name length
00 00 00 00 Largest subkey class name length
00 00 00 00 Largest value name length
00 00 00 00 Largest value data size
00 00 00 00 WorkVar
04 00 Key name length
00 00 Class name length
52 4F 4F 54 00 00 00 00 ⇒ ROOT

 Registry ExplorerでROOTキーのTechnical detailesを参照すれば、簡単に確認できます。

f:id:hideakii:20171126092559p:plain

 

参考URL:

www.slideshare.net

github.com

github.com

https://posts.specterops.io/hiding-registry-keys-with-psreflect-b18ec5ac8353

f:id:hideakii:20171126092356j:plain

USN Journal と Timestamp

タイムスタンプを変更した場合の、USN ジャーナルの動作について確認してみます。検証環境は Windows 10 1709 です。

E:ドライブに crocodile.jpg ファイルをコピーし、USN Journal を確認します。

fsutil usn readjournal e: csv > output.csv

f:id:hideakii:20171119074247p:plain

Autopsy で $SI と $FN 値を確認します。

f:id:hideakii:20171119074957p:plain

次に、BulkFileChanger を利用し、タイムスタンプを変更します。今回は、2017年を1973年へ変更しています。

f:id:hideakii:20171119075413p:plain

Autopsy で $SI と $FN を確認します。$SI のタイムスタンプが 1973年になっている事を確認できます。秒以下のタイムスタンプ精度については、完全には維持されていません。

f:id:hideakii:20171119075635p:plain

USN Journal を確認します。Basic info change を USN 612 で確認できます。

fsutil usn readjournal e: csv > output2.csv

f:id:hideakii:20171119080229p:plain

SetMACE

 SetMace ツールを利用してタイムスタンプを変更します。変更するタイムスタンプは $SI だけとしています。

SetMace64.exe e:\crocodile.jpg -z "2000:01:01:00:00:00:789:1234" -si

f:id:hideakii:20171119080650p:plain

Autopsy で $SI と $FN を確認します。Last User Journal Update Sequence Numberは 704 のままです。

f:id:hideakii:20171119080843p:plain

 USN Journal を確認します。

f:id:hideakii:20171119081402p:plain

 HIDDEN COBRA

US-CERT から出ているアラート「HIDDEN COBRA – North Korean Trojan: Volgmer」には関連するマルウェアとして下記レポートが含まれていますます。  

https://www.us-cert.gov/sites/default/files/publications/MAR-10135536-D_WHITE_S508C.PDF より引用

When the files are decompressed, Ins.dll is installed into "%system32%\appnettimgr.dll" as a service named "appnettimgr." appnettimgr is designed to modify its file created timestamp to match that of notepad.exe."  

 マルウェア実行後のUSN Journal は次のようになります。

f:id:hideakii:20171119091508p:plain

参考URL:

www.us-cert.gov

www.hybrid-analysis.com

github.com

FileDate Changer v1.1 - Change the created/modified time of files

 

BulkFileChanger: Change date/time/attributes of multiple files

 

f:id:hideakii:20171119091644j:plain

RegisterXLLとAutoruns

トレンドマイクロ社のブログ「ChessMaster’s New Strategy: Evolving Tools and Tactics」には下記の記述があります。

The Powershell script leverages RegisterXLL, which is a component of Excel, to load BKDR_ANEL into Excel.exe

マルウェアは Excel の RegisterXLL を利用して起動しているようです、この仕組みは「Add-In Opportunities for Office Persistence」内の XLL “Add-Ins” for Excel" の項目が参考になります。

確認できるマルウェアファイルが無いので、実際にマルウェアが動作した場合にレジストリキーへ登録されるか未確認です。

アドインがレジストリキーに登録される場合、下記レジストリキーに OPTION 値として登録されます。

HKEY_CURRENT_USER\Software\Microsoft\Office\<Version>\Excel\Options

 Excel 2016 環境で XLL をアドインとして登録し、レジストリキーを確認します。OPEN 値に xll が登録されています。

f:id:hideakii:20171111130906p:plain

 Autoruns 13.80 で Office タブを確認。Option キーがチェック対象ではない為、Autoruns からは XLL の登録を確認できません。

f:id:hideakii:20171111131055p:plain

 XLL ファイルは DLL ですので、署名が無い DLL ファイルをチェックするなど、別の確認手段で発見する必要があります。

 

参考URL:

bettersolutions.com

 

Execute a DLL via .xll files and the Excel.Application object's RegisterXLL() method · GitHub

 

GitHub - MoooKitty/xllpoc: Code Exec via Excel

 

 

blog.trendmicro.com

blog.trendmicro.co.jp

 

 

f:id:hideakii:20171111133040j:plain

Win 10 と sdelete

Windows 10 ver 1709 上での sdelete コマンドの動作について。

Sdelete コマンドについては、Kazamiya さんが「SDelete | Forensicist」に詳しく整理されていますので、そちらを参照ください。

Picturesフォルダに JPEG ファイルを置いてあります。このボリュームは NTFS でフォーマットしてあります。

f:id:hideakii:20171111064956p:plain

JPEG 画像ファイルのメタ情報をAutopsy 4.5.0 で確認します。JPEG 画像ファイルのMFTレコード番号は 39 で、親フォルダ(Pictures)の MFT レコード番号は 43 です。

f:id:hideakii:20171111065457p:plain

sdelete を利用して JPEG ファイルを削除します。

f:id:hideakii:20171111065633p:plain

ファイルの削除後、E: ドライブを Autopsy で確認します。先ほどのJPEG画像ファイルは Pictures フォルダ配下ではなくroot上で発見できます。

$FN属性の Parent MFT Entry が 5 になっている事を確認できます。

f:id:hideakii:20171111070340p:plain

sdeleteはファイル名を26回変更しますが、ファイル名変更時に親フォルダをrootに設定するようですね。

フォルダを削除

再度 JPEG 画像ファイルを配置し、Pictures フォルダの単位で削除してみます。JPEG 画像ファイルの MFT レコード番号は 39、フォルダのMFTレコード番号は 43 です。

f:id:hideakii:20171111071815p:plain

JPEGファイルのファイル名変更されています。しかし、Picturesフォルダの名前は変更されていません。

f:id:hideakii:20171111072323p:plain

なお、JPEGファイルのデータ内容は 0x00 となっています。

f:id:hideakii:20171111073357p:plain

Cドライブ

C:ドライブでテストファイルを作成し、sdeleteで削除します。

f:id:hideakii:20171111073947p:plain

ファイル名の変更は行われていません。temp フォルダ配下で削除ファイルとして確認できます。データ内容は 0x00 になっています。

f:id:hideakii:20171111074158p:plain

参考URL:

docs.microsoft.com

 

https://jpcertcc.github.io/ToolAnalysisResultSheet_jp/details/sdelete.htm

 

 

f:id:hideakii:20171111080110j:plain

  

Rundll32 と Prefetch

Rundll32.exe を利用した DLL 実行と、プリフェッチファイルの関係について確認してみます。テストした環境は Win 10 1709 Build 16299.15 です。

DLL ファイルには、Didier Stevens さんの作られた cmd.dll を利用します。

Rundll32

Windows\Prefetch フォルダ配下にある .pf ファイルは削除しておきます。念のため WinPrefetchVew でも確認しておきます。

f:id:hideakii:20171105083007p:plain

rundll32 経由で cmd.dll を起動します。

f:id:hideakii:20171105083136p:plain

WinPrefetchViewで RunDll32 を確認します。RunDll32 のファイルリスト内に cmd.dll の項目を確認できます。

f:id:hideakii:20171105083441p:plain

 システムを再起動した後、AppCompatCache 内で cmd.dll のレコードを確認しましたが、これは存在しませんでした。

念のため、cmd.dll のパスを変更して再度テストしましたが、AppCompatCache 内にレコードは確認できませんでした。

SHELL32

次に Shell32.dll 経由で CMD.DLL を呼び出してみます。(プリフェッチファイルは事前に削除します。)

f:id:hideakii:20171105091643p:plain

プリフェッチファイルを確認します。

f:id:hideakii:20171105085944p:plain

 システムを再起動した後、AppCompatCache 内で cmd.dll のレコードを確認します。レコードが2件ありますが、これは念のためパスを変更した場合もテストしたものとなります。

f:id:hideakii:20171105091054p:plain

 shell32.dll 経由で cmd.dll を起動した場合、 AppCompatCache 内にレコードが残るようですね。

PowerShell

PowerShdll を利用し、Rundll32 経由で PowerShell を呼び出した場合。
rundll32.exe PowerShdll,main -w

f:id:hideakii:20171105123632p:plain

 

 

参考URL:
pentestlab.blog

www.attackdebris.com

 

blog.didierstevens.com

 

Chasing Adversaries with Autoruns – evading techniques and countermeasures – Windows Performance & Troubleshooting

 

github.com

 

f:id:hideakii:20171105162802j:plain

$LogFile (2) と Defrag

NTFSボリューム F: 上でデフラグを実行した場合に、$LogFile に記録される内容を確認してみます。

サンプルの画像ファイル crocodile.jpg のメタ情報を確認します。クラスタ番号 34848 からデータが配置されています。

$STANDARD_INFORMATION Attribute Values:
Flags: Archive
Owner ID: 0
Security ID: 264 (S-1-5-21-1901480256-120802936-2790681297-1000)
Created: 2017-10-29 00:28:07.050364800 (UTC)
File Modified: 2017-09-15 22:08:28.397301700 (UTC)
MFT Modified: 2017-09-15 22:08:28.397301700 (UTC)
Accessed: 2017-10-29 00:28:07.050364800 (UTC)

f:id:hideakii:20171029093801p:plain

DataRun

f:id:hideakii:20171029094627p:plain

 

デフラグを実行

F:ドライブ上で幾つかファイルを削除した後、デフラグを実行します。

デフラグ実行後の crocodile.jpg のメタ情報を確認します。新たにクラスタ番号 1992 からデータが配置されています。

また、MFT Modified のタイムスタンプはデフラグにより変化してない事を確認できます。

$STANDARD_INFORMATION Attribute Values:
Flags: Archive
Owner ID: 0
Security ID: 264  (S-1-5-21-1901480256-120802936-2790681297-1000)
Created: 2017-10-29 00:28:07.050364800 (UTC)
File Modified: 2017-09-15 22:08:28.397301700 (UTC)
MFT Modified: 2017-09-15 22:08:28.397301700 (UTC)
Accessed: 2017-10-29 00:28:07.050364800 (UTC)

 

f:id:hideakii:20171029095945p:plain

DataRun

f:id:hideakii:20171029101839p:plain

$LogFile

LogFileParser を利用して、デフラグ実行後の $LogFile ファイルをパースします。
フィルタを利用し、crocodile.jpg ファイルのレコードを表示します。

f:id:hideakii:20171029101105p:plain

デフラグ前の DataRun値 32 78 07 20 88 00 を $LogFile で検索します。オフセット位置 4AB70 でヒットしました。この値が含まれると考えられる $LogFile のレコードオフセットは 0x0004AB08 です。

f:id:hideakii:20171029103022p:plain

オフセット 0x0004AB08(LSN 1086817)のレコードをパースしてみます。

6195100000000000 this_lsn; ⇒ 1086817
5595100000000000 client_previous_lsn; ⇒
5595100000000000 client_undo_next_lsn;
40000000 client_data_length; ⇒ 64
0000 seq_number;
0000 client_index;
01000000 record_type;
18000000 transaction_id;
0000000000000000 reserved_or_alignment[3];
0900 redo_operation; ⇒ UpdateMappingPairs
0900 undo_operation; ⇒ UpdateMappingPairs
2800 redo_offset; ⇒ 40
1000 redo_length; ⇒ 16
3800 undo_offset;⇒ 56
0800 undo_length;⇒ 8
1800 target_attribute;
0100 lcns_to_follow;
1001 record_offset; ⇒ 272
4000 attribute_offset; ⇒ 64
0200 MFT Cluster Index
0200 alignment_or_reserved;
0D000000 Target VCN
00000000 Alignment or Reserved
0D630000 Target LCN
00000000 alignment_or_reserved1;
220001C807327806588100008AB1FFFF ⇒ redo data
3278072088000000 ⇒ undo data

 

上記の C807(1992)は新たに配置されたクラスタ番号のデータ部分になります。

クラスタの再配置により、クラスタ番号 1992 が長さ 1 で割り当てられた時点のデータである事を確認できます。

クラスタが徐々に割り当てられていく状況は、lf_DT_DataRuns のセル内容から確認ができます。

f:id:hideakii:20171029110351p:plain

 

参考URL:

 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

 

f:id:hideakii:20171029110743j:plain