eCDFP Module (5) File System Analysis (Part-8) (NTFS File System Analysis)

Master Boot Record 


အပေါ်ကပုံကတော့ Master Boot Record (MBR) ဖြစ်ပါတယ်။ MBR Size က 512 Bytes ရှိပြီး Storage ရဲ့ပထမဦးဆုံး Sector မှာရှိပါတယ်။ Boot Strap Code, Disk  Serial Number, Storage မှာ Active ဖြစ်နေတဲ့ Partition တွေ၊ Partition တစ်ခုစီရဲ့ ပထမဆုံးစတင်တဲ့ Sector (ဘယ် Partitions က ဘယ် Sector မှာစတင်တယ်။) ၊ Partition တစ်ခုတိုင်းမှာပါဝင်တဲ့ Sector အရေအတွက် စုစုပေါင်းကို ဖော်ပြထားပါတယ်။ ဥပမာ Active Partition 1 က Sector 2048 မှာစတင်ပြီး သူ့မှာ Sector ပေါင်း 102400 Sector ပါရှိပါတယ်။ First Sector = Hex = 00080000 = 2048, Total Sector = Hex 00900100 = 102400 ။ ဒါကတော့ MBR ကဘယ်လိုတည်ဆောက်ထားတယ်ဆိုတာကို ရှင်းလင်းအောင်ပြတာဖြစ်ပါတယ်။ ဥပမာ တစ်ခုလောက်နဲ့ဆိုရင် ရမယ်ထင်ပါတယ်။ Disk Editor တွေမှာ MBR နဲ့ သက်ဆိုင်တဲ့အချက်အလက်တွေကို Template နဲ့အလွယ် တစ်ကူကြည့်နိုင်ပါတယ်။  


MBR Template View 

Analysis Master File Table


ဒါကတော့ MFT မှာပါတဲ့အကြောင်းအရာတွေဖြစ်ပါတယ်။ မြန်မာလိုထက်စာရင် English လိုဖတ်တာက ပိုရှင်းပါတယ်။ MFT ကို Analysis လုပ်တဲ့အချိန်မှာ သိရှိထားရမဲ့ အချက်အလက် တွေဖြစ်ပါတယ်။ အပေါ်မှာ  $Boot နဲ့ $MFTMirror အကြောင်းကိုတော့ ဖော်ပြထား ပြီးပါပြီ။ MFT Analysis ကတော့ Digital Forensics အတွက်တင်မဟုတ်ပဲ Incident Response , Malwares Analysis ပြုလုပ်တဲ့အခါတွေမှာလဲ အသုံးဝင်ပါတယ်။ အောက်ကပုံမှာပါတဲ့အချက်လက်တွေကိုတော့ မြန်မာလိုထက်စာရင် English လိုဖတ်တာက ပိုပြီးရှင်းလင်းပါတယ်။ 



Storage ပေါ်မှာ NTFS Metadata File တွေတည်ရှိပုံဖြစ်ပါတယ်။

အခုပုံက $MFT ကိုဖြည်ကြည့်တဲ့အခါ မြင်ရမဲ့ပုံဖြစ်ပါတယ်။ 



$MFT Entry (အချို့က $MFT Entry ကို  $MFT  Record လို့လဲ ခေါ်ပါတယ်။) $MFT Entry (Record) တိုင်းမှာ Attributes တွေပါဝင်ပါတယ်။ Attributes တစ်ခုစီတိုင်းမှာလဲ  သက်ဆိုင်ရာ အပိုင်းအလိုက် သီခြားအဓိပ္ပာယ်တွေ ရှိပါတယ်။  အဓိကကျတဲ့ Attributes တွေရဲ့အကြောင်းကို ဖြေးဖြေးချင်း ရှင်းလင်း သွားပါမယ်။ 

အခုဇယားကတော့ $MFT မှာပါဝင်တဲ့ အဓိကကျတဲ့ Attributes တွေအကြောင်းဖြစ်ပါတယ်။ 


ကျွန်တော်တို့ MFT Entry Record တစ်ခုချင်းစီကို ခွဲကြည့်မယ်ဆိုရင် အောက်ကပုံအတိုင်းမြင်ရမှာဖြစ်ပါတယ်။ MFT Entry Record တစ်ခုစီမှာ Header တစ်ခုစီ ပါဝင်ပါတယ်။ အခုဆက်လက်ရေးသားမဲ့အကြောင်းအရာက MFT Record Entry မှာပါဝင်တဲ့ Header အကြောင်းပဲဖြစ်ပါတယ်။


အခုပုံက MFT Entry Record မှာပါဝင်တဲ့ Header တည်ဆောက်ထားပုံဖြစ်ပါတယ်။ ပါဝင်တဲ့ Attributes တွေရဲ့အဆုံးမှာ  0XFFFFFFFF  Marker ပါဝင်ပါတယ်။

အခုပုံမှာ Attributes  (4) ခုပါဝင်ပြီး နောက်ဆုံး Attributes ရဲ့နောက်မှာ 0XFFFFFFFF  Marker ပါဝင်ပါတယ်။

Entry Signature

Entry တစ်ခုစီတိုင်းမှာ File (ဒါမှမဟုတ်) Hex  (0x46494C45) နဲ့စပါတယ်။ Entry က Usable မဖြစ်ရင် chkdsk လုပ်တဲ့အခါမှာ Error ရှိရင် BAAD ဆိုပြီးပြသပါတယ်။ 


Fixup Array 

2 Bytes ဖြစ်တဲ့ (0x3000) ကို Fixup array အဖြစ်အသုံးပြုပြီး နောက်ထပ် 2 Bytes ဖြစ်တဲ့ (0x0300) ကိုတော့ Entry ရဲ့ Fixup array အဖြစ်အသုံးပြုပါတယ်။ $LogFile Sequence Nimber(LSN) ကတော့ Record ကို Modified ပြုလုပ်တိုင်းမှာ ပြောင်းလဲပါတယ်။ 



What Is Fixup Array 

Fixup Array ကိုအသုံးပြုရတဲ့အကြောင်းကတော့ Storage  ပေါ်မှာ Cluster တွေတည် ဆောက် ထားတာက Sector တွေပေါင်းစပ်ပြီးတည်ဆောက်ထားတာဖြစ်ပါတယ်။ ဒါကြောင့် Sector တွေ ပျက်စီးမနေအောင်နဲ့ Sector ပေါ်မှာရှိတဲ့ Data တွေရဲ့ Integrity မပျက်စီးနိုင်စေဖို့ Data တွေအတွက် Reliability ဖြစ်ဖို့အတွက်ဖြစ်ပါတယ်။ တစ်နည်းအားဖြင့် Cluster တွေမှာ Error ရှိ/မရှိ သိရှိနိုင် စေဖို့ဖြစ်ပါတယ်။ Sector တွေတိုင်းမှာ Update Array Sequence မှာရှိတဲ့  Fixup တွေရှိပါတယ်။ Fixup ကို Data Structure အတွက်အသုံးပြုတာဖြစ်ပြီး File Content တွေရှိတဲ့ Sector ပေါ်မှာ အသုံး မပြုပါဘူး။  Entry တစ်ခုချင်းစီရဲ့ Header တိုင်းမှာ Update Sequence Number နဲ့ Buffer (Update Sequence Array ) တွေပါဝင်ပါတယ်။ Sector တိုင်းရဲ့နောက်ဆုံး 2 Bytes ကို Buffer (Update Sequence Array )ထဲကိုကူးယူလိုက်ပါတယ်။ ကျန်တဲ့ 2 Bytes ကို Update Sequence Number နဲ့အစားထိုး လိုက်ပါတယ်။ 

Entry ကို Read တဲ့အခါမှာ Header ကနေ Update Sequence Number နဲ့ Sector တိုင်းရဲ့ နောက်ဆုံး 2 Bytes နဲ့တိုက်ဆိုင်ကြည့်ပါတယ်။ တူညီတယ်ဆိုရင် Buffer (Update Sequence Array ) ထဲမှာအစောနကကူးထည့်ထားတဲ့ 2 Bytes ကို အရင်နေရာ (Sector) ထဲကိုပြန်ထည့်လိုက်ပါတယ်။ 
နောက်တစ်မျိုးပြောရရင် Data ကို Read တဲ့အခါမှာ Sector တိုင်းရဲ့ နောက်ဆုံး 2 Bytes က Update Sequence Number နဲ့ တူညီမှုရှိ- မရှိ စစ်ဆေးပါတယ်။ တူညီရင် Buffer (Update Sequence Array )ထဲမှာ ကူးထည့်ထားတဲ့ 2 Bytes ကို Sector ရဲ့နောက်ဆုံးနေရာမှာပြန်ပြီး ကူးထည့်လိုက်ပါတယ်။ 



Fixup Array Example 

Fixup Array Example 


Fixup Array ကို MFT ရဲ့ File Entry တွေမှာတင်မဟုတ်ပဲ INDEX Entries, $logFile ရဲ့  RCRD, RSTR  တို့မှာလဲအသုံးပြုပါတယ်။ အဲဒီအကြောင်းအရာတွေကို နောက်မှာဖော်ပြမှာဖြစ်ပါတယ်။ 

$LogFile Sequence Number (LSN) 

နောက်ထပ် 8 Bytes ကိုတော့ LSN အတွက်အသုံးပြုပါတယ်။ File Syetem ပေါ်ကို Data တွေ  Write လုပ်နေရင်း  Error ဖြစ်တတ်တာကြောင့် Logging Feature ( အခြား File System အခေါ် Journaling Feature ) ကိုအသုံးပြုပါတယ်။ Error ဖြစ်ခဲ့ရင် Clean ဖြစ်တဲ့ အခြေအနေကိုပြန်သွား နိုင်အောင်ဖြစ်ပါတယ်။  သူ File က $LogFile  ဖြစ်ပါတယ်။ Log တွေကို $Data ထဲမှာ သိမ်းဆည်း ထားပြီး LogFile Sequence Number (LSN) အဖြစ်သိမ်းဆည်းထားပါတယ်။ Files, Directories တွေကို အသစ်လုပ်တာ၊ Content တွေပြောင်းလဲတာ၊ File Name ပြောင်းလဲတာ၊ User ID  စတဲ့ Security တွေပြောင်းလဲတာကို  Record လုပ်ထားပါတယ်။ Record တွေပြောင်းလဲတိုင်း သိမ်းဆည်းဖို့နေရာ အကန့်အသတ်ရှိတာကြောင့်  LSN တွေက အမြဲတမ်းပြောင်းလဲနေပါတယ်။ 

Sequence Number = 24 

Sequence Number ဆိုတာက MFT Entry တစ်ခုကို အကြိမ်ရေ ဘယ်လောက်ပြန်ပြီး အသုံးချထား လဲဆိုတာ ကို ဖော်ပြတာဖြစ်ပါတယ်။ ပြန်လည်အသုံးချတဲ့အရေအတွက်များလာတာနဲ့ Sequence Number အရေအတွက်လဲများလဲပါမယ်။ $MFT ဖြည်ထားတဲ့ပုံကိုပြသထားပါတယ်။ 

Hard Link Count 

Base Entry မှာအသုံးပြုတာဖြစ်ပါတယ်။ အခြား File Directories တွေက အခု Entry ကို Link ဘယ်လောက်ချိတ်ဆက်တယ်ဆိုတာကိုဖော်ပြတာဖြစ်ပါတယ်။ ဥပမာ File အတူတူခြင်းကို File Name ချိန်းပြီးအခြားနေရာမှာထားရှိတာ။ အခြား Folder , Directories တွေမှာရှိနေတာကိုဖော်ပြခြင်း ဖြစ်ပါတယ်။ 

Offset To The First Attributes 

အခု Record (Entry ) အတွက် ပထမဆုံး Attribute က ဘယ်နေရာမှာ စတင်တယ်ဆိုတာကို ဖော်ပြထားတာဖြစ်ပါတယ်။ အခုပုံမှာ Offset 38 မှာစတင်ပါတယ်။ အနီရောင်နဲ့ပြထားတဲ့နေရာကနေ ပထမဆုံး Attribute ကစတင်မှာဖြစ်ပါတယ်။  Hex (0x10000000) နေရာကနေစတင်မှာဖြစ်ပါတယ်။ အနီရောင် Box နဲ့ပြထားသမျှအကုန်လုံးက ပထမဆုံး Attribute ဖြစ်ပါတယ်။ သူက Entry ထဲမှာပါဝင်တဲ့ Attributes တွေရဲ့အစဖြစ်ပြီး ကျန်တဲ့ Attributes တွေက သူ့နောက်ကနေလိုက်ပါတယ်။ နောက်ဆုံး Attribute အဆုံးမှာ Hex = 0XFFFFFFFF  ဆိုပြီး Marker ပါဝင်ပါတယ်။



Flag 

0x01 = Entry is In Use.
0x02 = Entry Is For A Directory.
0x04 = Unknown
0x08 = Unknown
အခုပုံမှဆိုရင် 0x01 ဖြစ်နေတဲ့အတွက် Entry ကိုအသုံးပြုနေပါတယ်။ 


Real Size Of The File Record = 376 

Allocated Size Of The MFT Entry 
 
MFT Entry တစ်ခုချင်းစီမှာရှိနိုင်တဲ့ Size ကိုပြသတာ ဖြစ်ပါတယ်။ Microsoft Window တော်တော် များများမှာ Entry (Record) Size က (1KB) 1024 Bytes ဖြစ်ပါတယ်။ 



File Reference To The Base MFT Entry (Record)

0 ဖြစ်တဲ့အတွက် Base MFT Entry ဖြစ်ပါတယ်။

0 မဖြစ်ရင် = Base Entry ကိုညွန်ပြတဲ့ Reference ဖြစ်ပါမယ်။ (Reference To Base Entry) 

File တစ်ခုရဲ့ Attribute က File ရဲ့ အခြေအနေအပေါ်မူတည်ပြီး  Attribute (65536) ခု အထိရှိနိုင်ပါတယ်။ Attributes တွေများလာတဲ့အခါ Entry တစ်ခုထဲနဲ့ မလုံလောက်တော့ပါဘူး။ Attributes တွေသိမ်းဖို့အတွက် Entry တွေလိုအပ်လာပါတယ်။ ဥပမာ File တစ်ခုက Entry တစ်ခုထဲမလုံလောက်တော့ပဲ File ရဲ့အနေအထားအရ နောက်ထပ် Entry (4) ခုထပ်ပြီး လိုအပ်လာ ပါမယ်။  အဲဒီတော့ File မှာ Entry (5) ခုရှိသွားပါမယ်။ ပထမဆုံး (မူလ) Entry ကို Base MFT Entry လို့ခေါ်ပါတယ်။ ကျန်တဲ့ Entry 4 ခုကတော့ Non-Base Entries တွေဖြစ်ပါတယ်။ Base Entry မှာ သူနဲ့ချိတ်ဆက်နေတဲ့ ကျန်တဲ့ Non- Base Entry တွေရဲ့ Information တွေပါရှိပါတယ်။ အဲဒီ  Information တွေကို  $Attributes_List ထဲမှာသိမ်းထားပါတယ်။
Non-Base Entries တွေမှာလဲ သူရဲ့ Base Entry ဖြစ်တဲ့ မူလ ပထမ   Entry ရဲ့ Reference (Address) ပါဝင်ပါတယ်။ Non- Base Entry တွေမှာ $FILE_NAME နဲ့ $STANDARD_INFORMATION Attributes တွေမပါဝင်ပါဘူး။ Base Entry မှာပဲပါဝင်ပါတယ်။ 



Next Attributes ID = 5 

Next Attribute ဆိုတာက Entry ထဲမှာနောက်ထပ်ရောက်လာမဲ့  Attribute  အတွက် နေရာကိုညွှန်ပြတာဖြစ်ပါတယ်။ ဥပမာ Entry တစ်ခုမှာ  အရင်က Attribute 4  ခုရှိမယ်။ နောက်ထပ်ရှိမယ်ဆိုရင် Attribute 5 ကနေစမယ်ဆိုပြီးဆိုလိုတာဖြစ်ပါတယ်။ Attribute တိုးလာတိုင်း နံပတ်က တိုးလာမှာဖြစ်ပါတယ်။ Entry ကို Used  - > Reused ဖြစ်သွားမယ်ဆိုရင် Zero ဖြစ်သွားပါမယ်။ 
Align To 4 Bytes Boundary – Window XP မှာသာအသုံးပြုပါတယ်။

Number Of This MFT Entry (Record) 

File က MFT Entry (Record) နံပတ်ဘယ်လောက်မှာရှိနေတယ်ဆိုတာကိုပြတာဖြစ်ပါတယ်။ အခုဆိုရင် ကြည့်နေတဲ့ File က MFT Record (Entry) မှာ 38 ဖြစ်ပါမယ်။ 



MFT File Reference Number 

MFT ရဲ့ Enrty (Record) က 0 ကနေစတင်ပါတယ်။ $MFT ကိုယ်တိုင်လဲ Enrty ထဲမှာပါ ဝင်ပြီး သူ့ရဲ့ Record က 0 ဖြစ်ပါတယ်။ MFT Address က 48 Bits (6 Bytes)   ဖြစ်ပါတယ်။ (2 Bytes) ကို MFT Sequence Number  အဖြစ်သတ်မှတ်ပါတယ်။ ( 4 Bytes) က  MFT Entry Record Number ဖြစ်ပါတယ်။ အဲဒီ 2 ခုပေါင်းလိုက်ရင် MFT File Reference Number ရပါတယ်။ Sequence Number က  Entry မှာ Allocated ဖြစ်တာနဲ့ နံပတ်တိုးလာပါတယ်။

 (MFT Entry Record Number)  + (MFT Sequence Number  ) = MFT File Reference Number 



Entry Record Number 313  (Sequence Number 1) မှာရှိတဲ့ File ကိုဖျက်လိုက်တဲ့အခါ  Entry နေရာကလွတ်သွားပါမယ်။ Entry 313 နေရာကို နောက်ထပ် File ရောက်မလာမချင်း Sequence Number က 1 ပဲဖြစ်နေပါမယ်။  Entry Record Number 313   နေရာကိုနောက်ထပ်  File တစ်ခုရောက်လာတဲ့အခါမှာ Sequence Number  1  ကနေ 2 ဖြစ်သွားပါမယ်။ 

NTFS File System က MFT File Reference Number (Address) ကို Enrty (Record) နဲ့ Sequence Number ရဖို့အတွက် အသုံးပြုပါတယ်။ ဘာလိုလဲဆိုရင် Sequence Number ကိုကြည့်ရင် File Corrupt ဖြစ်မဖြစ်ကိုသိနိုင်တဲ့အတွက်ဖြစ်ပါတယ်။ ဥပမာ Unallocated Data တစ်ခုက  File Reference Number (Address) တစ်ခု နဲ့အတူရှိနေမယ်။ File Reference Number (Address) ကနေ Entry (Record) နံပတ်နဲ့ Sequence နံပတ်ရရှိပါမယ်။ Entry Number = 100 ,  Sequence Number = 1 ရရှိတယ်ဆိုကြပါစို့။ လက်ရှိ  MFT Entry 100 မှာ Sequence Number က 2 ဖြစ်နေမယ်ဆိုရင် Unallocated Data က ဖျက်ထားပြီးသား အရင်က MFT Entry Record မှာအသုံးပြုပြီးသားလို့ သတ်မှတ်နိုင်ပါတယ်။ 

MFT Information တွေကို Disk Editor နဲ့ Disk Forensics Tools တွေမှာ Template တွေထည့်ပြီး လွယ်လွယ်ကူကူကြည့်နိုင်ပါတယ်။ 










Comments

Popular posts from this blog

B-Trees (NTFS)

NTFS Index Attributes

Volatility Workbench (GUI) for the Volatility tool