Prefetch ဆိုတာ Windows OS မှာ User Experience ပိုကောင်းအောင် ထည့်ပေးထားတဲ့ File လေးတွေဖြစ်ပါတယ် .. ဒါကိုမှ Forensics Professional တွေက Artifact တစ်ခုအနေနဲ့သုံးလို့ရလို့ ယူသုံးနေကြတာပါ .. Microsoft က သဘောကောင်းလွန်းအားကြီးလို့ Forensics Professionals တွေအတွက်သီးသန့်ထည့်ပေးထားတာမဟုတ်ပါဘူး
Prefetch ဆိုတာဘာလဲ?
Prefetch ဆိုတာ Windows XP မှာကတည်းကပါလာခဲ့တာဖြစ်ပြီး Windows 8 နဲ့ Windows 10 မှာအဆင့်မြှင့်တင်မှုတွေပြုလုပ်ခဲ့တဲ့ Windows Component တစ်ခုဖြစ်ပါတယ် .. Prefetch ဟာ Workstations တွေမှာပေါ်မှာသာ Default ဖွင့်ထားတာဖြစ်ပြီး Windows Server တွေပေါ်မှာတော့ Default အရ Disable လုပ်ထားပါတယ် .. အကြောင်းအရာကတော့ Server တွေဟာ Binaries တွေ Execute လုပ်မယ့် အရေအတွက်နည်းတာကြောင့် မလိုအပ်ဘူးထင်လို့ပိတ်ထားပေးတာပါ .. ဒါပေမယ့် Forensics Ready ဖြစ်ဖို့ဆိုရင် ဒါကိုဖွင့်ထားဖို့အကြံပေးပါတယ် .. ဖွင့်နည်းကတော့ အောက်ပါ Registry မှာသွားဖွင့်လိုက်ရုံပါပဲ
SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\ PrefetchParameters
SYSTEM\CurrentControlSet\Services\SysMain
Prefetch ဆိုတာ Windows ပေါ်မှာ Execute လုပ်လိုက်တဲ့ Binaries တွေကို Execute လုပ်တဲ့အချိန်ကနေ 10 စက္ကန့်အထိစောင့်ကြည့်ပြီး အဲ့ဒီအချိန်အတွင်းမှာ Execute လိုက်တဲ့ Binary ကနေ Memory ပေါ် Load လုပ်လိုက်တဲ့ Resources တွေကို မှတ်ထားပေးတာဖြစ်ပါတယ် .. ဥပမာ – သင်က MicrosoftWord.exe
ကို ဖွင့်လိုက်ပြီဆိုရင် ဒီဖွင့်လိုက်တဲ့ Record ကို Prefetch File ထဲသွားသိမ်းပါတယ် .. ရည်ရွယ်ချက်ကတော့ အဲ့ဒီ EXE File ကို နောက်တစ်ခါထပ်ဖွင့်ရင် Loading ပိုမြန်အောင်လို့ပါ .. Loading ပိုမြန်အောင် ဘာတွေသိမ်းတာလဲဆိုတော့ အဲ့ဒီ Binary File ပွင့်လာဖို့ ခေါ်သုံးထားတဲ့ DLL တွေနဲ့တခြား Resource တွေရဲ့ Location ကို Prefetch ထဲမှတ်ထားပေးတာဖြစ်ပါတယ် .. ပုံမှန်ဆို DLL File တစ်ခုလိုအပ်လို့ရှာတဲ့အခါ DLL Search Order အတိုင်း Windows ကရှာပါတယ် .. တစ်ခါ Run ထားပြီးတဲ့ App တွေရဲ့ DLL Location တွေကို Prefetch ထဲသွားသိမ်းလိုက်တဲ့အခါ Windows က ရှာစရာမလိုတော့အတွက် App Loading Time တွေပိုမြန်လာပါတော့တယ် .. ဒါကြောင့် Prefetch File ကို Disk ပေါ်မှာ Write လုပ်တဲ့အချိန်နဲ့ Application Run လိုက်တဲ့အချိန်က အနည်းဆုံး 2 စက္ကန့်လောက်ကနေ အများဆုံး 10 စက္ကန့်လောက်ထိကွာခြားတတ်တာကိုသတိပြုရပါမယ် (Forensics မှာ Timeline ကအရေးကြီးပါတယ်)
Prefetch File နာမည်ကတော့အောက်ပါအတိုင်းရှင်းရှင်းလေးပါ
<Name.EXE>-<Hash>.pf
(For example, POWERSHELL.EXE-CA1AE517.pf
)
Prefetch Location ကတော့ C:\Windows\Prefetch
ဖြစ်ပါတယ်
အထက်ကဥပမာကိုကြည့်ပါ .. Prefetch File Name ဟာကိုယ် Execute လုပ်လိုက်တဲ့ EXE နာမည်ရယ်, အဲ့ဒီ EXE File တည်ရှိတဲ့ Path ရယ်ပဲဖြစ်ပါတယ် .. ဒါပေမယ့်အဲ့ဒီ Path ကိုတော့ Hash အနေနဲ့ပြောင်းထားပါတယ် .. Hash ကတော့ကိုယ်တွေနဲ့ရင်းနှီးတဲ့ MD5, SHA1 တို့မဟုတ်ပဲ Microsoft ရဲ့ Custom Algorithm ဖြစ်ပါတယ် .. တစ်ခါတလေမှာတော့ အဲ့ဒီ Hash တန်ဖိုးက Path အပြင် Command Line Argument တွေလည်းဖြစ်နေတတ်ပါတယ် .. အဖြစ်အများဆုံးဥပမာဆိုရင် svchost.exe
ပါ .. svchost.exe
မှာအမြဲတမ်း -k
ဆိုတဲ့ flag လေးထည့်ထားလေးရှိပါတယ် .. svchost.exe
ရဲ့ Command Line Argument မှာ -k
မပါဘူးဆိုရင် Suspicious Binary ဖြစ်ပါတယ် .. ဒီတော့ svchost.exe
ရဲ့ Prefetch File Name ဆိုရင် Command Line Argument ကို Hash အနေနဲ့တွက်ပြီးပေးရတာဖြစ်ပါတယ် .. Hash အကြောင်းသိချင်ရင် ဒီမှာ ဖတ်ပါ
ပုံမှန်ဆိုရင်တော့ Application တစ်ခုအတွက် Prefetch File တစ်ခုသာရှိပြီး အဲ့ Application Run လိုက်တိုင်းမှာ သက်ဆိုင်ရာ Prefetch File ထဲ Information အသစ်တွေထပ်ထည့်မှာဖြစ်ပါတယ် .. ဒါပေမယ့်ခြွင်းချက်အနေနဲ့ Command Line Argument ကို Hash အနေနဲ့ပြောင်းပြီးနာမည်ပေးတဲ့ App တွေ (အပေါ်ဥပမာက svchost.exe
) ဆိုရင်တော့ svchost.exe
အတွက် Prefetch File တွေအများအပြားရှိနေမှာဖြစ်ပြီး နောက်က Hash Value တော့ကွာခြားချက်ရှိပါမယ် .. အောက်ကပုံမှာ ဥပမာအနေနဲ့ကြည့်နိုင်ပါတယ်
Prefetch File မှာလည်းသူ့ရဲ့ Limitation လေးတွေရှိပါတယ်
- Prefetch File တစ်ခုမှာ EXE ရဲ့ Run လိုက်တဲ့ အကြိမ်အရေအတွက်ကို အကန့်အသတ်မရှိမှတ်ထားပေးနိုင်သော်လည်း ဘယ်အချိန်မှာ Run လိုက်တယ်ဆိုတဲ့ Timestamp ကိုတော့ နောက်ဆုံး Run ခဲ့တဲ့ 8 ကြိမ်ကိုသာမှတ်ထားပေးနိုင်ပါတယ် .. ဥပမာ
PowerShell.exe
ကို 15 ကြိမ် Run လိုက်တယ်ဆိုရင် Run Count မှာ 15 လို့ပြပေမယ့် ဘယ်အချိန်မှာ Run သွားခဲ့တယ်ဆိုတဲ့အချိန်ကိုတော့ နောက်ဆုံး Run ခဲ့တဲ့ 8 ကြိမ်ကိုပဲမှတ်ပေးထားမှာဖြစ်ပါတယ် - Windows XP ကနေ Windows 7 အထိ Prefetch File 128 ခုသာသိမ်းထားပေးပါတယ် .. 128 ပြည့်သွားရင် အဟောင်းတွေကို အသစ်က Overwrite လုပ်သွားပါတယ် .. အဲ့ဒီ Limit ဟာ Windows 8 မှာပြောင်းလဲသွားပြီး အခုဆို 1,024 Files ထိမှတ်ထားပေးနိုင်ပါပြီ
- Windows 10 နဲ့ Windows 11 တို့မှာ Prefetch ကို Compress လုပ်ထားပါတယ် .. အဲ့တော့ Memory ကနေ Prefetch File ကိုဆွဲထုတ်တော့မယ်ဆိုရင် Volatility မှာ
MSCompressionLibrary
လေးသွင်းထားပေးရပါမယ်- ဘာလို့ Memory အကြောင်းထည့်ပြောတာလဲဆိုတော့ အပေါ်မှာကျွန်တော်ပြောတဲ့ 10 စက္ကန့်ကိုသတိရလိုက်ပါ .. Prefetch တွေဟာ App တစ်ခု Run ပြီး 10 စက္ကန့်အကြာအထိ စောင့်ကြည့်နေပြီးမှ Disk ပေါ်ကို Write တယ်လို့ပြောခဲ့ပါတယ် .. အဲ့ Disk ပေါ်မ Write ခင်အချိန်ကာလတွေမှာ Memory ထဲရှိနေမှာပါ .. ဒါကြောင့် Memory Forensics လုပ်ပြီး Prefetch တွေကိုဆွဲထုတ်ကြည့်လို့ရပါတယ် .. Volatility မှာ
prefetchparser
ဆိုတဲ့ Plug-in သုံးနိုင်ပါတယ်
- ဘာလို့ Memory အကြောင်းထည့်ပြောတာလဲဆိုတော့ အပေါ်မှာကျွန်တော်ပြောတဲ့ 10 စက္ကန့်ကိုသတိရလိုက်ပါ .. Prefetch တွေဟာ App တစ်ခု Run ပြီး 10 စက္ကန့်အကြာအထိ စောင့်ကြည့်နေပြီးမှ Disk ပေါ်ကို Write တယ်လို့ပြောခဲ့ပါတယ် .. အဲ့ Disk ပေါ်မ Write ခင်အချိန်ကာလတွေမှာ Memory ထဲရှိနေမှာပါ .. ဒါကြောင့် Memory Forensics လုပ်ပြီး Prefetch တွေကိုဆွဲထုတ်ကြည့်လို့ရပါတယ် .. Volatility မှာ
ဒီ Prefetch File ထဲက Run Count တွေ, Timestamp တွေ, Load ထားတဲ့ Files & Folders တွေကိုကြည့်ချင်ရင်တော့ Eric Zimmerman ဖန်တီးထားတဲ့ PECmd ဆိုတဲ့ Tool ကိုအသုံးပြုလို့ရပါတယ်
အသုံးပြုပုံကတော့အရမ်းရိုးရှင်းပါတယ်
>PECmd.exe -f "<prefetch.pf>"
အပေါ်ကလိုမျိုး -f ဆိုပြီး Prefetch File ကို Point ပေးလိုက်ရုံနဲ့ အဲ့ဒီ Prefetch File ထဲက Information တွေကိုကြည့်လို့ရပါပြီ .. အောက်ကပုံကိုကြည့်ပါ
အနီရောင်ဝိုင်းပြထားတာတွေက Forensics အတွက်အလွန်အသုံးဝင်တဲ့အချက်တွေဖြစ်ပါတယ်
- Timestamps (Create, Modify, Last Accessed)
- Executable Name, File Size, Version
- Run Count -> ဘယ်နှကြိမ် Run ခဲ့လဲဆိုတာပြတာဖြစ်ပါတယ်
- Last Run -> နောက်ဆုံး Run ခဲ့တဲ့အချိန်
- Other Run Times -> ကျွန်တော်အပေါ်မှာပြောခဲ့သလို နောက်ဆုံး Run ခဲ့တဲ့ 8 ကြိမ်မှတ်ပေးထားရာမှာ ဒီနေရာမှာ 7 ကြိမ်ကိုရှာလို့ရမှာဖြစ်ပါတယ်
- Directory Referenced -> Application Run လိုက်တဲ့အခါ Load လုပ်လိုက်တဲ့ Directory တွေဖြစ်ပါတယ်
- Files Referenced -> Application Run လိုက်တဲ့အခါ Load လုပ်လိုက်တဲ့ Files တွေဖြစ်ပါတယ်
ဒါကြောင့် Prefetch Files တွေကအနေအလွန်အသုံးဝင်တဲ့အချက်အလက်တွေကို Extract လုပ်နိုင်မှာဖြစ်ပြီး Digital Forensics သမားတွေသိထားသင့်တဲ့အရာပါပဲ
ဒီနေရာမှာ တစ်ချို့သော Threat Actor တွေဟာ Anti-Forensics Technique တစ်ခုအနေနဲ့ Prefetch File ကိုဖျက်ပစ်ပြီး Malware Execution evidence ကိုဖျောက်ပစ်တတ်ကြပါတယ် .. ဒါတွေကတော့ Defeating Anti-Forensics ခေါင်းစဥ်နဲ့ဆက်လက်ဖော်ပြသွားပါမယ်
အဲ့တာကြောင့်တစ်ချို့တစ်ချို့သော ဆရာကြီးများကလည်း စက်လေးနေရင် Prefetch နဲ့ Temp File တွေကိုဖျက်ဆိုပြီး လျှောက်ပြောနေတာတွေရပ်သင့်ပါပြီ .. Hacker က Forensics Artifact ဖျက်စရာမလိုပဲ ကိုယ်ကိုယ်တိုင်ကဖျက်ပစ်နေသလိုပါပဲ .. Prefetch File ဖျက်ပစ်ဖို့ Local Admin Access လိုအပ်တာကြောင့် UAC Control လုပ်ထားတဲ့ Corporate Environment မှာ Standard Users တွေက ဖျက်ပစ်ဖို့ခဲယဥ်းပေမယ့် တစ်ချို့သော System Admin တွေကအစ Prefetch တွေဖျက်ပစ်တာနေတာမြင်ရတော့ Digital Forensics Professional တွေအတွက်အခက်တွေ့နိုင်ပါတယ်ခင်ဗျာ