SQLite Database Forensics (Note)
SQLite ကို Android Phone, Apple Phone , MAC OS, Window တို့မှာ အချို့ Application တွေရဲ့ Data တွေကို သိမ်းဆည်းဖို့ အများဆုံးအသုံးပြုပါတယ်။ Message Application တွေဖြစ်တဲ့ Viber, Telegram, What App , Skype, Messenger စတဲ့ Message Application တွေက Desktop Version ပဲဖြစ်ဖြစ် Mobile Version ပဲ ဖြစ်ဖြစ် SQLite Database ကို အသုံးပြုပါတယ်။
ဒါ့အပြင် Contact, Call Log , Message (SMS) စတာတွေမှာ SQLite Database ကို အသုံးပြုပါတယ်။ Window ဆိုရင်လဲ Browser တွေရဲ့ History , Window Timeline History ကိုသိမ်းဆည်းတဲ့နေရာ Mac OS ဆိုရင်လဲ အဓိကကျတဲ့ Artifacts တွေကို သိမ်းဆည်းတဲ့နေရာမှာအများဆုံးအသုံးပြုပါတယ်။
SQLite မှာ Journal File 2 File ရှိပါတယ်။
- Journal File
- Write-Ahead Log (WAL) File
Journal File
Database မှာ ရှိတဲ့ Data တွေကို Page အနေနဲ့ သိမ်းထားပြီး Page Size ကတော့ Developer သတ်မှတ်တဲ့ အတိုင်းရှိပါတယ်။ Default ကတော့ 4096 Bytes ဖြစ်ပါတယ်။ Database တစ်ခုထဲမှာ ရှိတဲ့ Page File တွေက Same Size ဖြစ်ပါတယ်။ Page-1 က 4096 Bytes ဆိုရင် ကျန်တဲ့ Page တွေကလဲ 4096 Bytes ပဲဖြစ်ပါတယ်။ Database ထဲမှာ Page-1 Page-2 Page-3 ဆိုပြီး Page file 3 ခုရှိတယ်ဆိုပါတော့။
Page 1 မှာ Data ထည့်မယ်ဆိုရင် Page 1 ထဲမှာ အရင်ကရှိတဲ့ Data က Rollback Journal File အဖြစ် သွားသိမ်းပါတယ်။
Page 1 ထဲကို Data ရောက်ပြီး Commit (Save) လုပ်ပြီဆိုတဲ့ အချိန်ကျရင် Rollback Journal File က မရှိတော့ပါဘူး။ ကြားထဲမှာ Commit (Save) မလုပ်ဘူးဆိုရင် Database Error တစ်ခုခုဖြစ်မယ်ဆိုရင် Journal File ကရှိနေအုံးမှာ ဖြစ်ပါတယ်။ နောက်တစ်ခါ Database ပြန်ဖွင့်ရင် Rollback Journal File ကနေ Error Recovery လုပ်ဖို့ ဖြစ်ပါတယ်။ So, Journal File က SQLite Forensics အတွက်အရေးပါလာပါတယ်။
Write-Ahead Log (WAL) File
သူက Rollback Journal File နဲ့ပြောင်းပြန်ပါ။ အသစ် Write လုပ်မဲ့ Data က WAL File အဖြစ်သွားသိမ်းပါတယ်။ Page-1 မှာ Data ကို Write လုပ်မယ်ဆိုရင် Page-1 ထဲမှာ အရင်ကရှိတဲ့ Data ကို မဖျက်ပဲ ။ အသစ် Write လုပ်မဲ့ Data က WAL File ထဲမှာသွားသိမ်းပါတယ်။ Commit (Save) လုပ်တဲ့ အချိန်ကျမှ Page-1 ထဲကို Data သွားသိမ်းပါတယ်။ Commit (Save ) မလုပ်ရင် Database Error တစ်ခုခုဖြစ်ရင် WAL File ထဲမှာ Data တွေကျန်နေပါတယ်။ So, WAL File မှာ New Write လုပ်မဲ့ Data တွေ။ အရင် Data အဟောင်းတွေပါ ရှိနေတတ်တဲ့ အတွက် SQLite Forensics အတွက် အရေးပါတဲ့ File တစ်ခုဖြစ်ပါတယ်။ WAL File ကို နောက်ပိုင်း SQLite Database သုံးတဲ့ Application တော်တော်များများမှာ တွေ့ရပါတယ်။ Read Write ကို တစ်ပြိုင်တည်း လုပ်လို့ရတာကြောင့် ဖြစ်ပါတယ်။
Journal , Write-Ahead Log (WAL) File တွေမှာ Commit (Save) မလုပ်ရသေးတဲ့ Recently Added Data ဒါမှမဟုတ် Recently Deleted Data တွေရှိနိုင်ပါတယ်။
SQLite Free List Pages
Database ထဲမှာ Active ဖြစ်နေတဲ့ Database File တွေရှိသလို Active မဖြစ်တဲ့ တစ်နည်းအားဖြင့် Data Write မလုပ်ရသေးတဲ့ Page တွေလဲရှိပါတယ်။SQLite Database ထဲကနေ အချို့အချက်အလက်တွေကို Delete လုပ်လိုက်တဲ့အခါမှာ Data အဖျက်ခံလိုက်ရတဲ့ Page တွေက Free List Page ဖြစ်သွားပါတယ်။ နောက်တစ်ကြိမ်မှာ Data Write မယ်ဆိုရင် Free List ဖြစ်နေတဲ့ Page တွေမှာ Data ကို Write လုပ်မှာဖြစ်ပါတယ်။ ဒါကြောင့် SQLite Database ကနေ Data ကို Delete လုပ်လိုက်ရင် ချက်ချင်းပျက်မသွားနိုင်ပါဘူး။ Free List Pages တွေမှာ Recently Deleted လုပ်ထားတဲ့ Data တွေရှိနိုင်ပါတယ်။ Page က Free List အဖြစ်ရှိနေပါတယ်။ But မသုံးပဲရှိနေတဲ့ Page တွေ။ Data Delete လုပ်တာခံလိုက်ရတဲ့ Page တွေကို Free List အဖြစ်ထားမထားကလဲ Developer နဲ့ Vendor ပေါ်မှာ မူတည်ပါတယ်။
Unlocated Space
Hard Disk မှာရှိတဲ့ Unlocated Space လိုပါပဲ။ But , Unlocated Space ထဲမှာ ရှိတဲ့ Database File တွေမှာ Database Pointer , Database Table တွေကို မရှိတော့တဲ့ အတွက် Recovery လုပ်ဖို့ အချိန်ယူရပါတယ်။ Unlocated ထဲမှာ Raw Data အဖြစ်သာရှိပါတယ်။ Recovery အတွက် Carving ပြန်လုပ်ရပါတယ်။Unallocated Space မှာတော့ Free List Page တွေထဲမှာ မရှိတဲ့ Deleted Data တွေရှိနိုင်ပါတယ်။
Important SQLite Forensics Note
SQLite Recovery လုပ်မယ်ဆိုရင် Storage ကို Write Protect လုပ်ရပါတယ်။ သာမန် Database Browser / Viewer နဲ့ ဖွင့်ရင် Commit မလုပ်ရသေးတဲ့ Journal File , WAL File တွေက Commit ဖြစ်ပြီး Data ပျောက်တတ်ပါတယ်။
Journal File, WAL File, Free List Pages တိုင်း Recovery မရပါဘူး။ Application Developer နဲ့ Vendor က SQLite Database ထဲမှာ သတ်မှတ် ရွေးချယ်တဲ့ Setting တွေပေါ်မှာလဲ မူတည်ပါတယ်။
SQLite Database အတွက် သီးသန့်ထုတ်ထားတဲ့ Recovery Tools နဲ့သာ Journal File , WAL File, Free List Pages, Unlocated Space တွေကို Recovery ပြုလုပ်လို့ရပါတယ်။
Comments