Java Bayt Kod Hata Ayıklaması

Tarık Y. sağolsun 10 Ekim 2013 tarihinden bu yana kendisine gelen ve ekinde zararlı yazılım bulunan çoğu sahte e-postayı incelemem için benimle paylaşıyor. Kendisine gönderilen e-postalara bakıldığında, 2013 yılından bu yana aktif olarak java ile zararlı yazılım geliştiren (indirici/dropper) ve sahte e-postalar gönderen bir grubun bu e-postaların arkasında olduğunu anlamak çok zor değil. Antivirüs yazılımlarını atlatmak için çeşitli gizleme (obfuscator) araçlarından da faydalanan bu grup, her salgında ikna adına aşağıdaki gibi yeni senaryolar kullanmaktan çekinmiyor.

Java Bytecode Debugging

Zararlı yazılım geliştiricileri çoğunlukla indiricileri geliştirirken Java programalama dilinden faydalanıyor olmalarının en büyük sebebi, Java’nın yorumlanan (interpreted) bir programlama dili olmasıdır. Bu sayede CLASS dosyasına derlenen .JAVA uzantılı bir kod, Java Virtual Machine (JVM) tarafından çalışma esnasında yorumlanarak makine diline dönüştürülmektedir. Bu durum da JAVA programlama dili ile yazılan zararlı yazılımların Antivirüs yazılımları tarafından kimi durumlarda yorumlanamamasına sebebiyet vermektedir. Ayrıca JVM tarafından çalıştırılan JAR uzantılı yürütülebilir dosyalar veya CLASS uzantılı dosyalar, Ollydbg veya Immunity Debugger gibi hata ayıklayıcılar tarafından çalıştırılamaz dolayısıyla dinamik kod analizi ile analiz edilmesi, PE dosyalara kıyasla daha zordur.

Ancak yorumlanabilir diller, diğer dillerin aksine kaynak koduna geri çevrilebilmektedir (decompile). Zararlı yazılım analistleri için ilk bakışta bu büyük bir nimet gibi görünse de, bunu bilen zararlı yazılım geliştiricileri, Allatori gibi gizleme araçlarından (obfuscator) faydalanmaktadırlar. Böyle bir durumla karşılaştığınız zaman statik bayt kod analizi ile ilerlemek iyi bir tercih gibi görünse de, dinamik bayt kod analizinin yerini zaman ve pratiklik açısından tutmayacaktır.

Allatori gibi araçların özelliklerine baktığınız zaman analizi güçleştiren çeşitli özellikler ile donatıldığını görebilirsiniz dolayısıyla kaynak koduna çevirme ve dinamik bayt kod analizi konusunda sıkıntı yaşayacağınız bir gerçektir!

Örneğin aşağıdaki sahte e-posta ile gönderilen JAR dosyasını Java Decompiler aracı ile kaynak koduna çevirmeye çalıştığımızda kaynak kodunu görüntülemiyor olmamız bizi pek şaşırtmıyor.

Java Bytecode Debugging
Java Bytecode Debugging

Aynı şekilde Eclipse eklentisi olarak kullanılan ve bir bayt kod hata ayıklayıcısı olan Dr. Garbage Bytecode Visualizer aracı ile de JAR dosyasını çalıştırdığımızda bir hata ile karşılaşmamız da bizi şaşırtmıyor.

Java Bytecode Debugging
Java Bytecode Debugging
Java Bytecode Debugging

Aşağıdaki adımlardan sırasıyla geçerek hızlıca Dr. Garbage araçlarını yükleyebilir ve zararlı JAR dosyasını analiz edebilirsiniz.

Java Bytecode Debugging
Java Bytecode Debugging
Java Bytecode Debugging
Java Bytecode Debugging
Java Bytecode Debugging

Bu tür analizi zorlaştırmaya yönelik yöntemlerden faydalanan Java zararlı yazılımlarına karşı reJ isimli, Java bayt kodunu manipüle etmeye imkan tanıyan araçlardan faydalanabilirsiniz. Örneğin reJ aracı ile Ref Axess 5150228026.jar dosyasını incelediğimizde Main fonksiyonunda tanımlanan çok sayıda istisnanın (exceptions) şüpheli olduğu dikkatimizi çekiyor. İstisna listesini kısaltıp kayıt ettikten sonra bu Java dosyasını başarıyla Dr. Garbage’nin bayt kod hata ayıklama aracı ile analiz edebildiğimizi görüyoruz. Bundan sonrasi ise artık ilgili yerlere kesme noktası (breakpoint) koymaya ve analiz etmeye kalıyor.

Java Bytecode Debugging
Java Bytecode Debugging
Java Bytecode Debugging

Java ile geliştirilen zararlı yazılımları analiz etme konusunda elinizin, kolunuzun bağlı olmadığını bilmeniz adına yazdığım bu yazı, umarım sizler için faydalı olmuştur. Bir sonraki yazıda görüşmek dileğiyle herkese güvenli günler dilerim.