.Net Anatomisine Genel bakış ve TrickMouse zararlı analizi

Günümüzdeki kötü amaçlı yazılımlar C/C++, python, go vs gibi çeşitli programlama dilleri kullanılarak yazılıyor sizlerinde bildigi gibi. Bugünkü konumuz ise .Net’e genel bakış ve akabinde bir zararlı yaıılım analiziyle yazıyı sonlandırmak olacaktır.

.Net Hakkında

.Net 2000’li yılların başında programlamayı kolaylaştırmak amacıyla Microsoft tatafından sunulan bir yazılım çerçevisidir. Daha anlaşılır bir dille söylemek gerekirse C#, VB.Net vs gibi farklı dillerde yazılmış programları derlemek ve yürütmek için bir sanal makinedir. .Net‘in gelişiyle birlikte özellikle C++’da basit programlar oluştursanız bile uzun uzun kodlar yazmak gerekiyordu veya C’de çok daha uzun kodları yazma devri geride kalmıştı. Tabi ki burada C++ gibi çok önemli bir dilin önemsizliği gibi bir hatalı düşüncede olmadığımı belirtmek isterim ki nedemek istediğimi anlamış olduğunuzu düşünüyorum.

.Net ailesi arasında en popüler olanı hiç kuşkusuz ki C#‘dır. Yapı itibariyle modern, işlevsel, genel, nesne yönelimlidir ve modern programlama diline uygulanan her terim ile tanımlanmıştır. Sonuç olarak Windows için yazılım geliştirmeyi çok kolaylaştırmıştır. Özellikle Visual Studio’nın zaman içerisindeki gelişimiyle birlikte Windows API‘sinden gelen çağrıları otomatik olarak tamamlama ve arama işlemi gerçekleştirmeyi epey kolaylaştırmıştır. Ve projyeye bağlı olarakta derleme sonucunda EXE ve DLL çıktılarını da elde edebiliyorsunuz.

C/C++ projeleri derlendiğinde alınan PE Binary ile .Net projelerini derledikten sonra alınan PE Binary’ler arasında önemli bir fark bulunuyor. C/C++ ile derlenmiş bir exe dosyasının x86 Assembley kodunu bulabiliyorken bunu .Net’de bulamıyoruz.

Çok aşırı bir detaya girmeden belirtecek olursak eğer bir .Net projesi derlendiği zaman, MSIL veya Microsoft Intermediate Language olarak adlandırılan bişeyde derlenmiştir. Projedeki kodlar, aslında program JIT kullanılıp yürütülürken derlenme işlemi gerçekleştirilir.

Bu bilgiler ışığında işin bizlere bakan yönü yani tersine mühendislik tarafına baktığımızda; C/C++ ile yazılmış bir zararlıyı incelediğimizde disassembler bize x86/64 derlemesini bizlere gösterecektir. Fakat .Net ile yazılmış exe dosyasını incelediğimizde karşımıza derleme çıkacaktır ama göreceğimiz derleme asıl derleme olmayacaktır. Aslında topluluklar, araştırmacılar veya şirketler başta kendi işlerini -bu sayede de diğer güvenlik araştırmacılarının işlerini- kolaylaştırmak adına decompiler‘lar geliştirmişlerdir.

.Net Decompiler

.Net ile yazılmış zararlıları incelemek için şuan için DnSpy ve ILSpy adında iki güzel araç bulunuyor. Açıkcası ILSpy’ı denemediğimi belirtmek isterim genel olarak DnSpy’ı kullanıyorum. DnSpy’ı kullandığımız zaman zaralıya ait kaynak kodu direkt görmemizi sağlamasada kaynak koda yakın olan kodları görmemizi sağlıyor diye belirtebiliriz.

Örnek Zararlı Yazılımlar

Pek çok zararlı geliştiricisi, analistçilerin kodları tam manasıyla nereden geldiğini-nereye bağlandığını vs gibi pek çok noktayı bulamaması adına karmaşıklaştırma tekniği dediğimiz obfuscated tekniği kullanıyorlar.

Obfuscated tekniğini kullanılmamış zararlı yazılım örneği kapsamına girmiyor fakat bu teknik kullanılmadığı zaman nasıl gözüktüğüne bakma adına zamanında Utku Şen tarafından yazılıp, GitHub üzerinde yayınlanmış olan Hidden Tear örneğine bakabiliriz. Yukarıdaki resimde gördüğünüz üzere herhangi bir karmaşıklaştırma tekniğine maruz kalmamışsa eğer tüm fonksiyonların neler yaptığını açık bir şekilde görebiliriz.

İkinci bir örnekte bu tekniğin uygulandığı Lokibot adlı zararlıya bakabiliriz. Yukarıda görüldüğü üzere sınıflar ve içerisindeki tanımlamalar belli değildir.

Kodlardaki karmaşıklığı çözme

Daha önce belirttiğim gibi geliştiriciler, tersine mühendisliği daha zor hale getiren pek çok karmaşıklaştırma teknikleri kullanırlar. Neyseki bu durumdada işlerimizi kolaylaştırma adına araçlar geliştirilmiş.

Bunlardan ilki Detect it easy ve ExeInfo adlı araçlar diyebilirim. Özellikle önbilgi edinme kısmıyla ilgili olarak epey yardımcı olacaktır. İkinci olarak açık kaynak olan .Net deobfuscator ve unpacker aracı de4dot, kodlardaki karmaşıklığı en minimuma indirip, analizimizi kolaylaştırcaktır. Daha önce belirttiğim gibi yüzde yüz kaynak kodu vermez ama kaynak koda yakın verir.

De4dot aracını kullandıktan sonra Lokibot adlı zararlının görüntüsü yukarıda yer almaktadır.

TrickMouse (RAT) Zararlı Analizi

Yukarıdaki bilgilerden sonra .Net malware analizi ile devam ediyorum. Zararlı yazılım CVE-2019-0541 açığını kullanan bir APT’dir. Ukrayna’daki kullanıcıları hedefleyen zararlı, Dünya Sağlık Örgütü ve Ukrayna Sağlık Bakanlığı’ndan gönderilmiş gibi gösterilen oltalama saldırılarında kullanılmış. Hatta bu saldırılarda kullanılan zararlının Hades APT grubuna girdiği de belirtilenler arasında yer alıyor.

CVE-2019-0541 açığına göz gezdirdiğimiz zaman; MSHTML engine altyapısının girdiyi yanlış doğrulama biçiminden kaynaklanan bir RCE açığıdır. Eğer kullanıcı yönetici haklarına sahip bir kullanıcıyla oturum açtığı takdirde güvenlik açığından faydalanan saldırgan, sistem üzerinde tüm denetimi ele geçirebiliyor. Açıktan etkilenen yapılara baktığımızda Microsoft Office, Microsoft Office Word Viewer, Internet Explorer 9, Internet Explorer 11, Microsoft Excel Viewer, Internet Explorer 10 ve Office 365 ProPlus yer alıyor.

Açık hakkında gerekli bilgiyi verdikten sonra analizime kaldığımız yerden devam edebiliriz. İlk olarak zararlıya Any.run üzerinde nasıl bir yol izlediğine gözgezdiriyoruz. Normalde, ilgili zararlımız bir Word belgesi çalıştırıldıktan sonra makrolar sayesinde sistem üzerinde dağılımını gerçekleştiriyor. Daha sonrasında arka planda .Net uzantılı bir dosya çalıştırıyor. Bugünkü analizimiz çalıştırılan bu .Net zararlısını analiz etmek olacaktır.

Açık hakkında gerekli bilgiyi verdikten sonra analizime kaldığımız yerden devam edebiliriz. İlk olarak zararlıya Any.run üzerinde nasıl bir yol izlediğine gözgezdiriyoruz. Normalde, ilgili zararlımız bir Word belgesi çalıştırıldıktan sonra makrolar sayesinde sistem üzerinde dağılımını gerçekleştiriyor. Daha sonrasında arka planda .Net uzantılı bir dosya çalıştırıyor. Bugünkü analizimiz çalıştırılan bu .Net zararlısını analiz etmek olacaktır.

Kullanılan karmaşıklaştırma tekniğini saf dışı bırakmak için De4dot aracını kullanıyoruz. Yukarıdaki resimde ilgili aracın kullanılmadan önceki halide yer alıyor. Bu şekilde kodlardaki karmaşıklaşmayı en aza indirgemiş oluyoruz.

Daha sonra temizlenmiş dosyayı DnSpy’da açtığımızda, pek çok dosya ve yapının olduğunu görüyoruz. Belli bir göz gezdirmeden sonra en alt kısımda wdnqdoqjwidqwiopfjhbho.dwqgewherfwef yapısı altında Kdaapk adlı bir sınıfın olduğunu göreceksiniz. Bu yapıya daha detaylı göz gezdirdiğimizde ‘C2’ domaininin ile birlikte iletişim için kullanılan User-Agent‘ı fark ediyoruz. Yine compatible kısmında gözüken Trident‘i ise CVE-2019-0541 açığının faydalandığı engine’den biliyoruz.

Kdaapk adlı sınıfın barındırdığı diğer kodlara baktığımızda bu RAT’ın özelliklerine rastlıyoruz. Burada C2 sunucularına tanımlamak için sistem hakkında bilgiler toplayan bazı fonksiyonların olduğunu görüyoruz. Bu tanımlamalara baktığımızda;

  • User name (Kullanıcı adı)
  • Machine name (Makine adı)
  • Network Interfaces (Ağ arayüzleri)
  • Yürütülmekten olan dosyanın MD5 değeri

Kdaapk adlı sınıfın barındırdığı başka kod parçacıklarına baktığımızda; daha sonra toplanan bilgilerin POST isteği ile birlikte X-Reg başlığında C2 sunucusuna göndrildiğini görüyoruz. Sunucu tarafından döndürülen Set-Cookie değeri bir değişkene kaydedilir ve sunucuya yapılan her istekte kullanılır.

Kdaapk adlı sınıfa göz gezdirmeye devam ediyoruz. Yukarıdaki kod parçacığını incelediğimizde; GET isteği gözümüze çarpıyor. Bu fonksiyonda C2 sunucuyla daha fazla iletişim söz konusu olduğunda devreye giriyor. Cookie kısmına baktığımızda ise daha önce bize iletilen bir değere sahip olduğumuzu görüyoruz. Kodun ilerleyen kısımlarına baktığımızda ilgili kodlar çözülecek ve CMD.exe ile yürütülecek. Burada C2 sunucusu bizlere yürütülen komutları izlemek için veriler ve base64 adlı komut bilgilerini sunacak.

Yukarıda kullanılan son network yöntemine baktığımızda; etkilenen sistemden C2 sunucusuna Base64 verileri dışarı atmak için kullanılır. Hangi komut örneğinin yanıt verdiğini izlemek içinde Cookie alanına önceki GET isteğinden ilk değer eklendiğininde bakılıyor.

Diğer kısımlardaki kod parçacıklarından birine baktığımzıda gözümüze Trick: TrickMouse çarpıyor. Güvenlik araştırmacıları bu dize sebebiyle bu zararlıya TrickMouse ismini vermişler. Hatta şuanki inceledeğim zararlının Hades APT grubuna girdiği de belirtiliyor.

Kod inceleme kısmına devam ettiğimizde; yukarıda gördüğünüz üzere süreç ve hizmet işlemleri ile ilgili bir kısım yer alıyor.

Buradaki çağrılan method_2 kısmına gittiğimizde ise; temel olarak burada RAT içerisinde komutları çalıştıran fonksiyon kısmı diyebiliriz.

Bunlarin haricinde kodları incelemeye devam ettigim zaman bir bölümde \\CREDST.sys adında birşey farkettim fakat işlevini bulamadım. Belkide birşeyin kısaltması olarak eklenmiştir. Bilgisi olanlar var ise dinlemek isterim.

Yukarıdaki analizin dışında geçmiş zamanlarda yine .Net zararlılarından biri olan Alpha Ransomware’in incelemesini gerçekleştirmiştim. İsteyen kişiler ilgili yazıma bu linkten ulaşabilirler.

Referanslar

https://app.any.run/tasks/7b677e50-4515-4958-b53d-5a871e2e97cd/

https://analyze.intezer.com/files/1545401f661f9326f5c604e1a025e811079ba4eace9d3830a05c5e4aa666803e

Virustotal

https://www.geeksforgeeks.org/what-is-just-in-time-jit-compiler-in-dot-net/