5 Kasım 2013 Salı

Malware Analizlerinde Anti-Analysis ve Anti-Debugging Teknikleri

Yeniden Merhabalar, Fırsat buldukça bir şeyler karalamaya çalışıyorum. Bu makalede, Malware Analysis ve Reverse Engineering konularında kaynak sıkıntısı çeken ve bu tip işlere meraklı yeni başlayan arkadaşlara Kod Analizleri esnasında karşılaşılan Anti-Debug ve Anti-Analysis yöntemlerini yardımcı bir program eşliğinde sunmaya gayret edeceğim. Programı incelemeye başlamadan önce analiz için VM makinenizi ve Olly, IDA gibi analiz araçlarınızı hazırlamanızı tavsiye ederim.

Analize başlamadan önce;
  • Kullanacağımız uygulama Masm derleyicisi kullanılarak Assembly dili ile yazılmıştır. Tümü ile detaylı yorum satırları da dahil olmak üzere açık kaynak kodu ile birlikte gelmektedir. 
  • Uygulama 17 faz olup, istediğiniz şekilde ilaveler yapabilirsiniz. Derleme işlemi için www.masm32.com üzerinden ilgili paketi indirmeniz yeterlidir.
  • Kod içerisinde kullanılan tüm koruma methotdarı temel seviyede olup çözümleri de bir o kadar basittir. 
  • Koruma methodlari sadece öğretici olmak için hazırlandığından atlatılmaları için ZF flag'ini NOT'lamanız yeterli olacaktır. Gerçek senaryolarda bu methodlar çok daha farklı ve obfuscate edilmiş olarak karşınıza çıkar. 
  • Uygulama C dilinde de rahatlıkla yazılabileceği gibi Assembly kullanımında ki amaç analiz yeteneklerinin hızlı gelişimine katkıda bulunmaktır.
  • Test programı ve bu makale 2 iş günü arasında fırsat bulunarak yazıldığından düzensiz görünmesini normal karşılamanızı rica ediyorum. 
  • Analizler esnasında algılama tekniklerinin işleyişini daha iyi anlayabilmeniz için doğru kod bloklarında olmanız gerekebilir. Bu yüzden analiz süreciniz içerisinde kaynak kod ve debugger pencerenizi eş zamanlı şekilde kullanmanızı öneriyorum.
  • Masm32 platformuna aşina olmayan arkadaşlar 7 yıl önce yazdığım ve giriş seviyesinde olan http://kernelturk.blogspot.com/2009/10/masm32-ve-win32api-voltran-voltran.html makalesini okuyabilirler.
  • İlerleyen aşamalarda ucu açık kalan konular hakkında da (ör: polymorphic kod'lar ile packing, permutasyon çeşitleri ile Analizlerden kaçma yolları, kodunuzun bir VM veya Emulator üzerinde çalışıp çalışmadığının anlaşılması gibi) yazmayı planlıyorum. Bu yüzden ben o süreçleri hazırlayana kadar siz bu konuları kavramaya gayret edin lütfen.
Analiz Dosyasına ulaşmak için : İndir

Not: Doğrudan ve hızlı bir şekilde programın analizine başlayabilir veya sizlere fikir vereceğini düşündüğüm kısa bir yazıyı okuyabilirsiniz:

Kolay olan Tespit Etmek mi?
Zararlı Yazılımlar'ın öncelikli hedeflerinden biride tespit edildikleri anda tüm kirli çamaşırlarının bir bir ortaya çıkmasının önüne geçmektir. Zararlı Yazılım Analistleri ele geçirdikleri zararlı örnekleri üzerinde çalışmak için bir çok farklı araçtan yararlanırlar. Ancak analist zararlıyı incelemeden önce tamamı ile yalıtılmış bir ortam hazırlamak zorundadır. Çalışmalar ilk zamanlarda temiz bir işletim sistemi üzerinde tüm gerekli analiz araçları yüklenmiş ve network kablosu çekilmiş fiziksel pc'ler üzerinde yapılıyorken ilerleyen zamanlarda bu iş için uzaktan hata ayıklama (remote debugging) teknikleri yerini almıştı. Ancak yinede fiziksel pc bağımlılığı nedeni ile analiz süreleri zararlıların davranışlarına göre farklılıklar gösterdiğinden çok uzun zaman alıyordu.

İlerleyen zamanlarda Emulatorler ve Virtual Pc'lerin ortaya çıkması ile analiz süreçleri çok daha güvenli ve hızlı olarak yapılabilir hale geldi. Snapshot/Checkpoint teknikleri ile zararlının tüm davranış methodları tekrar ve detaylıca analiz edilebiliyor ve köşeye kıstırıldığı bu alanda eldeki tüm analyze silahları kullanılarak etkisiz kılınıyor ve zararlı tarihin karanlık kodlar çöplüğüne yollanıyordu. Tabi cephenin diğer tarafında bulunan zararlı geliştiricileri bu gelişmelere sessiz kalamazdı! Üstüne üstlük tüm bu savunma mekanizmalarının var oluş nedenleri yine zararlıların ta kendileri iken. Önceden olduğu gibi günümüzde de Zararlılar tespit edilmemenin dışında analiz edilmemek içinde oldukça efor harcıyorlar. Zararlı yazılım geliştiricileri, geliştirdikleri zararlının tespit edilmesi halinde analiz süreçlerini çok daha uzun ve içinden çıkılmaz bir hale getirmek için uğraş içerisindedirler. Aslında burada şunu da belirtmek gerekirse, kodlarının analiz edilmemesini isteyen kesim sadece zararlı geliştiricileri değil! Bir tarafta kötü amaçları için iyilerden kaçmaya çalışanlar olduğu gibi iyi amaçları için kötülerden kaçmaya çalışanlarda var! Ticari yazılım üreticileri programlarının lisans yükümlülükleri altında dağıtılmasını ve bu yol ile kazanç sağlamayı hedeflerler. Ancak bunun önünde Reverse Engineering yetenekleri oldukça gelişmiş Cracker camiasının elemanları bulunmaktadır. Değerli yazılımlarının lisans mekanizmalarının basitçe aşılmasına sessiz kalmak istemeyen yazılım üreticileri bir çok koruyucu tedbirlere yönelmiş ve onlarda yazılımlarını Anti-Analysis teknikleri ile koruma altına alma yoluna başvurmuşlardır. Hatta öyle ki Anti-Debug ve Anti-Analysis tamamen ticari bir kimliğe bürünüp kendine müşteriler bulmaya başladı. Armadillo, AsPack, Themida gibi Reverser'lara karşı koruma vaadeden yazılımların popülerliği hep gündemde yer bulmuştur.

Ne Kadar Bilgi O Kadar Analiz

x86 mimarisi üzerinde çalışan bir yazılım analiz edilmek istenildiğinde hangi dilde yazıldığına bağlı olmaksızın durumuna göre IA32 ve AMD64 komut ailesine ait assembly kodlarına dönüşürler. Analiz süreçlerinde assembly diline aşina olmak elbette önemlidir ancak tek başına yeterli olmayacaktır. Assembly bilginize ilave olarak çalıştığınız işletim sisteminin mimarisi üzerinde derinlemesine bilgi sahibi olmanız, kriptografi bilginiz, sanallaştırma ve emulasyon çözümlerinde ki derin teknik bilginiz analiz süreçlerinin çok daha kısa ve keskin sonuçlar vermesine katkı sağlayacaktır.

Test programımız üzerinde yapacağımız analizlerde de göreceğiz ki Anti-Analysis ve Anti-Debugging tekniklerinin bir çoğu Assembly dilinin getirdiği avantajları değil programın çalıştığı mimarinin yeteneklerini kullanır. Windows ortamında bir process'in ilk ortaya çıkması ile birlikte var olan TIB, PEB gibi yapılar gerek analiz gerekse anti-analiz süreçlerinde anahtar rol oynarlar. Bu ve bunun gibi internal yapıların iyi bir şekilde öğrenilmesi Reverser için analiz sürecini oldukça kısaltacaktır.

Bu test programı ile kazandığınız bilgiler giriş seviyesi olarak sizleri tatmin edecektir. Ancak ilerleyen fazlarda Assembly bilginizi neden ileri derecede geliştirmeniz gerektiğini fark edeceksiniz. Çok iyi bir assembly bilgisi ile ileri seviye koruma methodlarını yazılımlarınıza uygulayabilir veya Malware Analizleri esnasında karşılaştığınız engelleri rahatlıkla egale edebilir duruma gelirsiniz. Nanomites, Magic Opcodes, Stolen Bytes, Code Permutation, Garbage Code ve daha nice insan zekası ile opcode'ların birleşiminden oluşan bu zengin bilgi deryasına ancak iyi bir assembly bilgisi ile aşina olabilirsiniz.

Konu ve gelecek yazılar hakkında görüşlerinizi paylaşabilirsiniz.

Sağlıcakla.

Kasım 2013 - İbrahim Akgül