eCDFP (Data Representation & File Examination) (Part-5)
Exe Analysis
EXE File တွေကို အခြားသော File Type တွေလိုပဲ Analysis, Extract ပြုလုပ်လို့ရပါတယ်။ Text, Document, Word File တွေကို ဖွင့်ကြည့်တာက Executing ပြုလုပ်တာမဟုတ်ပါ။ EXE File ကိုTEXT File လိုသဘောထားကြည့်မယ်ဆိုရင် EXE File ထဲမှာ Processor ကို Read, Execute လုပ်ဖို့အတွက် Instruction တွေပါဝင်ပါတယ်။
Executable File Format တွေက Operation System အပေါ်မူတည်ပြီး ကွာခြားမှုတွေရှိပါတယ်။ Window မှာဆိုရင် Portable Executable (PE) Or (EXE) လို့ခေါ်ပါတယ်။ Linux မှာဆိုရင်တော့ Executable Linkable Format (ELF) OR Binary File လို့ခေါ်ပါတယ်။ EXE File တွေကို Compiler ကနေပြုလုပ်ထားပြီး C, C++,C#, JAVA တို့နဲ့ရေးသားပြီး EXE File အဖြစ် Compiles လုပ်ထားတာဖြစ်ပါတယ်။ Compiler ကနေ Original Code ကိုယူပြီး Processor နားလည်ဖို့အတွက် Machine Code အဖြစ်ပြောင်းလဲပေးပါတယ်။
EXE File အဖြစ်မပြောင်းလဲခင်မှာ Code ထဲကို Compiler က Header ကို ပါပေါင်းထည့်ပါတယ်။ EXE EXE File တိုင်မှာ ကိုယ်ပိုင် Pre-defined format ရှိပါတယ်။ Header ပါတဲ့ EXE File တိုင်းမှာ Investigation အတွက် အသုံးဝင်တဲ့ Metadata တွေပါဝင်ပါတယ်။ EXE File Analysis က သံသယဖြစ်ဖွယ်ရှိတဲ့ File တွေကို Analysis လုပ်တဲ့အခါမှာ အသုံးပြုပါတယ်။ EXE File ရဲ့ Content တွေနဲ့ Metadata တွေကို နားလည်မယ်ဆိုရင် Investigation အတွက် အသုံးဝင်လာပါတယ်။
တစ်ခါတစ်ရံ EXE File ဟာ မူလ EXE File ဟုတ်-မဟုတ် ကို Analysis လုပ်ရတာတွေလဲရှီပါတယ်။ EXE File တွေကို Analysis ပြုလုပ်ခြင်းဖြင့် Incident or Attack လားဆိုတာကို ခွဲခြားနိုင်ပါတယ်။ ဥပမာ အနေနဲ့ Wannacry ransomware attack မှာ Analysts တွေက Malwares ရဲ့ Sign ကိုကြည့်ပြီး Malware က အခြား Malwares တွေနဲ့ဆက်စပ်မှုရှိသလား အဲဒီ Malware က ဘယ်အဖွဲ့အစည်း ဘယ်နိုင်ငံကပြုလုပ်တာလဲဆိုတာကို Analysis ပြုလုပ်ပါတယ်။ Example - MITRE Attack & Defender
အခု Course က Malware Analysis Course အဟုတ်ပေမဲ့ Basic EXE File Analysis လုပ်တာကိုတော့ Forensics Investigator တစ်ယောက်အနေနဲ့ သိထားသင့်ပါတယ်။ EXE File Analysis လုပ်တာကို မစခင် EXE File Header နဲ့ Section အကြောင်းကို အရင်ဆုံးဖော်ပြပါမယ်။ EXE File မှာ Header အပြင် EXE File ထဲမှာပါဝင်တဲ့ Content တွေကို Section အဖြစ် ပိုင်းခြားထားပါတယ်။ Header လုပ်ပဲ Section ကလဲ Analysis လုပ်ရမှာ အရေးကြီးတဲ့ အပိုင်းတစ်ပိုင်းဖြစ်ပါတယ်။ EXE File ရဲ့ Header ထဲမှာပါဝင်တာတွေကတော့ Export – Exe ထဲမှာပါဝင်တဲ့ Function ဖြစ်ပြီး အခြား Executable ကိုခေါ်သုံးနိုင်ပါတယ်။ အပေါ်မှာပြောခဲ့သလိုပဲ EXE File ထဲမှာ CPU ကနေ Read and Execute လုပ်နိုင်တဲ့ Code တွေပါဝင်ပါတယ်။
Executable File က .exe Extension တစ်ခုထဲမဟုတ်ပဲ .DLL File တွေကလဲ Coding တွေပါတဲ့ Executable File တစ်မျိုးဖြစ်ပါတယ်။ နှစ်ခုကွာခြားချက်က .DLL File တွေက Executable File တွေလို Double Click နဲ့ Run လို့မရပါ။ Application တစ်ခုရေးတဲ့အခါမှာ Code တွေအားလုံးကိုမရေးပဲ အခြားရေးသားပြီးသား Code ကို Link လုပ်တာတွေရှိပါတယ်။ Linking က Copy/Paste လုပ်တာနဲ့မတူညီပါဘူး။ Linking လုပ်တာက Programmer က အခြားသော Code တွေကို သူရဲ့ Application ထဲမှာ ခေါ်သုံးတာဖြစ်ပါတယ်။ အဲဒီလိုပြုလုပ်တာကို Importing လုပ်တယ်လိုခေါ်ပါတယ်။
.EXE File က .DLL File ထဲက Code တွေကို ယူသုံးတာဖြစ်ပါတယ်။ .DLL File က Code /Data တွေပါတဲ့ Repository တစ်ခုဖြစ်ပါတယ်။ .DLL File ထဲကနေ .EXE File တွေက Import လုပ်နိုင်ပါတယ်။ .DLL File ထဲကနေ Code တွေကို အခြား Program တွေကနေ Import လုပ်ပြီး Run လုပ်တာကို Exporting လုပ်တယ်လို့ခေါ်ပါတယ်။ .DLL File ထဲက Code တွေကို Segment အဖြစ်ပိုင်းခြားထားပါတယ်။ အဲဒါတွေကို Function လို့ခေါ်ပါတယ်။ .EXE File က .DLL File တစ်ခုလုံးကို Import လုပ်ပြီး ယူမသုံးပဲ .DLL ထဲကနေ လိုအပ်တဲ့ Segment/ Function ကိုပဲယူသုံးတာက ပိုပြီး အဆင်ပြေပါတယ်။
.DLL File တွေကို Doubcle Click နဲ့ Run လို့မရတဲ့အတွက် Import လုပ်ပြီး run တဲ့နည်းတင်ရှိတာမဟုတ်ပါဘူး။ Window မှာပါတဲ့ System EXE File ဖြစ်တဲ့ rundll32 က .DLL File Name နဲ့ File ထဲမှာပါတဲ့ Function Name ကိုယူပြီး Run နိုင်ပါတယ်။ Linking, Import, Export လုပ်တာတွေကို ကြည့်ပြီး Import လုပ်ထားတဲ့ Function Name တွေ Export လုပ်ထားတဲ့ အခြား EXE တွေကို Analysis လုပ်နိုင်ပါတယ်။ Malware Analysis အတွက် DLL File ထဲမှာပါဝင်တာတွေ အသုံးပြုထားတဲ့ Function တွေကိုနားလည်ထားရမှာဖြစ်ပါတယ်။ ဥပမာ အနေနဲ့ Offline Game Application တစ်ခုမှာ Online ကို Access လုပ်ဖို့ WSOCK32.DLL File ကို Import လုပ်ပြီး ခေါ်သုံးဖို့မလိုအပ်ပါဘူး။ WSOCK32.DLL File က အင်တာနက်ကို ချိတ်ဆက်ဖို့ Socket Create ပြုလုပ်မှာဖြစ်တဲ့အတွက် ခေါ်သုံးထားတယ်ဆိုရင် Suspicious Sign တစ်ခုဖြစ်ပါတယ်။ .EXE File နဲ့Link လုပ်ထားတဲ့ Function တွေကို Dependency Walker မှာကြည့်နိုင်ပါတယ်။ Dependency Walker DownLoad Link
.EXE File Header ထဲမှာနောက်ထပ်တွေ့နိုင်တာတစ်ခုကတော့ Time Stamp ဖြစ်ပါတယ်။ Time Stamp က Program က ဘယ်အချိန်မှာ ပထမဆုံး Compile လုပ်တယ်ဆိုတာကိုပြသပါတယ်။ ဒါပေမဲက အချို့သော Compiler တွေက အမြဲတမ်း fixed Time ဖြစ်နေပါတယ်။ Example – Delphi Compiler က Date Of Creation ကို 1997 အနေနဲ့ အမြဲတမ်းပြသပါတယ်။ Malware ရေးသာသူတွေက Analysis လုပ်တဲ့သူတွေ ခက်ခဲအောင်Time Stamp ကိုလွဲမှားစွာအမြဲတမ်းဖော်ပြထားပါတယ်။ Section ထဲမှာပါတဲ့ SubSystem Field ကတော့ GUI Application လား Command Line Application လားဆိုတာကို ပြသပါတယ်။ Resource Field ကတော့ String, Icons, Menu, etc .. စတဲ့ Resource တွေကိုဖော်ပြပါတယ်။ .EXE File body ကိုတော့ Segment တွေအဖြစ်ပိုင်းထားပါတယ်။ Segment တစ်ခုစီမှာ မတူညီတဲ့ Data/Code တွေပါဝင်ပါတယ်။ Segment တွေကတော့ - Text, rdata, data, rsrc, reloc တို့ဖြစ်ပါတယ်။
Text Segment ထဲမှာ CPU ကို Read and Execute လုပ်ဖို့ Insturction ပေးတဲ့ Executable Code တွေပါဝင်ပါတယ်။ Text Segment အပိုင်းက Reverse Engineering လုပ်ဖို့အတွက် အရေးပါတဲ့ အပိုင်းတစ်ပိုင်းဖြစ်ပါတယ်။
rdata Section မှာတော့ .DLL File တွေကနေ Import, Export လုပ်တဲ့ Infomration တွေပါဝင်ပါတယ်။ Import, Export လုပ်တဲ့ Infomration တွေကို သီးသန့်အနေနဲ့ အကန့်တွေခွဲထားပါတယ်။ Import လုပ်တဲ့ Infomration တွေကို idata section အနေနဲ့သိမ်းထားပြီး Export လုပ်တဲ့ Infomration တွေကိုတော့ edata section အနေနဲ့သိမ်းဆည်းထားပါတယ်။
rsrc section မှာတော့ icons, string, menus, etc စတဲ့အကြောင်းအရာတွေပါဝင်ပါတယ်။ ဒီ Section ကတော့ Application ကို Translate လုပ်တဲ့နေရာနဲ့ အခြား Language ကို add တဲ့နေရာမှာ အများဆုံး အလုပ်လုပ်ပါတယ်။ .EXE File ကို Analysis လုပ်တဲ့အခါ Document, Image တွေကို Analysis လုပ်ရတာထက်ပိုပြီး ရှုပ်ထွေးပါတယ်။ Execute , Run လို့ပဲလုပ်လို့ရပြီး တိုက်ရိုက် read လုပ်လို့မရတဲ့အတွက်ဖြစ်ပါတယ်။ .EXE File တွေကို Hex Editor နဲ့ ဖွင့်ပြီး Analysis ပြုလုပ်လို့ရပါတယ်။ .EXE File ကို Analysis လုပ်ရတာ ရှုပ်ထွေးမှုတွေရှိတာကြောင့် Hex Editor နဲ့တင် Analysis လုပ်ဖို့ မလုံလောက်ပါဘူး။ အခြားသော Tools တွေ Method တွေပါ အသုံးပြုရပါတယ်။ ယေဘူယျအားဖြင့် နည်းလမ်း ၂ ခုရှိပါတယ်။ Static Analysis နဲ့ Dynamic Analysis တို့ဖြစ်ပါတယ်။
Static Analysis က EXE File ကို Execute (Run မလုပ်ပဲ) Analysis ပြုလုပ်တာဖြစ်ပါတယ်။ .EXE File Header ကို (Basic Static Analysis) ပြုလုပ်ခြင်း၊ .EXE File ရဲ့ Content/Code တွေ Reverse Engineer ပြုလုပ်ခြင်း၊ Assembly Code ( CPU Language) တွေကို (Advance Static Analysis) ပြုလုပ်ခြင်းတို့ဖြစ်ပါတယ်။
Dynamic Analysis ကတော့ .EXE File ကို Virtual Machine လို Safe ဖြစ်တဲ့နေရာမှာ Run ကြည့်ပြီး .EXE File ရဲ့ Behavior တွေကို Monitoring ပြုလုပ်ခြင်း( Basic Analysis). EXE File ထဲမှာပါတဲ့ Code တွေကို Debugger ထဲမှာ Step By Step Run ကြည့်ပြီး သူရဲ့ Behavior တွေကို Monitoring ပြုလုပ်ခြင်း (Advanced Analysis)
Course မှာတော့ Static Analysis ကိုမှ Basic အပိုင်းကိုသာ ဖော်ပြမှာဖြစ်ပါတယ်။ ကျန်တဲ့အပိုင်းတွေက malware Anlysis နဲ့ Reverse Engineering အပိုင်းတွေဖြစ်ပါတယ်။ Suspecious ဖြစ်တဲ့ .EXE File ကို Virus Total မှာ Upload လုပ်ပြီး ကြည့်နိုင်ပါတယ်။ Antivirus Results က အမြဲတမ်းမမှန်ကန်နိုင်တဲ့အတွက် Antivirus Results ကိုပဲ အမြဲတမ်း မမှီခိုသင့်ပါဘူး။
Virtual Total Link Virus-Scan-Org Kaspersky
Peview နဲ့ .EXE File ထဲမှာပါတဲ့ Header Information တွေနဲ့ Section တွေကိုကြည့်နိုင်ပါတယ်။အချို့သော Header နဲ့ Section Information တွေကိုတော့ကြည့်လို့ရနိုင်မှာမဟုတ်ပါဘူး။
IMAGE_FILE_HEADER ရဲ့ Machine Filed မှာ Compile လုပ်ထားတဲ့ Machine Information ကိုတွေ့နိုင်ပါတယ်။ Number Of Section Field မှာ. EXE File ထဲမှာပါတဲ့ Section အရည်အတွက်ကိုကြည့်နိုင်ပါတယ်။ TimeStamp Field မှာ ပထမဆုံး Compile လုပ်တဲ့ date ကိုတွေ့နိုင်ပါတယ်။ တစ်ကယ်လို့ TimeStamp Date က မှန်ကန်မယ်ဆိုရင် Attack ဘယ်အချိန်မှာ ဖြစ်တယ်ဆိုတာကိုတွေ့နိုင်ပါတယ်။ Malware ရေးသားသူတွေက Analysis လုပ်တာ ခက်ခဲအောင် Time Stamp ကိုပြင်ဆင်ထားတတ်ပါတယ်။ ဒါကြောင့် Machine ရဲ့ Date, Time နဲ့ မတူညီရင် ဒါမှမဟုတ် Date Time မမှန်ကန်တာရှိရင် Suspect အဖြစ်မှတ်ယူနိုင်ပါတယ်။
IMAGE_OPTIONAL_HEADER မှာ အသုံးဝင်တဲ့အချက်အလက်တွေပါဝင်ပါတယ်။ subsystem မှာတော့ Application က GUL လား CMD Application လားဆိုတာကိုတွေ့နိုင်ပါတယ်။ ပုံမှာမြင်ရတာကတော့ GUI Application ပဲဖြစ်ပါတယ်။
IMAGE_SECTION_Header မှာတော့ EXE File ထဲက Section မျိုးစုံကိုတွေ့နိုင်ပါတယ်။ အဓိက အားဖြင့် Memory Location နေရာတွေကိုပြသပါတယ်။ Virtual Size ကတော့ .EXE File က RAM ထဲမှာ loading လုပ်တဲ့အချိန်မှာ Section က Memory Space ဘယ်လောက်လိုလဲဆိုတာကိုပြသပါတယ်။ RAW Data ကတော့ Disk ပေါ်မှာလိုတဲ့ Size ကိုပြသပါတယ်။ ပုံမှန်အားဖြင့် ဒီနှစ်ခု တန်ဖိုးက Equal or Very Close ဖြစ်ပါတယ်။ Code ကို Pack လုပ်လိုက်ပြီးတဲ့နောက်မှာ Text Section ရဲ့ Memory Size က Disk ပေါ်က Size ထက်များရမှာဖြစ်ပါတယ်။ .rsrc အပိုင်းကိုတော့ Resource Hacker ကိုအသုံးပြုပါမယ်။
Resource Hacker ကိုအသုံးမပြုခင်မှာ Application က Resource Hacker နဲပြင်ထားပြီးသားလဲ ဖြစ်နိုင်ပါတယ်။ Translation and Language Change တာတွေကို Resource Hacker နဲ့ပြုလုပ်ကြပါတယ်။
ဘယ်ဘက်မှာ rsrc section မှာပါဝင်တဲ့အပိုင်းတွေကိုတွေ့ရမှာဖြစ်ပြီး။ Icon Section မှာ Application ထဲမှာပါဝင်တဲ့ Icon တွေကိုတွေ့ရမှာဖြစ်ပါတယ်။ Image Section မှာ Application ထဲမှာပါဝင်တဲ့ Image တွေကိုတွေ့ရမှာဖြစ်ပါတယ်။ String table ကတော့ Application ထဲမှာပါဝင်တဲ့ String အားလုံးပါဝင်ပါတယ်။ Linux မှာပါဝင်တဲ့ String Tools နဲ့လဲ String ကို Analysis လုပ်လို့ရပါတယ်။ String ထဲမှာ Malware Analysis အတွက် အသုံးဝင်တဲ့ Function Call, Password, Domain Name, IP Address တွေကိုတွေ့နိုင်ပါတယ်။ Version Info ထဲမှာတော့ Application ရဲ့ Description တွေပါဝင်ပါတယ်။
Analysis လုပ်တဲ့အခါ အထက်မှာဖော်ပြခဲ့သလို Output ထွက်ရမဲ့ အဖြေတွေက နည်းနေရင်၊ လုံးဝမရှိရင် Example – No String, No Import Function, No Export Function, စတာတွေမပါရှိရင် Application ကို Packer တွေနဲ့ ပြန်ပြီး ပြုလုပ်ထားတာဖြစ်ပါတယ်။ Packing ကတော့ Malware Analysis ပြုလုပ်တာကို ခက်ခဲအောင်အသုံးပြုတဲ့ Technique ဖြစ်ပါတယ်။ (END) (Module-3)
Comments