Malware Analysis - Static Analysis (Part 2)

Malware Analysis - Static Analysis (Part 2)​

Merhaba arkadaşlar Malware Analizi serimin ikinci part’ına hoşgeldiniz.

228e7aa3be2168ccd199a6ba11bcd86937d997e2.jpeg


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 ?
  1. Dosya sıkıştırma denilebilir basit bir şekilde.
  2. Sıkıştırılan dosya kendi içinde aynı zamanda bu sıkıştırmayı çözmek için bir kod bulundurur.
  3. Genellikle packlenmiş yani sıkıştırılmış dosyalar bu packing’i kendi içinde çözmek için anahtarlar kullanır.
  4. Dahada basit bir şekilde Packing bir Zararlı Yazılımın asıl kodlarını Encode eder yani Şifreler .
  5. 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.
  6. Bir Malware ‘nin analizini engellemek için ve kafa karıştırmak için çokça kullanılan bir yöntemdir.
Bir Packing ‘in Routine ‘ini yani Rutin ‘ini gösteren googleden bulduğum görsel :
Ekli dosyayı görüntüle 422

Obfuscating Nedir ?
  1. İnsanların anlaması için zorlaştırma işlemi denilebilir basit bir şekilde.
  2. 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.
  3. Ö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.
Örnek bir Obfuscate edilmiş kod :

2fd3fb9def39f4c5c23b88176ea4a12f602acd03.png


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.
Packer
  • Bir yazılımı Encode etmeye yarayan yazılım.
Unpacker
  • Encode edilmiş bir yazılımı çözmeye yarayan yazılım
PE Sections
  • Ç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 :
  1. RDG Packer Detector
  2. PEiD
Bu verdiğimiz toollardan eğer Malware ‘nin Packer adını çıkarabilirseniz bu Packer ‘in bir Unpacker ‘ini bulmaya aramaya başlayabilirsiniz.

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.

08591f134e65da231473fb396a557c58cc789b6a.png


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
Demeniz yeterli olacaktır.

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
c4fc3a14ff5fd960ea9b47a030293b5b09ab0019.gif


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 .

357abded6b39bd6c1dd5fa5dc9a50edca913191b.png

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:

sef

0xffffffxxxxxx
İçerik hem bilgilendirici hem geçmiş serisiyle birlikte tam bir bütün olarak bu alandaki eksikliğe bir nebze de olsa katkıda bulunacağa benziyor. Bu şekilde özgün içeriklerin üretilmesi analiz yapan arkadaşlar için rehber bir kaynak olacaktır. Ek olarak açık kaynak platformlarda geliştirilen canlı örnekleride analiz edebilmen mümkün mü ? Mesela; android platformunda popüler olmuş zararlı yazılımlar ve kapsamı ile ilgili güzel bir bilgi bizleri mutlu eder.
 
Son düzenleme:
İleride yazacağım “Dynamic Analysis” yazımda canlı örnek üzerinde analiz gerçekleştireceğim. Bu bir statik analiz olduğundan bir “Malware”'yi çalıştırmam gerekmedi. “Dynamic Analysis” yazımda tam da dediğiniz gibi olacak. İleride farklı platformlarda çalışan “Malware”'lerin analizini yaparmıyım tam emin değilim.
 
Üst