Bir adli bilişim uzmanı olarak bazı durumlarda incelenen olay ile ilgili analiz edilen bilgisayarda yer alan şüpheli kodlar üzerinde bu kodun yeteneklerini ortaya çıkartacak ve sistem üzerinde ne tür izler bıraktığının tespitine imkan tanıyacak analizler yapmamız gerekiyor. Bunun için de elde ettiğimiz şüpheli kodlar üzerinde hem statik hem de dinamik olmak üzere bir takım analizler yaparız. Statik analiz adımları şüpheli kodları çalıştırmadan ilgili kod hakkında detaylı bilgi elde etmemize imkan tanıyan adımlar olup genellikle zararlı kod analizinin ilk aşamalarını oluşturur. Örneğin şüpheli kod üzerinde herhangi bir packer kullanılmış mı, hangi fonksiyonlar import edilmiş, şüpheli kod kaç bölümden oluşuyor gibi soruların cevapları statik analiz ile bulunmaya çalışılır. Bu analiz yöntemi için kullanabileceğimiz bir çok yardımcı araç mevcut fakat ben bu yazıda bir çok statik analiz işlemi için kullanabileceğimiz bir frameworkden bahsedeceğim.
PEframe olarak isimlendirilen ve Python ile geliştirilen bu yazılım ile Windows'un çalıştırılabilir dosya formatı olan PE (Portable Executable) formatındaki dosyalar üzerinde kolaylıkla bir takın statik analiz işlemlerini gerçekleştirebilirsiniz. PEframe uygulamasına https://github.com/guelfoweb/peframe adresinden ulaşabilirsiniz. Bu adresten uygulamayı indirdikten sonra aşağıdaki şekilde çalıştırarak uygulamanın neler yapabildiği konusunda bilgi sahibi olabilirsiniz.

Yukarıda listelenen seçeneklerden de görülebileceği üzere PE formatındaki çalıştırılabilir dosyalar üzerinde bir çok analizi kolaylıkla gerçekleştirebiliyoruz. Örneğin aşağıdaki şekilde bir kullanım ile ilgili şüpheli kod tarafından import edilen DLL ve fonksiyonların listesini elde edebiliyoruz.
1localhost:peframe halilozturkci$ python peframe.py –import ../SupheliDosyalar/SupheliDosya02.exe 2 Imported [8] DLL and [10] Functions3 ————————————————————4 KERNEL32.DLL 0x4bcbf8 LoadLibraryA5 KERNEL32.DLL 0x4bcbfc GetProcAddress6 KERNEL32.DLL 0x4bcc00 ExitProcess7 advapi32.dll 0x4bcc08 RegCloseKey8 comctl32.dll 0x4bcc10 ImageList_Add9 gdi32.dll 0x4bcc18 SaveDC10 oleaut32.dll 0x4bcc20 VariantCopy11 URLMON.DLL 0x4bcc28 HlinkNavigateString12 user32.dll 0x4bcc30 GetDC13 version.dll 0x4bcc38 VerQueryValueA14 localhost:peframe halilozturkci$Aşağıdaki şekilde bir kullanımda ise ilgili PE dosyasındaki bölümler hakkında bilgi sahibi olabiliyoruz. Çıktıdan da görülebileceği üzere ilgili PE dosyasında UPX0, UPX1 ve .rsrc isimli üç section yer alıyor. Bu bölümler ile ilgili olarak PEframe tarafından bize sağlanan güzel özelliklerden birisi de ilgili bölümün şüpheli olup olmadığının bize bildirilmesi. Aşağıdaki çıktıda yer alan Suspicious kısmında Yes ifadesinin yer alması ilgili bölümün şüpheli bir kod parçası içerdiğini gösteriyor.
1localhost:peframe halilozturkci$ python peframe.py –sections ../SupheliDosyalar/SupheliDosya02.exe 2 Sections discovered [3]3 ————————————————————4 Section UPX05 Hash MD5 d41d8cd98f00b204e9800998ecf8427e6 Hash SHA-1 da39a3ee5e6b4b0d3255bfef95601890afd807097 VirtualAddress 0x10008 VirtualSize 0x720009 SizeofRawData 010 Suspicious Yes11 Section UPX112 Hash MD5 097ae2a32f34860a4acf0516217c755e13 Hash SHA-1 224c0e8996938c8a123181e05800df8276fa90dc14 VirtualAddress 0x7300015 VirtualSize 0x3100016 SizeofRawData 20070417 Suspicious Yes18 Section .rsrc19 Hash MD5 36050d3c8f469e28dedcd8be928b93af20 Hash SHA-1 9d4cb29f828da19633a3034a4b95c4478bb95df521 VirtualAddress 0xa400022 VirtualSize 0x1900023 SizeofRawData 10188824 Suspicious No25 localhost:peframe halilozturkci$Herhangi bir parametre belirtilmeden PEframe'i kullandığınızda ise karşınıza aşağıdaki tabloda yer alan çıktıdaki gibi bilgiler çıkar. Bu bilgilerden Packer ifadesinin karşısında Yes ibaresinin yer alması ilgili kod üzerinde bir packer kullanıldığını, Anti Debug ifadesinin karşısında Yes ibaresinin yer alması ilgili kod üzerinde debug edilmeyi zorlaştıran tekniklerin kullanıldığını, Anti VM ifadesinin karşısında Yes ibaresinin yer alması ise zararlı kodun sanal bilgisayarlarda çalışmasını engelleyen tekniklerin ilgili kod içinde yer aldığını gösterir. Bunların her birinin detayları ise yine aynı çıktıda özet kısmının altında kendi başlıkları ile yer alır. Örnek bir çıktı aşağıda gösterilmiştir. Çıktıdan da görülebileceği üzere elimizdeki şüpheli kodda packer olarak Microsoft Visual C++ v7.0 kullanılmış, IsDebuggerPresent ve OutputDebugStringA fonksiyonları ile uygulamanın debug edilip edilmediğini anlamaya imkan tanıyacak iki farklı fonksiyon ile Anti Debug özelliği kazandırılmıştır. Bunun yanında şüpheli bulunan API'ler de yine aşağıdaki çıktıda listelenmiştir. En son olarak da ilgili uygulamanın metadata kısmı olarak isimlendirebileceğimiz ve bu uygulamanın ne zaman derlendiği, orjinal isminin ne olduğu gibi bilgilerin yer aldığı kısım gelir.
1localhost:peframe halilozturkci$ python peframe.py ../SupheliDosyalar/SupheliDosya01.exe 2 Short information3 ————————————————————4 File Name SupheliDosya01.exe5 File Size 126976 byte6 Compile Time 2008-12-04 13:42:217 DLL No8 Sections 49 Hash MD5 5c3a079e8a017d6dd0e4be62165ae1f310 Hash SAH1 9c7af38fe429f08c0ee61a50527e126c6208b79f11 Imphash 0c4ccf433a90a129ba8b716f3e70ec1112 Packer Yes13 Anti Debug Yes14 Anti VM No15 Directory Import, Resource, Debug16 Packer matched [1]17 ————————————————————18 Packer Microsoft Visual C++ v7.019 Anti Debug discovered [2]20 ————————————————————21 Function IsDebuggerPresent22 Function OutputDebugStringA23 Suspicious API discovered [13]24 ————————————————————25 Function CreateFileA26 Function CreateProcessA27 Function GetCurrentProcess28 Function GetCurrentProcessId29 Function GetFileSize30 Function GetModuleFileNameA31 Function GetModuleHandleA32 Function GetUserNameA33 Function GetVersionExA34 Function IsDebuggerPresent35 Function OutputDebugStringA36 Function Sleep37 Function WriteFile38 Suspicious Sections discovered [1]39 ————————————————————40 Section .rsrc41 Hash MD5 c1d9ac11141a1ec8d05c8ae029a64af442 Hash SHA-1 fa70307368a2878d422b0a3fb164cdbcf4754cc843 File name discovered [21]44 ————————————————————45 Log %s-%d.log46 Library ADVAPI32.dll47 Text ERRORLOG.TXT48 Library KERNEL32.dll49 Library MSVCR71.dll50 Library USER32.dll51 Library VERSION.dll52 Executable XCrashReport.exe53 Library avcodec.dll54 Library avformat.dll55 Library avswscale.dll56 Library avutil.dll57 Library dbghelp.dll58 Database e:\compile_tmp\20081204-193543-0c04\0461105984\obj\intel\Release\ffmpeg\ffmpeg.pdb59 Library libmmd.dll60 Library ole32.dll61 Adobe Flash tmp.swf62 Library video-subtitle.dll63 Library video_effects.dll64 Log vstats_%02d%02d%02d.log65 Library watermark.dll66 Meta data found [10]67 ————————————————————68 LegalCopyright Copyright (C) 200869 InternalName avc70 ModifyDate 2008-11-1771 FileVersion 1.0.0.120472 CompanyName ImTOO Software Studio73 ProductName avc Application74 ProductVersion 1.0.0.120475 FileDescription avc Application76 OriginalFilename avc.exe77 Translation 0x0804 0x04b078 Wait please… storing info into the db79 Added to databse.80 localhost:peframe halilozturkci$Elimizdeki bir başka şüpheli koda ilişkin örnek çıktıyı da fikir vermesi açısında aşağıdaki tabloda bulabilirsiniz.
1localhost:peframe halilozturkci$ python peframe.py ../SupheliDosyalar/SupheliDosya02.exe 2 Short information3 ————————————————————4 File Name SupheliDosya02.exe5 File Size 303616 byte6 Compile Time 1992-06-20 01:22:177 DLL No8 Sections 39 Hash MD5 86dc2a3c8554cc5d7e733d60a26e9a3710 Hash SAH1 5f6043b07b2fed2a867c5cace239a75ec0b9657d11 Imphash 90604cab556f77caa1e77170a4668f1212 Packer Yes13 Anti Debug No14 Anti VM No15 Directory Import, Resource, TLS16 Packer matched [3]17 ————————————————————18 Packer UPX v0.80 – v0.8419 Packer UPX 2.90 (LZMA)20 Packer UPX -> www.upx.sourceforge.net21 Suspicious API discovered [3]22 ————————————————————23 Function GetProcAddress24 Function LoadLibraryA25 Function RegCloseKey26 Suspicious Sections discovered [2]27 ————————————————————28 Section UPX029 Hash MD5 d41d8cd98f00b204e9800998ecf8427e30 Hash SHA-1 da39a3ee5e6b4b0d3255bfef95601890afd8070931 Section UPX132 Hash MD5 097ae2a32f34860a4acf0516217c755e33 Hash SHA-1 224c0e8996938c8a123181e05800df8276fa90dc34 File name discovered [8]35 ————————————————————36 Library KERNEL32.DLL37 Library URLMON.DLL38 Library advapi32.dll39 Library comctl32.dll40 Library gdi32.dll41 Library oleaut32.dll42 Library user32.dll43 Library version.dll44 Wait please… storing info into the db45 Added to databse.46 localhost:peframe halilozturkci$


