Analysis

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


Günümüzdeki kötü amaçlı yazılımlar C/C++, Python, Go gibi çeşitli programlama dilleri kullanılarak yazılıyor. Bugünkü konumuz ise .NET’e genel bir bakış ve akabinde bir zararlı yazı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 tarafından sunulan bir yazılım çerçevesidir. Daha anlaşılır bir dille söylemek gerekirse; C#, VB,.NET 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şturmak için bile uzun kodlar yazmak gerekirken ya da C’de çok daha uzun kodlar yazılan dönem geride kalmıştı. Elbette burada C++ gibi çok önemli bir dilin önemsiz olduğu gibi yanlış bir düşüncede olmadığımı belirtmek isterim — ne demek istediğimi anlamışsınızdır.

.NET ailesi arasında en popüler olanı hiç kuşkusuz C#’tır. Yapı itibarıyla modern, işlevsel, genel amaçlı ve nesne yönelimlidir; modern programlama dillerine uygulanan her terim ve tanımla örtüşmektedir. Sonuç olarak Windows için yazılım geliştirmeyi çok kolaylaştırmıştır. Özellikle Visual Studio’nun zaman içindeki gelişimiyle birlikte Windows API çağrılarını otomatik tamamlama ve arama işlemi de epey kolaylaşmıştır. Projeye bağlı olarak derleme sonucunda EXE ve DLL çıktıları da elde edebiliyorsunuz.

C/C++ projeleri derlendiğinde alınan PE binary ile .NET projeleri derlendikten sonra alınan PE binary’ler arasında önemli bir fark bulunuyor. C/C++ ile derlenmiş bir EXE dosyasında x86 assembly kodunu bulabiliyorken bunu .NET’te bulamıyoruz.

Çok fazla detaya girmeden belirtmek gerekirse: bir .NET projesi derlendiğinde, MSIL (Microsoft Intermediate Language) adı verilen bir ara dile derlenir. Projedeki kodlar asıl olarak program JIT (Just-In-Time) kullanılarak yürütülürken derlenir.

Bu bilgiler ışığında tersine mühendislik açısından bakıldığında; C/C++ ile yazılmış bir zararlıyı incelediğimizde disassembler bize x86/64 assembly kodunu gösterir. Ancak .NET ile yazılmış bir EXE dosyasını incelediğimizde karşımıza bir derleme çıkar, fakat gördüğümüz native assembly değil MSIL olur. Neyse ki topluluklar, araştırmacılar ve şirketler hem kendi hem de diğer güvenlik araştırmacılarının işlerini kolaylaştırmak adına decompiler’lar geliştirmiştir.

.NET Decompiler

.NET ile yazılmış zararlıları incelemek için şu an DnSpy ve ILSpy adında iki güzel araç bulunuyor. Açıkçası ILSpy’ı denemedim; genel olarak DnSpy kullanıyorum. DnSpy, zararlıya ait kaynak kodu doğrudan göstermese de kaynak koda yakın bir görünüm sunduğunu söyleyebilirim.

Örnek Zararlı Yazılımlar

Pek çok zararlı geliştiricisi, analistlerin kodların nereden geldiğini, nereye bağlandığını ve benzeri noktaları tam olarak bulamaması için obfuscation (karmaşıklaştırma) tekniği kullanıyor.

Obfuscation uygulanmamış bir zararlı örneği görmek adına, [Utku Şen](https://twitter.com/utkusen) tarafından yazılıp GitHub’da yayımlanmış olan Hidden Tear örneğine bakabiliriz. Gördüğünüz üzere herhangi bir karmaşıklaştırma tekniğine maruz kalmamış bir zararlıda tüm fonksiyonların ne yaptığı açıkça okunabilir.

İkinci bir örnekte ise bu tekniğin uygulandığı [Lokibot](https://www.hybrid-analysis.com/sample/ed5550d3047903d3e09363f90b6d49f519d1484af4e528fd95f1e5f3e5a008b2/5ac0b0357ca3e10214271ef3) adlı zararlıya bakabiliriz. Görüldüğü üzere sınıflar ve içlerindeki tanımlamalar belirsiz hale getirilmiştir.

Kodlardaki Karmaşıklığı Çözme

Daha önce belirttiğim gibi geliştiriciler, tersine mühendisliği zorlaştırmak için çeşitli karmaşıklaştırma teknikleri kullanır. Neyse ki bu durumu aşmak için de araçlar geliştirilmiştir.

Bunlardan ilki [Detect It Easy](https://github.com/horsicq/Detect-It-Easy) ve [ExeInfo](https://exeinfo-pe.en.uptodown.com/windows) adlı araçlardır; özellikle ön bilgi edinme aşamasında epey yardımcı olur. İkincisi ise açık kaynaklı .NET deobfuscator ve unpacker aracı olan [de4dot](https://github.com/0xd4d/de4dot)‘tır. Kodlardaki karmaşıklığı minimuma indirerek analizimizi kolaylaştırır. Belirttiğim gibi yüzde yüz kaynak kod vermez, ancak kaynak koda yakın bir çıktı sunar.

De4dot aracı kullanıldıktan sonra Lokibot’un görünümü yukarıda yer almaktadır.

TrickMouse (RAT) Zararlı Analizi

Yukarıdaki bilgilerden sonra .NET malware analizine geçiyoruz. Analiz edeceğimiz zararlı yazılım, CVE-2019-0541 açığını kullanan ve bir APT grubuna atfedilen bir RAT’tır. Ukrayna’daki kullanıcıları hedef alan bu zararlı, Dünya Sağlık Örgütü ve Ukrayna Sağlık Bakanlığı’ndan geliyormuş gibi görünen oltalama saldırılarında kullanılmıştır. Söz konusu zararlının Hades APT grubuna ait olduğu da belirtilmektedir.

CVE-2019-0541 açığına bakıldığında; MSHTML motorunun girdiyi hatalı doğrulamasından kaynaklanan bir uzaktan kod yürütme (RCE) açığıdır. Kullanıcı yönetici haklarıyla oturum açmışsa, açıktan yararlanan saldırgan sistem üzerinde tam denetim ele geçirebilir. Etkilenen ürünler arasında Microsoft Office, Microsoft Office Word Viewer, Internet Explorer 9/10/11, Microsoft Excel Viewer ve Office 365 ProPlus yer almaktadır.

Açık hakkında gerekli bilgiyi verdikten sonra analizimize devam edebiliriz. İlk olarak zararlının Any.run üzerindeki davranışına göz gezdirelim. Zararlı, bir Word belgesi çalıştırıldıktan sonra makrolar aracılığıyla sistem üzerinde yayılmaktadır. Ardından arka planda bir .NET dosyası çalıştırılmaktadır. Bugünkü analizimiz bu .NET bileşenini incelemeye odaklanacaktır.

Karmaşıklaştırma tekniğini etkisiz kılmak için de4dot aracını kullanıyoruz. Yukarıdaki görselde aracın uygulanmadan önceki hali görülmektedir.

Temizlenmiş dosyayı DnSpy’da açtığımızda pek çok dosya ve yapının olduğunu görüyoruz. Bir süre göz gezdirdikten sonra en alt kısımda wdnqdoqjwidqwiopfjhbho.dwqgewherfwef yapısı altında Kdaapk adlı bir sınıf dikkat çekiyor. Bu yapıyı daha ayrıntılı incelediğimizde C2 domaini ile iletişim için kullanılan User-Agent’ı fark ediyoruz. Compatible kısmında görünen Trident ise CVE-2019-0541’in yararlandığı MSHTML motorundan tanıdık bir isimdir.

Kdaapk sınıfındaki diğer kodlara baktığımızda bu RAT’ın özelliklerine rastlıyoruz. C2 sunucularına kendini tanıtmak için sistemden bilgi toplayan fonksiyonlar dikkat çekiyor:

  1. Kullanıcı adı
  2. Makine adı
  3. Ağ arayüzleri
  4. Çalıştırılan dosyanın MD5 değeri

Sınıftaki diğer kod parçacıklarına baktığımızda; toplanan bilgilerin POST isteğiyle X-Reg başlığı aracılığıyla C2 sunucusuna gönderildiğini görüyoruz. Sunucudan dönen Set-Cookie değeri bir değişkene kaydedilir ve sonraki her istekte kullanılır.

Kdaapk sınıfını incelemeye devam ettiğimizde bir GET isteği göze çarpıyor. Bu fonksiyon, C2 sunucusuyla daha fazla iletişim kurulması gerektiğinde devreye giriyor. Cookie alanında ise daha önce sunucudan alınan değerin kullanıldığını görüyoruz. Kodun ilerleyen kısımlarında ilgili komutlar çözümlenip cmd.exe aracılığıyla yürütülüyor. C2 sunucusu, yürütülen komutları takip etmek için veri ve Base64 kodlanmış komut bilgilerini sağlıyor.

Son ağ yöntemine baktığımızda; bu yöntem etkilenen sistemden C2 sunucusuna Base64 verilerini dışarı sızdırmak için kullanılır. Hangi komutun yanıt verdiğini izlemek için Cookie alanına önceki GET isteğinden gelen değer ekleniyor.

Diğer kod parçacıklarından birinde Trick: TrickMouse dizisi göze çarpıyor. Güvenlik araştırmacıları bu dize nedeniyle zararlıya TrickMouse adını vermiştir. Şu an incelediğim zararlının Hades APT grubuna ait olduğu belirtilmektedir.

Kod incelemeye devam ettiğimizde; yukarıda görüldüğü üzere süreç ve hizmet işlemleriyle ilgili bir bölüm yer alıyor.

Buradaki method_2 kısmına gittiğimizde ise; RAT içindeki komutları çalıştıran temel fonksiyonla karşılaşıyoruz.

Bunların haricinde kodları incelerken bir bölümde \\CREDST.sys adında bir şey fark ettim, ancak işlevini tam olarak çözemedim. Belki bir şeyin kısaltması olarak eklenmiştir. Bilen varsa duymak isterim.

Yukarıdaki analizin dışında, geçmişte .NET zararlılarından biri olan Alpha Ransomware incelemesini de gerçekleştirmiştim. İlgili yazıma bu linkten ulaşabilirsiniz.

Referanslar

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

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

  3. https://www.virustotal.com/gui/file%201545401f661f9326f5c604e1a025e811079ba4eace9d3830a05c5e4aa666803e/detection

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