blacknbunny
Üye
Malware Analysis - Static Analysis (Part 2)
Merhaba arkadaşlar Malware Analizi serimin ikinci part’ına hoşgeldiniz.Bu part içerisinde bir Malware ‘nin Statik analizinin nasıl yapacağını anlatacağım.
İleride ki part içerisinde Dinamik analizini anlatacağım.
Bu ikisini ayrı ayrı partlara bölmemin sebebi ikisininde tam olarak derinliklerine ineceğiz. Bu yüzden ikisini ayrı ayrı paylaşma gereği duydum.
Önceki part içerisinden Win 7 ve REMnux ‘u kurduğunuzu aynı zamanda Network ve Snapshot ayarlarını gerçekleştirdiğinizi varsayıp devam ediyorum.
Bu yazımızda Sanal Makine kullanmayacağız. Çünkü Malware ‘yi çalıştırmadan inceleyeceğiz. Yalnız ileride Dynamic Analysis yazımda artık bir kaç Malware çalıştırmaya başladığımızda Sanal Makine kullanacağımız için gerekli olacaktır.
Şimdi yavaştan yazımıza geçelim ve bir Malware ‘nin Statik analizinin nasıl yapacağını anlatalım.
What The F!!K is packing and obfuscating ?
Bir Malware ‘nin Statik analizini gerçekleştirmeye başlayacağımızda bakmamız gereken ilk noktalardan biri Pack ve Obfuscate terimleridir.Hemen bu terimlere daha önce denk gelmeyen arkadaşlar için basitçe anlatayım.
Packing Nedir ?
- Dosya sıkıştırma denilebilir basit bir şekilde.
- Sıkıştırılan dosya kendi içinde aynı zamanda bu sıkıştırmayı çözmek için bir kod bulundurur.
- Genellikle packlenmiş yani sıkıştırılmış dosyalar bu packing’i kendi içinde çözmek için anahtarlar kullanır.
- Dahada basit bir şekilde Packing bir Zararlı Yazılımın asıl kodlarını Encode eder yani Şifreler .
- Bir Zararlı Yazılım ‘ı Pack ‘lemenin asıl amacı Ana Kod ‘u Encode etmek ve sonra bu Zararlı Yazılım çalıştığında Encode edilmiş kodu Memory yani Hafıza içerisinde çözmektir.
- Bir Malware ‘nin analizini engellemek için ve kafa karıştırmak için çokça kullanılan bir yöntemdir.
Ekli dosyayı görüntüle 422
Obfuscating Nedir ?
- İnsanların anlaması için zorlaştırma işlemi denilebilir basit bir şekilde.
- Bir kodu ne kadar daha az okuna bilir kılarsanız anlaşılmasıda zorlaşır buda bir Malware ‘nin anlaşılmasını zorlaştıran bir yöntemdir.
- Örneğin elimizdeki isim değişkeni kod içerisinde vtkej12ns şeklinde göründüğünde bu değişkenin isim alanını tuttuğun anlamak zorlaşır ve buda Obfuscated bir değişkendir.
Yukarıda bulunan resimdeki basit bir HTML ve Javascript kodunun ne kadar karmaşıklaştırıldığı anlaşılabilir durumda.
How to unpack and deobfuscate
Öncelikle aşşağıdakileri anlamakta zorluk çekebilecek arkadaşlarımız için bazı terimlerin türkçe karşılığını yazayım :Portable Executable
- Çalıştırılabilir dosyamızdır. Buna uzantısı .exe vs… olan dosyalarda denilebilir.
- Bir yazılımı Encode etmeye yarayan yazılım.
- Encode edilmiş bir yazılımı çözmeye yarayan yazılım
- Çalıştırılabilir dosyamızın içerdiği Code , Data gibi bilgileri tutan bölümlerdir.
Detecting packing and unpacking it
Detecting packing
Pack edilmiş bir Malware ‘yi Unpack etmek yani çözmek ise bazen işin en kolay kısmı olabilirken en zor kısmıda olabilir.Öncelikle pack edilmiş bir Malware ‘nin hangi pack yazılımını kullandığını bulmamız gerek.
Fakat bunu gerçekleştirebilecek Yazılım ‘ları göstermeye geçmeden önce önemli bir not eklemek istiyorum. Hangi pack bulma yazılımını kullanırsanız kullanın bu yazılımlar sadece bilinen Packer ‘ların isimlerini tutuyor.
Dolayısı ile bulunamayan bir Packing işlemini anlamak için Portable Executable yani Çalıştırılabilir Dosya ‘mızın PE Section ‘larına bakmamız gereklidir.
Pack edilmiş bir Malware ‘nin hangi Pack yazılımını kullandığını bulmak için bazı araçlar :
- RDG Packer Detector
- PEiD
Eğer Packer adını verdiyse ve bu Packer için herhangi bir Unpacker bulunmuyorsa kendi ellerinizle işi bitirmeye kendinizi yavaştan hazırlamaya başlayın.
Packer ‘in adını bulamadıysanız şayet Portable Executable içerisinde yani Malware ‘miz içerisinde bir Packing işleminin gerçekleştiğini anlamak için PE Section ‘larına bakmanız yeterli olacaktır.
Yukarıdaki fotorafta örnek bir Portable Executable ‘nin UPX Packer ile Pack ‘lendiğini görebiliriz.
Genellik ile normal bir PE ‘nin içerdiği Section ‘lar dışında Section ‘lar içeren PE ‘ler Packing işlemine tabir tutulduğunu ortaya dökmemiz için bir yoldur.
Ayrıca sadece Packing işlemi değil aynı zamanda bu Section ‘lar içerisinden Zararlı Yazılım ‘ın kendi içerisinden farklı bir yazılım çıkarttığı gibi değişik türde durumlara şahit olabilirsiniz.
Unpacking
Dosyanın yani Malware ‘nin bir Packing işlemi içerdiğini anladıktan sonra kendi elimizle Unpack etmek için herhangi bir Debugger aracılığı ile Malware ‘yi izleyip kendini Memory İçerisinde Unpack ettikten sonra Unpack edilmiş Kodu dışarıya bir .exe olarak aktarabiliriz.Bir arkadaşımız Amber Packer adında bir Packing yazılımı geliştirdi. Yukarıda bahsettiğimiz toollardan neredeyse hepsi bunu bulamıyor.
Ve bulamamasına rağmen yukarıda bahsettiğim tekniği kullanıp bu Packing edilmiş dosyayı Unpack edip bunu blog yazısına döken sevdiğim bir arkadaşımın blog yazısı :
Amber unpacking
Detecting obfuscating and deobfuscating it
Detecting Obfuscating
Detecting kısmı çok basit.Anlaşılabilir bir Kod ise şayet Obfuscated bir Kod değildir.
Anlaşılmaz bir Kod ise Obfuscated bir Kod olduğu söylenebilir.
Ekli dosyayı görüntüle 423
Deobfuscating
Bir Obfuscated kodu Deobfuscate etmek için Değişkenlerin , Fonksiyonların neler yaptığını takip edip sonra yaptığı şeye göre tekrar isimlendirebilirsiniz.Ya da internette bulunan Deobfuscation Tool ‘larından yararlanabilirsiniz.
Buraya 13 tanesinin listelendiği bir forum post’unu bırakıyorum :
13 Deobfuscator Tools
Basit bir şekilde bir Malware ‘nin yapılması gereken ilk iki Statik analizinden bahsettim.
Şimdi yavaştan Malware ‘mizin diğer Statik analizlerini yapıp Zararlı yazılımımızı dahada yakından tanıyalım.
Linked Libraries And Functions
Bir Malware ‘yi yani Zararlı Yazılım ‘ı daha yakından tanımak için içerdiği Kütüphane ve Fonksiyon ‘lara bakmamız yeterli olacaktır.15 kilo dumbell’ı kanadıma çektikten sonra bu kısımı daha da derinden inceleyeceğiz.
Ve çokta zorlu olmayan setlerden sonra geldim.
Şimdi örnek bir Malware ‘nin Kütüphane ve Fonksiyon ‘larını listelemek için kendi yazdığım peanalyzertool’unu kullanıp Malware ‘miz neler yapıyor inceleyelim.
Tool’u indirdikten sonra :
Kod:
python peanalyzer.py --file file.exe --show imports
Sonrasındaki çıktıda Kütüphaneler içerisinden Program içerisinde hangi fonksiyonların kullanıldığını listelemiş olacağız.
Ekli dosyayı görüntüle 424
Bu bir Malware ‘nin kullandığı fonksiyonlar değil yalnız bu Fonksiyonlar arasından ShellExecuteW , GetCurrentProcess gibi Fonksiyonlar genellik ile Malware ‘ler tarafından kullanılıyor.
Burada objektif bir şekilde anlatıyorum size bunu. Artık siz kendi inceleyeceğiniz Malware ‘yi daha yakından tanımak için neler yapmanız gerektiğini daha iyi anlayacaksınız.
Yani bir Zararlı Yazılım ‘ın herhangi bir Internet Sayfasından dosya indirdiğini Fonksiyonlar aracılığıyla görmek mümkün.
Ve bu sayede kafanızda Zararlı Yazılım ‘ın neler yaptığına dair kafamızda bir şema olacaktır.
Kütüphaneler ‘in ve Fonksiyon ‘ların Statik bir analiz içerisinde ne gibi büyük bir rol oynadığını bu şekilde anlayabilirsiniz.
Disassemble, Decompiling, Patching
Disassemble
Statik bir analiz içerisinde ayrıca Malware ‘nin nasıl bir gidişat izlediğini görmek ve düzenlemek bize ayrıca büyük bir avantaj sağlar.Yukarıda da kullandığımız peanalyzer tool’u yazılımları Disassemble etmemize yarıyor.
Kod:
python peanalyzer.py --file file.exe --disassemble all
File.exe ‘yi bir malware olarak düşünürsek şayet Assembly dilinde neler yaptığını incelememiz çok yararlı olacaktır.
Decompiling
Şayet bazı Malware ‘leri Assembly değilde kendi dilinden okumak mümkün olabiliyor.Örneğin bir C# ile yazılan Malware ‘nin Kaynak Kod ‘u verilmesede bazı araçlar ile o Kaynak Kod ‘u almak mümkün.
Yani kısaca Compile edilip Assembly ‘e çevirilen bir kodu tekrar eski haline çevirmek Decompiling oluyor.
Dahada kısaca aşşağıdaki fotorafı tersine çevirdiğinizde olan şey basit bir şekilde Decompiling .
Patching
Hex Code ‘ları yani Shellcode ‘ları ile oynama zamanı geldi demek bu.Diyelim ki Zararlı Yazılım ‘ı geliştiren kişi UploadFileToServer adında bir fonksiyon geliştirdi Program içerisinde.
Ve sizin bazı özel dosyalarınızı kendi Sunucu ‘suna yüklüyor. Ve bu şekilde Sunucu ‘dan direk bu dosyalara ulaşabiliyor.
Diyelim ki bu Fonksiyon 1 adet string alıyor parametre olarak. Ve bu parametrede yükleyeceği dosya olsun.
Ve bu parametreyide Zararlı Yazılım Geliştiricisi özel olarak secret.txt olarak atadı.
Şayet biz bunu program içerisinde Hex Code ‘ları arasında değiştirip reverseshell.php adında kendi yazdığımız küçük bir Reverse Shell kodları içeren PHP dosyası ile değiştirdik.
Ve bilgisayarımızdan PORT ‘u dinlemeye başladık.
Bu dosya Remote Server ‘e yükleneceğinden. Zararlı Yazılım geliştiricisinin sunucusuna basit bir şekilde ulaşabileceğiz.
Ve basit bir şekilde Patching bu.
PE İçerisinden Alabileceğimiz Bilgiler
TimeDateStamp : Yazılan Program ‘ın yani Zararlı Yazılım ‘ın ne tarihte ve ne zamanda Compile edildiği bilgisini tutar.Bu bilgi değiştirilebilirdir Expert Malware Developer arkadaşlarımız genellikle bunun yerine sahte bir bilgi koymayı tercih eder malum çok büyük bir yazılım ise şayet devlet baba uyumuyor.
Ekli dosyayı görüntüle 425
Bunun dışında Yazılım ‘ın hangi dil ile geliştirdiği,
Compiler olarak ne kullanıldığı dair tüm bilgileri içerir.
Windows ‘un PE dökümantasyonu :
PE Format
Statik analiz için işimizi kolaylaştıracak kaynaklar ve birkaç tool
Genellikle kullandığım araçlar :
- RegShot : Malware çalışmadan önce Registry ‘i kaydedip çalıştıktan sonraki ile karşılaştırmamıza yarıyor. Basitce Malware ‘nin Registry içerisinde neleri değiştirdiğini inceleyebiliriz.
- PE-Bear : Zamanında CIA ‘inde kullandığı bir PE View aracı.
Güzel kaynaklar :
malwareanalysis.tools : Web sayfası içerisinden analizini yaptığınız malware için ne gerekiyorsa basit bir şekilde ulaşabilmenizi sağlayan yararlı bir sayfa.awesome-malware-analysis : Güzel bir Cheat Sheet malware analizi için.
THE END
Umarım yazıyı okurken keyif almışsınızdır.Sorular için twitter : 0DAYanc
Moderatör tarafında düzenlendi: