Zararlı Kodun Analizi – Analyzing Malicious Code
// Ağustos 8th, 2008 // No Comments » // Kriptografi
Doküman içerisinde aşağıda verilen yabancı kelimeler karşılıkları ile anılacaktır.
Malicious Code: Zararlı Kod
Virus: Virüs
Trojan Horse: Truva Atı
Worm: Solucan
Packer: Paketleyici
Unpacker: Çözümleyici
Breakpoint: Kesme Noktası
Debug: Hata Ayıklama
Packet Disassembler: Paket Ayırıcı
Malware: Zararlı Yazılım
Packer: Paketleyici
Unpacker: Çözümleyici
Registry: Kayıt Defteri
Bilgisayar ağları ve internet uzun zamandır zararlı kodlar ve art niyetli etkilerinden mustarip. Bu doküman kontrollü bir ortamda Zararlı Kodun Analizi hakkında basit ve pratik bilgi edinilmesi amacıyla hazırlanmıştır.
Zararlı Kod normal bir bilgisayarda çeşitli zararlı aktiviteleri gerçekleştirmek amacıyla yazılan kod olarak tanımlanabilir. Son-kullanıcı verisi veya kişisel bilgi çalmak, bir ağdan diğer makinalara zararlı kod bulaştırmak veya etkilenmiş makinalara spam göndermek örnek olarak gösterilebilir.
Virüsler (Virus), Solucanlar (Worm), Truva Atları (Trojan Horse) ve Botlarıda kapsayan fakat bunlarla sınırlı olmayan bir çok Zararlı Kod kategorisi vardır.
Bu kategorilerden her biri tasarlandıkları amaca göre farklı karakteristik özelliklere sahiplerdir. Amacımız bu tip zararlı kodların analizini en etkili şekilde yapabileceğimiz çeşitli tekniklerden bahsetmektir.
Zararlı Kod Türleri
Aşağıda bazı Zararlı Kod türlerinin basit tanımları verilmiştir:
Virüs:Virüsler kullanıcısının izni olmadan bilgisayarın çalışma yolunu değiştirmek için yazılan basit programlardır. Bir Virüs birisi etkilenmiş dosyayı çalıştırmadığı sürece ağdaki diğer bilgisayarları etkileyemez.
Truva Atı: Bilgisayar yazılım dilinde bir Truva Atı, Virüslerden farklı olarak başka bir iş yapıyor gibi göründüğü halde içerisinde Zararlı Kod bulunduran veya sonradan yükleyen bir programdır (bu Payload veya Trojan olarak da adlandırılır).
Solucan: Bir bilgisayar Solucanı kendisini kopyalayan bir programdır. Kopyalarını diğer kurbanlara (ağdaki diğer bilgisayarlar) bulaştırmak için ağı kullanır ve bunu yapabilmesi için kullanıcı etkisine/davetine gereksinimi yoktur.
Bot: Bir Bot, kontrolöründen direktifler alarak bu direktiflere göre çalışan bir Zararlı Programdır. Yayılmak için Uzak Sistem erişimi, Sosyal Mügendislik e-postaları gönderme gibi çeşitli teknikler kullanırlar ve akabinde Botnet olarak tabir edilen bir Bot Ağı kurarlar. Kullanıma hazır (ele geçirilmiş) bilgisayarlardan oluşan bu şebeke Distributed Denial of Service (DDOS) saldırılarında, zararlı yazılım (malware) yüklemesinde veya diğer kötü aktiviteler için kullanılabilirler.
Zayıf Noktalar
Solucan ve Bot gibi zararlı kodlar çeşitli bilgisayar yazılımlarındaki zayıf noktaları kullanırlar. Bu zayıf noktaların sömürülmesi şifre ve kredi kartı bilgisi gibi önemli verilerin çalınmasıyla veya şantaj ve tehditle para gaspı ile sonuçlanabilir. Birçok botnet yöneticisi etkilenmiş Zombi Makinalardan oluşan ağlarını para karşılığında başkalarının kullanımına sunar.
Bu tip yazılımlar tüm bilgisayar kullanıcıları için çok ciddi güvenlik sorunlarına neden olmaktadır. Birçok organizasyon bu tip yazılımların şirket ağlarında yayılması sonucu milyonlarca dolar kaybetmişlerdir. Örneğin, bir zararlı kod Amerikanın kuzeyinde bir üretim şirketinin tüm programlarını yok ederek şirkete milyonlarca dolar zarar vermekle birlikte şirketin sektördeki pozisyonunu kaybetmesine ve akabinde 80 işçisini uzaklaştırmasına sebep olmuştur.
Neden Analiz?
Zararlı Kodların oluşturulma nedenlerinde olduğu gibi Solucan, Virüs ve diğer zararlı kodların analizi için de sayısız sebep vardır. Zararlı Kod Analizinin temel nedeni bu tip programlar için ulaşılabilir kaynağın olmayışıdır. Bu programları öğrenmenin tek yolu onları analiz etmek ve çalışma prensiplerini anlamaktır. Bir başka nedense birçok araştırmacının yaptığı gibi bir programın gizli olan çalışma yöntemini hata ayıklama programı (debugger) ve disassembler ile inceleyerek açığa çıkartmaktır.
Bu tip kodları analiz etmenin iki tekniği vardır:
- Statik (dead) analiz
- Dinamik (live) analiz
Bu yöntemlerin her ikisini de ilerleyen bölümlerde inceleyeceğiz. Bu analizlerde kullanmak üzere NetSky-P Solucanını seçtik. Bahsi geçen solucan SOPHOS tarafından Mayıs 2007 itibariyle ilk on solucan arasında gösterilmiştir.
Statik (Dead) Analiz
Statik analiz herhangi bir zararlı binary dosyayı incelemek için en güvenli yöntemdir. Bu inceleme tekniği kullandığımızda zararlı programı hiç çalıştırmayacak fakat binary dosyanın içeriğini güvenli bir çekilde tahkik edebilmek için Win32Dasm veya IDA Pro gibi çeşitli ayırıcılar (disassemblers) kullanacağız.
Paketleyiciler ve Çözümleyiciler
MS Windows platformunda PE adıyla bilinen çalıştırılabilir bir genel dosya formatı vardır. MS Windows sisteminde çalıştırılabilir her bir dosya PE dosya formatındadır. Genellikle Zararlı Kod yazılımcıları yazdıkları kodların basit tekniklerle analiz edilemesini zorlaştırmak için çeşitli teknikler kullanırlar.
Zararlı Kod yazarlarının başvurduğu genel bir yöntem Executable Packers olarak bilinen, uygulama boyutunu azaltma ve farklı aldatıcı algoritmalarla içeriği değiştirme yöntemidir. Bu senaryoda normal normal ayrıştırma etkili olmayacaktır. En genel kullanılan dosya paketleyiciler UPX ve ASPack gibi yardımcı uygulamalardır.
Hangi dosya paketleyicinin kullanıldığını tespit etmek için File insPector XL adındaki aracı kullanabiliriz. Adından da anlaşılacağı üzre program genel paketleyici imzalarını kontrol ederek kolayca hangi paketleyicinin kullanıldığını tespit edecek. Sonrasında analiz aşaması için dosyayı çözümlememiz gerekecek, bu konuda da güvenli bir şekilde dosyaları çözümleyebilmek için kullanıma sunulmuş çeşitli araçlar mevcut. PEID ve ProcDump bu araçlardan ikisi.
Bu araçları kullanarak bir çok genel dosya paketlemesini çözümleyebiliriz.
Bazen Zararlı Kod yazılımcıları uygulama içerisindeki imzayı manipüle ederek çözümlemeyi zorlaştırırlar, bu durumda yukarıda bahsedilen araçlarla doğru paketleyici tespit edilemez. Bu problemin üstesinden gelmek için ProcDump gibi araçlar sezgisel analiz özelliğine sahiptir. Bazı durumlarda ise binary dosyayı manuel olarak çözümlememiz gerekir. Manuel çözümleme başlı başına bir konu olduğundan bu dokümanda bu tekniği incelemeyeceğiz.
Öncelikli olarak incelediğimiz dosyanın paketlenmiş olup olmadığına karar vereceğiz. Bunun için file insPEctor XL aracını kullanacağız. Şekil 1.de gördüğünüz gibi dosyanın Ultimate Packer for Executables (UPX) kullanılarak paketlendiğini tespit ediyoruz.

Şekil 1. File İnspector paketleyicinin UPX olduğunu gösteriyor
UPX Sourceforge.net’ten ücretsiz olarak indirilebilecek bir açık kaynak aracıdır. İndirip kurulumunu yaptıktan sonra, Zararlı Yazılımımızın adını değişken olarak tanımlamak suretiyle komut satırından çalıştırarak Şekil 2.de gördüğünüz çıktıyı elde ederiz.

Şekil 2. UPX kullanılarak paketin çözümlenmesi
Ayrıştırma ve String Veri Tespiti
Bir Zararlı Uygulama dosyası gelişimi sırasında programcının iyi kodladığı birçok string içerebilir. Bu stringler hata mesajı veya Zararlı Kodun işlevleştirilmesi ile ilgili olabilir. Örneğin, şayet bir uygulama dosyası e-posta gönderiyorsa bu durumda “RE: İstediğin Eklenti”, “++Virüs Bulunamadı++” ve benzeri farklı başlık satırları için çeşitli stringlere sahip olması muhtemeldir. Dolayısıyla dosya çözümleme sonrasında genel stringleri bulmak için Win32Dasm veya IDA Pro gibi araçlar kullanarak ayrıştırma işlemi yapmamız gerekir. Bu analizler dosyanın işlevleri ile ilgili genel bir fikir sahibi olmamızı sağlayacak. Analizde tespit edebileceğimiz birçok string mevcut. Bu stringler Solucanın gönderdiği e-posta gövdeleri veya başlıkları, dosya eklenti isimleri ve benzeri şeyler olabilir.
Uygulamayı başarıyla çözümlediğimize göre artık ayrıştırma ve sonraki inceleme adımlarına geçebiliriz. Bu uygulamanın statik analizini IDA Pro ayrıştırıcısıyla gerçekleştireceğiz. Ayrıştırma içerisinde ilk önce bakacağımız şey stringler. Bir uygulama içerisindeki stringler (e-posta başlıkları, mesajlar, kayıt defteri girdileri, dosya uzantıları ve dosya isimleri gibi) bize çeşitli bilgiler sağlayabilir. Şekil 3.de NetSky-P Solucanının etkilenmiş
makinadan gönderdiği e-postaların başlıkları görülebilir.

Şekil 3. E-Posta konu başlıkları

Şekil 4. Gönderilen mesajların içeriğindeki çeşitli stringler

Şekil 5. NetSky-P Solucanının gönderdiği eklentili e-postalarda kullandığı uygulama uzantıları

Şekil 6. Etkilenmiş sistemde kullandığı dosya isimleri

Şekil 7. Solucan tarafından kullanılan bazı kayıt defteri girdileri
Şu ana dek topladığımız bilgiler doğrultusunda NetSky-P Solucanının çeşitli başlıklar, dosya isimleri ve uzantılarıyla e-postalar gönderdiğini söyleyebiliriz. Buna ek olarak kayıt defterinde çeşitli girdiler ekleyerek etkilenmiş makinada her açılışta çalışmasını sağladığınıda biliyoruz.
Dinamik (Live) Analiz
Dinamik (Live) Analizde kontrollü bir ortamda uygulamayı çalıştırarak kodun genel işlevselliği ve iç çalışma prensiplerini kontrol etmemiz gerekiyor. Bu bize Statik Analiz işleminde elde ettiğimiz olası yanlış bilgileri elimine etmemizde yardımcı olacak. Bazı Zararlı Program yazarları yazılımlarının doğru bir şekilde tahkik edilmesini engellek veya kısıtlanmış bir sanal makina içerisinde çalıştırıldığında uygulama dizinini değiştirmek için kasıtlı olarak çeşitli string ve fonksiyonlar eklerler; bu tip girişimler Dinamik Analiz sırasında tespit edilebilir.
Bu sebeple MS Windows XP Prefessional (SP2) yüklü iki test sistemi kurmamız gerekiyor. İlk makinede Ollydbg kurarak NetSky-P Solucanının hata ayıklama (debugging) işlemini gerçekleştirecek, diğer sistemde ise ağa bağlanarak Solucanın çeşitli aktivitelerini gerçek zamanlı olarak görüntüleyebileceğiz. Daha sonra her iki bilgisayarda Wireshark’ı, etkilenmiş sistemde ise RegMon ve FileMon’u çalıştıracağız.
Zararlı yazılımla uğraşırken onu karantinada tutmak için çalışma ortamında bazı önlemlerin alınması önemlidir. Çalışmamızda bu amaca uygun olarak diğer ağlara veya internete erişimi olmayan bir ağ seçiyoruz. Birçok kişi bu tip deneyler için uygulamayı bir sanal makina ile sınırlandıran popüler VMWare porgramını kullanıyor. Sonuç olarak deneyin hangi ortamda yapılacağı kişisel bir tercih lakin biz güvenli olanını seçmenizi tavsiye ediyoruz.
Ortam hazırlıkları tamamlandıktan sonra Ollydbg hata ayıklamayı başlatarak NetSky.exe dosyasını yükledik. Bu işlem sonucunda Şekil 8.de gösterilen çeşitli stringlere kesme noktaları (breakpoint) ekleyebiliriz. System\\Current Control Set\\Services\\WksPatch’e kesme noktası ekleyerek OllyDebugger’ı çalıştırıyoruz.
İşlem kesme noktası üzerinde duruyor. Stringler üzerinde dikkatli bir inceleme sonucu daha önce Statik Analiz aşamasında elde ettiğimiz bulguları doğruluyoruz. Şimdi başlangıçta eklediğimiz kesme noktalarını taşıyacak ve GetInternetConnectionState(), RegCreateKeyEx() ve benzeri çeşitli Windows API’lerini izlemek için Animate Over ve diğer çeşitli hata ayıklama özelliklerini (step in, step out gibi) kullanacağız. Bu analizden Solucanın e-posta göndermek için threadlar (iş parçacığı) oluşturduğunu tespit edebiliriz.

Şekil 8. Ollydebugger’da kesme noktaları
Kayıt Defteri Anahtarları
Bir Zararlı kodun kendisini yayması için bir şekilde başlatılmaya ihtiyacı vardır. Bu işlem, Zararlı uygulamanın çalıştırılması, zararlı bir web bağlantısına tıklanması veya Windows kayıt defterinde erişilebilen bir otomatik çalışma ayarı ile olabilir. Modern Zararlı Yazılımlar birçok Sosyal Mühendislik teknikleri
uygularlar. Kullanıcı Zararlı uygulamayı birkez çalıştırdıktan sonra bilgisayar her açıldığında uygulama, kayıt defterine eklediği girdiler sayesinde kendiliğinden çalışır.
Bu tip bir davranışı tespit edebilmek için Sysinternal tarafından kodlanan RegMon programını kullanacağız. Böylece bir program tarafından kullanılan tüm Kayıt Defteri girdilerini görüntülemiş olacağız.
NetSky-P Solucanını incelemek için çalışmasını sağlayıp RegMon kayıtlarından Kayıt Defteri erişimlerini kontrol ediyoruz. Gözlemlediğimiz üzre daha önce bahsettiğimiz çeşitli anahtarlara erişim sağlamaya çalışıyor. Şekil 9.da görüleceği üzre Solucanın HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run anahtarına yeni girdi eklemesi dikkatimizi çekiyor. Windows klasörünü incelediğimizde AV-Bgle.exe ve Base64.tmp adında iki dosya buluyoruz.

Şekil 9. Solucan tarafından oluşturulmuş bir kayıt defteri girdisi
FileMon
Zararlı Kod farklı yerlerde farklı isimler kullanarak kendisini onarabilir veya kopyalayabilir. Aynı zamanda uzak sunucudan backdoor ve benzeri başka dosyalar indirerek bunları etkilenmiş sisteme yerleştirebilir. Bu durumu gözlemleyebilmek için FileMon adındaki aracı kullanacağız.
Analize devam etmek için etkilenmiş test sistemimizi yeniden başlatarak RegMon, FileMon ve Wireshark programlarını tekrar çalıştırıyoruz. FileMon kayıtlarını incelediğimizde bir nokta dikkatimizi çekiyor; sürekli olarak Base64.tmp adında bir dosyaya erişim sağlanıyor. Adından da anlaşılacağı gibi, bu dosyanın Base64 algoritmasında kodlandığı tahmininde bulunabiliriz. Bu durumda zararlı dosyanın NetSky-P olup olmadığını tespit edebilmemiz için base64 dekoderi kullanmamız gerekiyor.

Şekil 10. Base64.tmp FileMon
Şekil 11.de base64 formatında kodlanan dosyanın dekode edilmiş hali görünüyor. İçeriğe bakıldığında hemen göze çarpan bunun bir uygulama dosyası olduğu.
İçerikte Windows platformundaki uygulama dosyalarında satandart bir başlık (header) olan MZ başlığı mevcut.

Şekil 11. Dekode edilmiş dosya
Paket Görüntüleme ve Analiz
Günümüzde bir çok zararlı yazılım ağ üzerindeki diğer makinalara bulaşmaya veya çeşitli amaçları gerçekleştirebilmek için etkilediği sistemlerin botnetlerin bir parçası olmasını sağlamaya çalışıyor. Ayrıca etkiledikleri sistemlerden hesap detayları, kredi kartı bilgileri, şifreler, sörf detayları vb. bir çok bilgi göndermeyi amaçlarlar. Bir de bulaştıkları sistemleri İnternet üzerinde DDoS saldırılarında kullanırlar.
Bu durumda etkilenmiş sistemin ağ trafiğini görüntüleyebilen Wireshark veya benzeri bir Paket Yoklayıcıya (Packet Sniffer) ihtiyacımız var. Bu analizin temel nedeni şayet bu bir botnet koduysa kontrol yönergelerini elde etmek, hangi sunuculardan ne tür dosyalar indirdiği, ne tarz spam gönderdiği gibi çeşitli detayları öğrenmektir.
Sonraki aşamada dekode ettiğimiz dosyayı decoded.exe olarak kayıt ediyoruz ve tahkikat için IDA Pro ile açıyoruz. Analiz sonucu AVBgle.exe dosyasının etkilenmiş sistemin Temporary Internet Files dizinindeki index.dat dosyasını taradığını tespit ediyoruz. Bu bizim açımızdan ilginç bir bulgu, çüknü sonrasında Solucanın dizinde bulduğu e-posta adreslerine düzenli olarak e-postalar gönderdiğini gözlemliyoruz. Bu işlem Şekil 12.de ki Wireshark paket yığınında görünebilir.

Şekil 12. Wireshark e-posta görüntüsü
Bir başka analiz Şekil 13.te görünmektedir.

Şekil 13. DNS sorguları
Bu safhada Solucanın paket analizini yapmaya karar veriyoruz. Gözlemlediğimize göre, Solucan ilk önce Yahoo!, AOL ve Hotmail gibi harici sunucular için çeşitli DNS sorguları gerçekleştiriyor.
Trafiği ayarladıktan sonra daha önce bahsettiğimiz gibi farklı başlık ve dosya isimleri ile e-postalar gönderiyor.

Şekil 14. SMTP verisi
Klonlanma Algoritmasını Çözmek:
Zararlı yazılımın zararlı aktivitelerini gerçekleştirmek için bir ana dosyanın kontrolünde birlikte çalışabilen, aynı kodların (kendi kodlarının) klonlanmasına ihtiyacı vardır. Bu sebeple sürekli olarak dahili ağ ve internet üzerinden başka sistemlere bulaşmaya çalışırlar. Bu amaca ulaşmak için çeşitli tekniklere başvururlar. Bunlardan üç tanesi aşağıda belirtilmiştir:
• Zararlı kodun eklentilendiği bir e-posta göndermek.
• Bilgisayar programlarının bilinen zayıf noktaları veya Zero-day açıklarından yararlanarak sisteme bulaşmak.
• İşletim Sisteminin kendi açığından faydalanarak bulaşmak.
Klonlanma algoritmasını kesin olarak çözebilmemiz için sıkı kontrollü bir ortamda kodu çalıştırmalı ve bir hata ayıklama programı ile incelemeliyiz. Bu tip analizler için Ollydbg aracını kullanıyoruz. Bazı durumlarda yalnızca hata ayıklama programı kullanılarak klonlanma algoritmasını çözmek mümkün olmayabilir.
Bu durumda paket görüntüleme gibi farklı tekniklerden oluşan bir kombinasyon denememiz gerekir, böylelikle zararlı yazılımın bilinen/bilinmeyen açık veya açıklardan yararlanıp yararlanmadığını tespit edebiliriz.
Daha önceki analizlerimiz sonucunda vardığımız kesin bir yargı, NetSky-P Solucanının zararlı kodun eklentilendiği çoklu e-postalar göndererek (mass mailing) kullanıcının bu eklentileri açmasını beklemesidir. Bu solucanlar, gönderdiği e-postaların içeriğinde “Virüs Bulunamadı!” tarzında yazılar bulundurmak gibi acemi kullanıcıların aldanmasını sağlayacak çeşitli sosyal mühendislik teknikleri uygularlar.
Şayet kullanıcı bunun bir aldatmaca olduğunun farkına varamaz ve eklentiyi açarsa sistemine zararlı kodun bulaşması olasıdır.
Sonuç
Zararlı yazılımlar bilgisayar kullanıcıları için her zaman sorun olmuştur. Internetin hızla geliştiği modern dünyada zararlı yazılımlar, web sitesi trafiği oluşturmak, DDoS saldırıları, bilgi hırsızlığı, kişisel bilgilerin pazarlanması ve benzeri amaçlar için yaygın bir şekilde kullanılıyor. Genellikle kodun hızlı bir şekilde yayılmasını sağlamak amacıyla 0day açıkları gibi çeşitli teknikler kullanırlar.
Dokümanda bahsettiğimiz yöntemlerle zararlı kodun iç çalışma prensipleri analiz edilebilir. Fakat bu yenek ve sezgiyi kazanmak zaman, sabır ve kararlılık gerektirir. Bu dokümanda elbette tüm analiz yöntemlerini anlatmadık. Amacımız modern Zararlı yazılımların analiz edilmesi için hangi araç ve tekniklerin kullanıldığı hakkında genel anlamda bilgi sahibi olmanızdı.
Bu dokümanda kullanılan programlar:
• VMWare (Virtualization Software) http://www.vmware.com
• IDA Pro/Freeware (Dissembler) http://www.datarescue.com/
• Ollydbg(Popular Ring 3 Debugger) http://www.ollydbg.de/download.htm
• UPX(Ultimate Packer for Executables) http://upx.sourceforge.net/
• ImpREC(Import Reconstruction for PE files) http://securityxploded.com/download.php#imprec
• Windows Sysinternals(FileMon,RegMon)
http://www.microsoft.com/technet/sysinternals/default.mspx
Zararlı Yazılımlarla İlgili Bağlantılar:
• www.offensivecomputing.net – Çeşitli zararlı yazılım ve analizleri hakkında bilgi edinebilirsiniz.
• www.viruslist.com – Virüs veritabanı, Virüsler hakkında bilgi
• http://vx.netlux.org/ – Virüs örnekleri, Virüs Kaynakları
• http://hexblog.com/ – IDA Pro güncesi
Kaynak: hakin9 6/07 – Hardik Shah & Anthony L. Williams
Orjinal Doküman:













































