Understanding TRIM, DZAT, and DRAT: Hidden Dangers for SSD Forensics

Window 7 ကနေစပြီးတော့  PC တွေမှာ  SSD အသုံးပြုထားရင် Trim က Default အနေနဲ့  On ပါတယ်။ Window 10/11 မှာတော့ အချို့သော Driver Issues ရှိတဲ့ SSD/ NvMe တွေကလွဲရင် Default အနေနဲ့ Trim Enable/  ဖြစ်ပါတယ်။ ပြီးရင် Automatically TRIM လုပ်ပါတယ်။ Trim Enable ဖြစ်/မဖြစ်ကိုတော့ CMD Or Power Shell မှာ fsutil behavior query DisableDeleteNotify ဆိုတဲ့ Command နဲ့စစ်နိုင်ပါတယ်။ (0 = enable, 1 = disable) Trim ကို Default အနေနဲ့ Window တွေမှာ On ပေးထားတာက SSD Performance  ပိုမိုကောင်းစေဖို့ဖြစ်ပါတယ်။ HDD တွေနဲ့မတူညီတဲ့အချက် SSD တွေမှာ Data Write လုပ်မယ်ဆိုရင် HDD လို Overwrite လုပ်လို့မရပဲ အရင်ဆုံ Data Write မဲ့ Block/Page ကို Erase ပြုလုပ်ရပါတယ်။ 



ဒါပေမဲ့ SSD Controller က Trim အသုံးမပြုနိုင်တဲ့ Controller ဖြစ်နေခဲ့ရင်၊ Internal / External အနေနဲ့သုံးထားတဲ့ SSD မှာ Driver Issues ရှိနေခဲ့ရင်၊ NTFS/ReFS File System အနေနဲ့မဟုတ်ပဲ ကျန်တဲ့ FAT32 File System, Etc... အနေနဲ့အသုံးပြုထားရင် Trim ကမှန်မှန်ကန်ကန် အလုပ်လုပ်မှာမဟုတ်ပါဘူး။

File တစ်ခုကိုဖျက်လိုက်ရင် ဘယ်လိုဖြစ်မလဲ

Window ကလဲ System မှာ Storage အနေနဲ့ SSD ကိုသုံးပြုထားတယ်ဆိုတာသိပြီးဆိုတာနဲ့ File တစ်ခုကိုဖျက်လိုက်ရင်   Data Read Or Write Command လိုပဲ Trim က Deallocate Command  အလုပ်လုပ်ကိုပြုလုပ်ပါတယ်။ TRIM ကို SSD ကနေ Command ပေးတာမဟုတ်ပါဘူး။ Window ကနေ  SSD Controller ကို Command ပေးတာဖြစ်ပါတယ်။ ဘယ်အချိန်တွေမှာ OS ကနေ Trim Command ပေးသလဲဆိုရင် File တစ်ခုခုကို ဖျက်လိုက်တဲ့အခါတိုင်း၊ Partition Format ပြုလုပ်တဲ့အခါတိုင်း၊ Free Space လိုအပ်တဲ့အချိန်တိုင်းမှာ OS ကနေ  SSD Controller ကို လက်ရှိမှာ Data သိမ်းထားတဲ့ SSD Block (Logical Block Address ဘယ်လောက်ကနေ ဘယ်လောက်အထိ) ကတော့ မလိုအပ်တော့ဘူး/ ဒီ Block တွေကို မသုံးတော့ဘူး ဖျက်လိုက်ပါဆိုပြီး  OS ကနေ SSD Controller ကို Trim Command လှမ်းပြုလုပ်ပါတယ်။ 

အဲဒီအချိန်မှာ SSD Controller ကနေ Block တွေကို Unused ဒါမှမဟုတ် Free Block တွေအနေနဲ့သတ်မှတ်လိုက်ပါတယ်။ အဲဒီ Data တွေ နောက်ထပ်ဘာဆက်ဖြစ်မလဲဆိုတာက SSD မှာ အသုံးပြုထားတဲ့ Controller, Firmware, SSD Drive Idle time, Background Wear-Leveling, Garbage Collection ပြုလုပ်တဲ့ ပေါ်မှာမူတည်သွားပါပြီး။ ရှေ့မှာပြောထားတဲ့အတိုင်းပဲ Data တွေက ရှိချင်ရှိနိုင်သလို/ မရှိချင်လဲမရှိတော့ပါဘူး။

OS ကနေ Trim Command ရတာနဲ့ Block တွေကို ချက်ချင်းဖျက်တာရှိသလို၊ မဖျက်ပဲ ဒီ Block တွေကိုတော့ မသုံးတော့ဘူး နောက်မှဖျက်မယ်ဆိုပြီး Unused အနေနဲ့ မှတ်ချင် မှတ်ထားလိုက်ပါမယ်။ အဲဒီ Block ထဲက Data တွေကို နောက်မှ ဖျက်မယ်ဆိုပြီး အခြား Spare Block တွေဆီကိုပို့ချင်လဲပို့လိုက်နိုင်ပါတယ်။ ဒါမှမဟုတ်လဲ လုံးဝမဖျက်တာလဲ ရှိချင်ရှိနိုင်ပါတယ်။ 

Digital Forensics Analysis မှာ Trim Effect ဘယ်လိုကြုံလာနိုင်မလဲ 

OS ကနေ Trim Command ကို SSD Controller ဆီရောက်တာနဲ့ SSD ကနေ အဲဒီ Data တွေကိုအပြီးတိုင်မဖျက်ရင်တောင် SSD Block ထဲမှာရှိနေတဲ့ Data တွေကို SSD Controller ကနေ ပြန်မပြတော့ပါဘူး။  Example Block Number 1 – 10 ကိုဖျက်မယ်ဆိုပြီး  OS ကနေ Trim Command ပေးလိုက်တာနဲ့ Block 1 -10 ကနေ Data တွေကို အပြီးမဖျက်ခဲ့ရင်တောင် Block 1-10 ထဲမှာရှိတဲ့ Data တွေကို SSD Controller ကနေ နောက်တစ်ခါပြန်မပြတော့ပါဘူး။ 

Block (1 – 10) ထဲက Data တွေကို Computer / Storage Forensics Analysis လုပ်မယ်ဆိုရင် SSD တော်တော်များများက အခုလိုဖော်ပါတယ် - 

Undefined

Original Data  ပြန်ရချင်ရမယ် ဒါမှမဟုတ် Zero တွေကြည့်ပဲ ပြန်ရမယ်။ (SSD Controller ကနေ Block (1-10) ထဲကနေ Data တွေအစား Zero တွေပဲပြန်ပေးမယ်။)

DRAT (Deterministic Read After TRIM)

(Block 1-10) ထဲမှာ Data ရှိနေရင်တောင် Zero တွေကြည့်ပဲ ပြန်ရမယ်။ (SSD Controller ကနေ Block (1-10) ထဲကနေ Data တွေအစား Zero တွေပဲပြန်ပေးမယ်။)

DZAT (Deterministic Zeros After TRIM)

(Block 1-10) ထဲမှာ Data ရှိနေရင်တောင် Zero တွေကြည့်ပဲ ပြန်ရမယ်။ (OS ကနေ Trim Command ရရချင်း SSD Controller ကနေ Block (1-10) ထဲမှာရှိတဲ့ Data တွေအစား ZERO တွေပဲ ပြန်ပေးပါမယ်။) 

Undefined ဖြစ်တဲ့ DATA ရချင်ရမယ် ဒါမှမဟုတ် ZERO တွေပဲပြန်ရမယ်ဆိုတဲ့ SSD တွေက SSD အဟောင်းတွေ၊ Cheap ဖြစ်တဲ့ SSD အမျိုးအစားတွေဖြစ်ပါတယ်။ နောက်ပိုင်း SSD တွေ၊ NVME တွေက DRAT အခြေအနေကိုပဲပြန်ရပါမယ်။ Enterprise Level / RAID Level သုံးတဲ့ SSD တွေက DZAT အခြေအနေကိုပဲပြန်ရပါမယ်။


Wear Leveling 

Wear Leveling က SSD Lifespan မကုန်အောင်လုပ်ဆောင်ပေးပါတယ်။ SSD  အတွင်း မှာရှိတဲ့ NAND Flash Cell တွေမှာ Program Erase Cycle (P/E) (Write/ Erase)  ဆိုတာရှိပါတယ်။ SSD  အမျိုးအစားပေါ်မူတည်ပြီး (3000 – 100000 ) အထိရှိပါတယ်။ အချို့ Cell တွေမှာ Data  Read/Write များတဲ့အတွက်  သတ်မှတ်ထားတဲ့ Cycle Count ကုန်တာမြန်နိုင်ပါတယ်။ ဒါကြောင့် Wear Leveling က SSD ထဲမှာရှိတဲ့ Cell တွေကိုဖြန့်ပြီး Cycle Count ညီမျှအောင်လုပ်ပေးပါတယ်။ Example  ABC DEF ဆိုတဲ့ Cell တွေထဲမှာ ABC က Cycle Count များနေတယ်၊ ABC ထဲမှာ သိမ်းထားတဲ့ Data ကလဲ Hot Data တွေဖြစ်မယ်။ ဒါပေမဲ့ DEF ကတော့ Cycle Count နည်းနေတယ်၊ DEF ထဲမှာ သိမ်းထားတဲ့ Data ကလဲ Cold Data ဖြစ်နေတယ်ဆိုရင် ABC ထဲက Data ကို DEF ထဲကိုပြောင်းပေးလိုက်ပါတယ်။ အဲလိုပြောင်းပေးတာကို Wear Leveling ပြုလုပ်တယ်လို့ခေါ်ပါတယ်။

ABC To DEF ကို Data ပြောင်းပေးတာကို Static Wear Leveling ပြုလုပ်တယ်လို့ ခေါ်ပါတယ်။ နောက်တစ်ခုကတော့ Dynamic Wear Leveling ပါ။ Dynamic Wear Leveling ကတော့ ABCDEF ဆိုပြီးရှိတဲ့အထဲမှာမှ ABC က Cycle Count များနေတယ် DEF ကတော့ Cycle Count နည်းနေတယ်ဆိုရင် Data Write ဖို့ရှိလာခဲ့ရင် Controller ကနေ Data ကို  Cycle Count များနေတဲ့ ABC အပေါ် Write မပြုလုပ်ပဲ Cycle Count နည်းတဲ့ DEF  အပေါ်ကိုပဲ Data Write ပြုလုပ်ပါမယ်။

Garbage Collection

Garbage Collection ကတော့ OS ကနေ ပေးလာတဲ့  Time Command ကိုမှတ်သားပြီး  Cell တွေထဲက မလိုအပ်တဲ့ Data တွေကိုဖျက်ပေးပြီး၊ နောက်ထပ် Data Write ခဲ့ရင်အဆင်သင့် ဖြစ်အောင် လုပ်ပေးပါတယ်။ ဒါကြောင့် SSD ကို Read /Write Speed မြန်အောင်လုပ်ပေးပါတယ်။

OS ကနေ Trim Command ရောက်လာတဲ့အခါမှာ မလိုအပ်တဲ့ Cell ထဲမှာရှိတဲ့ Data တွေပိုဖျက်ဖို့အတွက် Garbage Collection အပိုင်းလုပ်ဆောင်ပါလိမ့်မယ်။ Controller ကနေ  GC ကိုချက်ချင်းလုပ်ဆောင်တာရှိသလို SSD Busy မဖြစ်တဲ့အချိန် Idle Time မှာ အများဆုံးလုပ် ဆောင်ပါတယ်။  GC ကချက်ချင်းမလုပ်ဆောင်ရင်တောင်  SSD Cell ထဲမှာရှိတဲ့ မလိုအပ်တော့တဲ့ Data ကို ဖျက်ဖို့ OS ကနေ Trim Command ကို Controller  ကနေရရှိပြီးတာဖြစ်တာကြောင့် Cell အတွင်းက Data ကို GC မလုပ်ရသေးပေမဲ့  အဆိုပါ Cell အတွင်းက Data ကို Forensics Analysis Or Data Recovery လုပ်ရင် Data အစား ZERO တွေကိုပဲ Return ပြန်ပေးပါမယ်။ OS ကနေ Trim Command ရောက်လာပြီးနောက် SSD Controller ကနေ  မလိုအပ်တဲ့ Cell ထဲမှာရှိတဲ့ Data တွေကို GC လဲလုပ်ပြီးပြီး။ အဲဒီ Cell ကလဲ Data အသစ်ကိုလက်ခံဖို့အဆင်သင့် ဖြစ်နေပြီးဆိုရင် အရင် Data ပြန်မရနိုင်တော့ပါ။ Wear Leveling ကလဲ SSD Lifespan မကုန်အောင်အမြဲလုပ်နေတာဆိုတော့ GC + Wear Leveling လုပ်ပြီးနောက်မှာ   Data ကပြန်မရနိုင်တော့ပါဘူး။

GC ဘယ်အချိန်မှာအများဆုံးလုပ်လဲဆိုရင်  Trim Command ရတာနဲ့ ချက်ချင်းလုပ်ချင် လုပ်မယ်  SSD Idle ဖြစ်နေတဲ့အချိန်၊ ဒါမှမဟုတ် နောက်တစ်ခါ Computer Boot ပြန်လုပ်တဲ့ အချိန်၊ ဒါမှမဟုတ် SSD Space နည်းနေတဲ့အချိန်မှာလုပ်မယ်။ SSD အမျိုးအစားနဲ့ Controller Firmware အမျိုးအစားအပေါ်မှာမူတည်ပြီး GC ကိုပြုလုပ်မှာဖြစ်ပါတယ်။ အများဆုံးကတော့ Idle ဖြစ်နေတဲ့ အချိန်မှာ အများဆုံးပြုလုပ်ပါတယ်။ 

အခုကျွန်တော်တို့ SSD ကို အသုံးပြုနေတာက SSD ရဲ့ Standard Mode ကိုအသုံးပြုနေတာ ဖြစ်ပါတယ်။ Data Read မယ် Write မယ်။ အဲတော့ SSD ထဲမှာ GC မပြုလုပ်ရသေးပေမဲ့ Cell အတွင်းမှာ Data ရှိနေရင်တောင်ဖျက်ပြီးသားလို့ OS ကနေ Trim Command ပို့ပြီးပြောထား တာဖြစ်တဲ့အတွက် Controller ကနေ Zero တွေပဲ Return ပြန်ပါမယ်။ Standard Mode Access နဲ့လုပ်လို့မရရင် Factory Mode ကနေ Cell အတွင်းမှာရှိတဲ့ Data ကိုရယူနိုင်ပါတယ်။ GC ချက်ချင်းပြုလုပ်ပြီးရင်တော့ Cell အတွင်းမှာ  Data မရှိနိုင်တော့ပါဘူး။ Factory Mode ကို Access ပြုလုပ်ဖို့က Brand ဖြစ်တဲ့ SSD တွေဆိုရင် SSD Manufacture Company မှာရှိပါတယ်။ နောက်တစ်နည်းကတော့ Storage Forensics Hardware တွေအသုံးပြုဖို့ဖြစ်ပါတယ်။ ဒါပေမဲ့ SSD အားလုံးမရပါဘူး။ Support  ပေးတဲ့ SSD အမျိုးအစား Model တွေပဲရပါမယ်။ အပိုင်း (၃) မှာ How to Forensics Analysis အကြောင်းဆက်ရေးသွားပါမယ်။

REF - Elcomsfot

Comments

Popular posts from this blog

NTFS Index Attributes

Mobile Forensics (Note-1)

B-Trees (NTFS)