Post

WannaCry Malware Analizi

WannaCry Malware Analizi

WannaCry Malware Analizi

resim

WannaCry, Mayıs 2017’de Windows’un SMBv1 protokolündeki EternalBlue güvenlik açığını kullanarak yayılan ve dosyaları şifreleyerek fidye talep eden bir fidye yazılımıdır (ransomware). 150’den fazla ülkeyi etkileyen saldırı, NHS, FedEx ve Renault gibi büyük kuruluşlara zarar vermiştir. Şifrelenen dosyaları açmak için Bitcoin ile ödeme talep eden yazılım, İngiliz güvenlik araştırmacısı Marcus Hutchins tarafından keşfedilen bir kill switch sayesinde durdurulmuştur. Microsoft, saldırıya karşı MS17-010 güvenlik yamasını yayımlayarak açığı kapatmıştır.

resim

Özet

WannaCry, art arda çalıştırılan iki bileşenden oluşur ve sistemdeki dosyaları şifreleyerek SMB ve internet üzerinden aynı ağdaki diğer cihazlara yayılır.

Başlangıç dosyası çalıştırıldığında, yönetici ayrıcalıklarını kontrol eder ve belirli bir URL’ye bağlanmaya çalışır. Eğer yönetici erişimi sağlanmışsa ve URL’ye ulaşılamıyorsa, zararlı yazılım sistemdeki tüm dosyaları şifrelemeye devam eder.

Enfeksiyon belirtileri arasında, “Ooops, your important files are encrypted” mesajını içeren bir duvar kağıdı ve aşağıdaki dosyalar bulunmaktadır:

C:\Windows\tasksche.exe C:\Users%USER%\Desktop@Please_Read_Me@.txt C:\Users%USER%\Desktop@WanaDecryptor@.exe C:\Users%USER%\Desktop@WanaDecryptor@.bmp

resim

resim resim

İlk aşama bileşeni çalıştırıldığında kontrol edilen iki ana kill-switch bulunur:

1.Belirtilen alan adına erişilip erişilemediğini doğrulamak:

“iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com”

2.Yönetici ayrıcalıklarıyla çalıştırılıp çalıştırılmadığını doğrulamak:

Eğer ilk kontrol başarılı olursa, process hiçbir işlem gerçekleştirmeden kapanır. Ancak, bu kontrol başarısız olursa, process “C:\Windows” dizini altında “tasksche.exe” adlı bir dosya oluşturmaya çalışır. Yönetici ayrıcalıkları olmadan çalıştırıldığında, bu işlem başarısız olur. Eğer dosya yönetici ayrıcalıklarıyla çalıştırılırsa ve ilk kontrol başarılı olursa, yine hiçbir işlem gerçekleştirilmez. Ancak, ilk kontrol başarısız olursa, zararlı yazılım beklenen şekilde çalışmaya devam eder.

ANALİZ

IDA pro aracı kullanarak malware’e ait stringleri kontrol edelim.

resim

hxxp[:]//www[.]iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]com adresi yüksek olasılıkla WannaCry zararlısının kullandığı komuta kontrol sunucusuna ait. %s paramatresinin olması ise dynamic olarak oluşacak dosya isimlerine işaret etmektedir.

resim

Imports

resim resim

API importlarına dayanarak, fidye yazılımının “CreateServiceA” kullanarak bir servis oluşturma, “StartServiceCtrlDispatcherA” ile bir hizmet uygulamasını Hizmet Kontrol Yöneticisi’ne (SCM) bağlama, “send” ve “recv” kullanarak bağlı bir soket üzerinden veri gönderme ve alma, “GetAdaptersInfo” kullanarak bir bilgisayardaki ağ bağdaştırıcıları hakkında bilgi alma, “InternetOpenUrlA” kullanarak bir URL’ye bağlanma ve “MoveFileExA” kullanarak dosya ve dizinleri taşıma veya yeniden adlandırma yeteneklerine sahip olduğu görülmektedir.

Ayrıca, kriptografik işlebler kullanılmaktadır: “CryptAcquireContext” ile bir kriptografik hizmet sağlayıcısına (CSP) erişim sağlanır, “CryptGenKey” ile şifreleme için bir kriptografik anahtar oluşturulur, “CryptEncrypt” ile veriler bu anahtar kullanılarak şifrelenir, “CryptDecrypt” ile şifrelenmiş veriler çözümlenir, “CryptDestroyKey” ile işlem tamamlandığında anahtar imha edilir ve “CryptImportKey” ile gerektiğinde harici bir kaynaktan kriptografik anahtar içe aktarılır.

Capa çıktısına baktığımızda , fidye yazılımı Defense Evasion, Discovery, Persistence, Anti-behavioral and Static Analysis, Command and Control (C2), Cryptography, Data Execution, File System ve Process Handling ile ilgili Mitre aktivitelerine hit ettiğini görmekteyiz.

resim resim

“wannacry.exe” adlı çalıştırılabilir dosyanın ana fonksiyonuna ait assembly kodunu incelediğimizde, bağlantı için WinINet API’sine ait fonksiyonların kullanıldığını gözlemlemekteyiz. “InternetOpenA” fonksiyonu, “InternetOpenUrlA” tarafından kullanılacak bir bağlantı oluşturur ve bu fonksiyon aşağıdaki URL’yi açmaktadır.:

“xttp://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com”

Daha sonra, önceden oluşturulan bağlantıyı kapatmak için “InternetCloseHandle” fonksiyonunun kullanıldığını görmekteyiz.

resim resim resim resim

“test edi, edi” komutu, “edi” yazmacının sıfır olup olmadığını kontrol eder ve ardından gelen “jne 0x4081bc” komutu, eğer “edi” sıfır değilse, yani belirli bir değer içeriyorsa, programın “0x4081bc” adresine atlamasını sağlar. Bu bağlamda, “InternetOpenUrlA” fonksiyonunun döndürdüğü sonuç “edi” yazmacına kaydedildiğinde, eğer bu değer 0 değilse, yani URL’ye başarılı bir bağlantı sağlanmışsa, program belirtilen adrese atlayarak muhtemelen bağlantıyla ilgili sonraki işlemleri gerçekleştirir veya programdan çıkış işlemlerini yürütür. Ancak, eğer “edi” değeri 0 ise, yani bağlantı başarısız olmuşsa, program akışı “0x004081a7” adresine yönlendirilir. Bu adres, büyük olasılıkla zararlı yazılımın yükünü (payload) barındıran ve kötü amaçlı işlemlerin başladığı bölümdür. Böylece, programın yürütülmesi başarısız bir bağlantı durumunda farklı bir akış izleyerek kötü amaçlı kodun çalıştırılmasına yol açabilir.

resim

resim

resim

Çalıştırılan processleri incelediğimizde, cmd.exe sürecinin birden fazla kez çalıştırıldığını gözlemliyoruz. Bu çalıştırmalar sırasında, “tasksche.exe” adlı dosya çıkarılıp açıldıktan sonra C:\ProgramData dizinine export edilmektedir.. Ardından, dosya attrib parametresi ile gizlenerek standart kullanıcılar için daha az görünür hale getirilir. Ayrıca, tüm kullanıcılara everyone izinleri verilerek dosyanın herhangi bir kısıtlama olmadan değiştirilmesi sağlanır.

Bu hazırlık adımlarının ardından, .bat betiği ve .vbs betiği çalıştırılır. Bu betiklerin, kötü amaçlı işlemlerin otomatikleştirilmesi veya yürütülmesi açısından önemli bir rol oynadığı düşünülmektedir. Sistemde kalıcılığı sağlamak amacıyla belirli Windows Kayıt Defteri (Registry) anahtarları değiştirilir veya oluşturulur. Bu sayede, dosyanın veya ilgili betiklerin sistem başlangıcında otomatik olarak çalıştırılması mümkün hale gelir.

Ek olarak, adli incelemeyi zorlaştırmak ve kurtarma girişimlerini engellemek amacıyla, vssadmin ve wmic komutları kullanılarak mevcut shadow kopyaları silinir. Böylece, sistemdeki yedekleme dosyalarının ortadan kaldırılması sağlanarak, olası bir veri geri yükleme süreci sekteye uğratılır.

resim

Yeni oluşturulmuş mssecsvc2.0 adlı servis, yerel ağ içinde yayılmak amacıyla 445 numaralı bağlantı noktasını (SMB protokolü) kullanırken gözlemlenebilir. Bu servis, Server Message Block (SMB) protokolü üzerinden iletişim kurarak, aynı ağdaki diğer sistemlere bulaşmaya çalışmaktadır. Bu yayılma mekanizması, genellikle kimlik bilgisi hırsızlığı veya yetkisiz erişim elde etmek için kullanılan bir yöntemdir.

Buna ek olarak, sistemde 9050 numaralı port açılmış olup, tasksvc.exe adlı süreç tarafından localhost (yerel sistem) üzerinde dinleme modunda çalıştırıldığı tespit edilmiştir. Bu bağlantı noktası, genellikle Tor ağı üzerinden trafiği yönlendirmek veya başka bir tür gizli haberleşme kanalı oluşturmak için kullanılır. Bu durum, kötü amaçlı yazılımın dış dünyayla bağlantı kurmasını veya bir saldırgan tarafından yönetilmesini sağlayan bir arka kapı (backdoor) mekanizması oluşturduğunu düşündürebilir.

Makinede Çalıştırılan Komutlar:

Ransomware.wannacry.exe -m security cmd.exe /c “C:\ProgramData\dmbpnjjuib647\tasksche.exe” attrib +h icacls . /grant Everyone:F /T /C /Q taskdl.exe cmd.exe /c start /b @WanaDecryptor@.exe vs cmd.exe /c reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v “dmbpnjjuib647” /t REG_SZ /d “\”C:\ProgramData\dmbpnjjuib647\tasksche.exe\”” /f cmd.exe /c vssadmin delete shadows /all /quiet & wmic shadowcopy delete & bcdedit /set {default} bootstatuspolicy ignoreallfailures & bcdedit /set {default} recoveryenabled no & wbadmin delete catalog -quiet

resim

Gelişmiş statik analiz sürecimize başlamak için, Cutter adlı aracı kullanalım. Cutter, bir ikili dosyanın (binary) tersine mühendislik işlemiyle incelenmesine olanak tanıyan, hem decompiler (ters derleyici) hem de disassembler (parçalarına ayırıcı) özelliklerine sahip güçlü bir analiz aracıdır. Bu araç sayesinde, çalıştırılabilir bir dosyanın assembly kodunu görüntüleyebilir ve içerisindeki işleyişi daha detaylı bir şekilde inceleyebiliriz.

resim

Analiz sürecine, genellikle programın giriş noktası olan main() fonksiyonundan başlayalım. Bu fonksiyonun içeriğini incelediğimizde, Windows API fonksiyonlarından biri olan “InternetOpenA” çağrısının stack’e (yığına) aktarıldığını gözlemleyebiliriz. Bu fonksiyon, genellikle internet bağlantısı kurmak veya HTTP istekleri göndermek için kullanılır.

Bunun hemen ardından, JNE (Jump if Not Equal) komutunun yer aldığını fark edebiliriz. Bu komut, belirli bir koşul sağlanmadığında program akışının başka bir bellek adresine yönlendirilmesini sağlar. Yani, InternetOpenA fonksiyonunun dönüş değerine bağlı olarak, programın alternatif bir yürütme yoluna geçebileceği anlaşılıyor. Bu tür akış kontrol mekanizmaları, genellikle hata kontrolü, koşullu işlemler veya kötü amaçlı yazılımlarda analizden kaçınma teknikleri olarak karşımıza çıkabilir.

resim resim

Yukarıdaki grafiği, özellikle sol tarafta bulunan bölümü dikkatlice incelediğimizde, bir başka fonksiyon çağrısının gerçekleştiğini görebiliriz. Bu durum, programın işleyişinin burada devam ettiğini ve yeni bir alt işlevin devreye girdiğini göstermektedir. Dolayısıyla, bu fonksiyonun içeriğini daha detaylı bir şekilde analiz ederek, programın nasıl ilerlediğini ve hangi işlemleri gerçekleştirdiğini anlamaya çalışalım.

Bu fonksiyon, büyük olasılıkla programın geri kalan yükünü (payload) içermektedir. Bunun nedeni, daha önce belirlenen koşulun sağlanması durumunda, pop komutunun devreye girerek daha önce stack’e (yığına) eklenmiş olan çağrıların temizlenmesiyle program akışının sonlandırılmasıdır. Başka bir deyişle, eğer belirlenen şart gerçekleşmiş olsaydı, programın burada sona ereceğini söyleyebilirdik. Ancak, bu fonksiyonun çağrılması, programın tamamlanmadığını ve yürütme sürecinin devam ettiğini gösteriyor.

Bu noktada, fonksiyonun içerisindeki işlemleri ayrıntılı olarak inceleyerek, programın hangi verileri işlediğini, hangi sistem çağrılarını yaptığı ve potansiyel olarak zararlı bir aktivite içerip içermediğini değerlendirebiliriz. Bu tür analizler, özellikle kötü amaçlı yazılımların davranışlarını anlamak ve onların gizlenme veya analizden kaçınma tekniklerini ortaya çıkarmak açısından son derece kritik bir rol oynar.

resim

Yukarıdaki kod akışını incelediğimizde, “fcn.00407f20” fonksiyonunun çağrıldığını ve bu fonksiyonun içerisinde yürütme sürecinin büyük bir kısmını oluşturan iki farklı fonksiyon çağrısının daha bulunduğunu görebiliriz.

İlk fonksiyon, “Microsoft_security_center_2.0” adlı servisin sistemde oluşturulmasından sorumludur. Bu servis, muhtemelen kötü amaçlı bir yazılımın kalıcılığını sağlamak veya belirli görevleri otomatik olarak yürütmek amacıyla tasarlanmıştır.

Diğer fonksiyon ise, “tasksche.exe” dosyasının sistemde açılmasını ve çıkarılmasını gerçekleştirir. Bu işlemin ardından, C:\ProgramData dizini altında ilgili dosyanın yerleştirileceği yeni bir alt dizin oluşturulur.

resim resim

Service create edilip başlatılıyor.

resim

tasksche.exe zararlısı unpacking adımları:

resim resim

Programı Çalıştırıp Entry Point Noktasını Bulalım

resim resim

Main Function resim

IoC:

hxxp[:]//www[.]iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea[.]com 24d004a104d4d54034dbcffc2a4b19a11f39008a575aa614ea04703480b1022c taskhsvc.exe listening over localhost port 9050 command line parameter “-m security” New service creation by the name of “mssecsvc2.0” C:\ProgramData\dmbpnjjuib647\tasksche.exe ihdfrgui.exe

Yara Kuralı:

rule WannaCry {

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
meta:
    description = "YARA rule detection for WannaCry"
    

strings:
    $s1 = "http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com" ascii
    $s2 = "%s -m security"
    $s3 = "C:\%s\qeriuwjhrf"
    $s4 = "mssecsvc.exe"
    $s5 = "icacls . /grant Everyone:F /T /C /Q"
    $s6 = "cmd.exe /c start /b @WanaDecryptor@.exe vs"
    $s7 = "cmd.exe /c vssadmin delete shadows /all /quiet & wmic shadowcopy delete"
    $s8 = "tasksche.exe"

condition:
    all of them }

resim

This post is licensed under CC BY 4.0 by the author.