Bu yazıda CS Ranger adaylarına Cehennem haftasında ödev olarak verilen WannaCry zararlısının basitçe bir analizini gerçekleştireceğiz. Bu yazının amacı WannaCry hakkında detaylı bir analiz olmaktan ziyade kursiyerlere ve tabi ki sizlere zararlı yazılım analizi esnasında kullanılan analiz metod ve stratejilerinin birkaçı hakkında bilgi vermektir.

Temel Statik Analiz

Temel statik analiz olarak adlandırdığım aşama uygulamanın hiçbir şekilde çalıştırılmadan ve kod incelemesi yapılmadan gerçekleştirilen analiz aşamasıdır. Bu adımda dosyanın üzerinde yer alan imzalar, stringler, importlar, başlık ve section bilgileri gibi bilgiler toplanarak zararlının ne yaptığı hakkında fikir yürütülür. Temel statik ve dinamik analiz ile elde edilen bilgiler analizin ileri aşamalarını (ileri statik ve ileri dinamik analiz) yönlendirmede kullanılarak işimizi fazlaca kolaylaştırabilir.

AV Detection

VirusTotal taraması ile zararlının ne çeşit bir zararlı yazılım olduğu ve hangi zararlı ailesinin varyantı olduğu bilgileri elde edilebilir.

Burada yer alan Trojan, Generic, Heur gibi sonuçlar AV yazılımının heuristic (sezgisel) taraması sonucunda ortaya çıkan genel bir isimlendirme olup zararlı ailesi hakkında bir bilgi içermediğinden ötürü göz ardı edilmelidir.

Diğer sonuçlara bakıldığında Ransomware ve WannaCrypt gibi isimlendirmeler görmekteyiz. Bunlar ise az önce bahsettiklerimizden daha spesifik isimler olmakla beraber yüksek ihtimalle bir signature (imza) eşleşmesi sonucunda ortaya çıktığından dolayı daha güvenilir sonuçlardır. Bu bilgiler ışığında elimizdeki sample’ın Ransomware (fidye yazılımı) türünden WannaCrypt isimli bir zararlı yazılıma ait olduğunu söylemek mümkündür.

Elde edilen bu keywordler internette araştırılarak fidye yazılımlarının çalışma mantığını öğrenilebilir ve hatta WannaCrypt zararlısının detaylı bir raporunu elde edilebilir ve buralardan edinilen bilgiler analizin ilerleyen aşamalarına yön vermek için kullanılabilir. Ancak unutulmamalıdır ki zararlı yazılım geliştiricileri de bu yöntemleri bilmektedir ve sizi yanlış yönlendirip oyalamak adına zararlı yazılıma sahte imzalar ekleyebilirler.

PE Sections

Zararlı ile ilgili istihbarat edinmenin diğer bir yolu da zararlının section’larına ait hash değerlerinin internette araştırılmasıdır. Zararlı varyantları var olan bir zararlının kodunun değiştirilip tekrar kullanılması ile oluşmaktadır. Dolayısıyla kodların yer aldığı .text section’a ait hash değerleri değişse dahi bazen programda kullanılan veriler değişmediği için bu verilerin yer aldığı .rdata, .data, .rsrc gibi section’ların hash değerleri aynı kalmaktadır. Bu hash’ler internetten araştırılarak aynı section’ı kullanan zararlı varyantlarına ulaşılabilir.

Yukarıdaki ekran görüntüsünden elde edilebilecek diğer bir bilgi section’lara ait Entropi (veri düzensizliği) bilgisidir. Bir verinin yüksek entropiye sahip olması o veride tekrarların (repetition) bulunmadığı veya çok az olduğu anlamına gelir. Veri şifreleme (encryption) ve veri sıkıştırma (packing) algoritmalarının her ikisi de verideki tekrarları bozar ve sonuç olarak verinin entropisini arttırır. Dolayısıyla yüksek entropiye sahip bir section’ın şifrelenmiş veya sıkıştırılmış veri içerdiğini söylemek mümkündür. Elimizdeki sample’da .rsrc section’ı 8.00 gibi çok yüksek bir entropi değerine sahip olduğundan bu section’ın sıkıştırılmış veya şifrelenmiş olduğunu söyleyebiliriz.

Resources bölümü içerisinde “XIA” ismiyle bir ZIP arşivi bulunmaktadır. .rsrc section’ının yüksek entropiye sahip olmasının sebebinin bu olduğu açıktır.

PE Imports

Zararlının kullandığı kütüphaneler ve fonksiyonlar incelenerek zararlının ne yaptığına dair analiz öncesi bir fikir elde edilebilir ve analizin ilerleyen aşamaları bu bilgiler doğrultusunda yönlendirilebilir. Örneğin zararlının yaptığı bir işe dair fonksiyonlar (fidye yazılımı örneği için bunlar şifreleme fonksiyonları olabilir) kod içerisinde takip edilip zararlının o işi nasıl yaptığına dair bütün detaylar ortaya çıkartılabilir.

Bu bölümde import edilen DLL ve bunların içerisindeki fonksiyonların işlevlerine ayrı ayrı değinilecektir.

ADVAPI32.dll : Servis/process oluşturma, dosya izinleri, veri şifreleme v.b fonksiyonları içerir.

Crypto Related Imports

Zararlının ransomware türünden bir yazılım olduğu göz önünde bulundurulduğunda şifreleme fonksiyonlarının görülmesi önceki bulgularımızla paraleldir

Registry Related Imports

Registry modifikasyonuna dair fonksiyonların yer alması zararlılar tarafından yaygın kullanılan bir persistence (kalıcılık) tekniğinin elimizdeki zararlı tarafından da kullanılmış olabileceğine dair bir işaret olabilir.

Service Management Related Imports

Servis oluşturmaya dair fonksiyonlar ise zararlının arkaplanda çalışacak servisler oluşturarak kullanıcıdan gizlenmeye çalışacağına dair bir işaret olabilir.

KERNEL32.dll : Bir OS/application arayüzü olan WinAPI’yi oluşturan kütüphanelerden biridir.

File/Directory Related Imports

Dosya/dizin işlemleriyle alakalı fonksiyonların kullanılması yine bir ransomware’den beklenen birşeydir ve önceki bulgularımızla paraleldir.

Multithreading Related Imports

Yukarıdaki fonksiyonlar multithread çalışan uygulamalar tarafından thread’lerin senkronize biçimde çalışmasını sağlamak amacıyla kullanılır. Bu bilgiler doğrultusunda zararlının yeni process’ler oluşturacağını söylemek mümkündür.

Resource Related Import

Bu fonksiyonların varlığı ise zararlının Resources (.rsrc section) bölümünü kullandığı anlamına geliyor. Yazının “PE Sections” bölümünde bu section’ın entropisinin çok yüksek olduğundan bahsetmiştik.

Module Related Import

Burada yer alan modül yükleme ve bellek yönetimiyle alakalı fonksiyonlar sıklıkla Dynamic DLL Loading işlemi esnasında beraber kullanılır. Aynı zamanda bu fonksiyonlardan bazıları zararlılar tarafından unpacking veya code injection işlemleri sırasında da kullanılır.

System Info Related Import

Buradaki fonksiyonlar adlarından da anlaşılacağı üzere sistem hakkında bilgi alınmasını sağlamakta. Fidye yazılımlarının “ClientID” veya “PRNG Seed” üretmek için sistem bilgilerini kullandığı daha önce de görülmüştür. Buradaki amaç da bu olabilir.

MSVCRT.dll : C runtime kütüphanelerinden bir tanesidir. Kernel32.dll’de yer alan dosya işlemleri, bellek yönetimi Win32API fonksiyonlarının benzerleri (wrappers) doğal olarak burada da yer almaktadır. Bunların dışında ilgi çeken fonksiyonlardan bazıları şu şekildedir.

Crypto Related Import

Bu fonksiyonlar PRNG ve PRNG Seed fonksiyonlarıdır. Şifreleme işlemleri esnasında bu fonksiyonların anahtar üretmekte kullanıldığı görülmüştür. Zararlının sistem bilgilerini (bilgisayar adı, bios tarihi) topladığından az evvel de bahsetmiştik. Bu fonksiyonların da beraberinde yer alması zararlının bu bilgileri PRNG Seed olarak kullanmış olma ihtimalini güçlendirmektedir.

Command Line Related Import

Yukarıda yer alan fonksiyonlar ise zararlının komut satırı aracılığıyla argüman aldığını göstermektedir.

Strings

Zararlı hakkında daha iyi fikir edinebilmek için çalıştırılabilir dosyanın içinde yer alan okunabilir stringler incelenebilir. Bu stringlerin bir kısmı programın içerisinde kullanılan değişkenlere aittir.
Sample’da ilgimizi çeken stringlerin bazıları şu şekildedir;

ZIP Related Strings

inflate 1.1.3 Copyright 1995-1998 Mark Adler
– unzip 0.15 Copyright 1998 Gilles Vollant

Bu stringler bize zararlıda kullanılan sıkıştırma algoritması ile ilgili fikir vermektedir. Bunlar yüksek ihtimalle zararlının Resources bölümü ile ilişkilidir.

Signature Data

WANACRY! , WanaCrypt0r , WNcry@2ol7

Buradaki stringler ise bu zararlıya has (unique) stringler olup zararlıyı tanımlamak için imza oluşturmada kullanılabilir.

Command Related Strings

cmd.exe /c “%s”
icacls . /grant Everyone:F /T /C /Q
attrib +h .

Bu stringler bize zararlının “cmd.exe” aracılığıyla bir takım komutlar çalıştırdığını göstermektedir. Buradaki komutlar ise bir dosya/dizinin izinlerini ve özelliklerini değiştirmeyi sağlamaktadır. Zararlının ransomware türünde olduğu göz önünde bulundurulduğunda zararlının bu komutları bulunduğu dizindeki tüm dosyalara tam erişim sağlamak için kullandığı anlaşılmaktadır.

Executable File Related Strings

taskdl.exe , taskse.exe , tasksche.exe

Stringler arasında bazı çalıştırılabilir dosyalara ait isimler bulunmuştur. Bu isimlerin ne amaçla kullanılacağı ilerleyen aşamalarda daha net anlaşılacaktır.

Extension Related Strings

.123 , .jpeg , .rb , .602 , .jpg , .rtf , .doc , .js , .sch , .3dm , .jsp , .sh , .3ds , .key , .sldm , .3g2 , .lay , .sldm , .3gp , .lay6 , .sldx , .7z , .ldf , .slk , .accdb , .m3u , .sln , .aes , .m4u , .snt , .ai , .max , .sql , .ARC , .mdb , .sqlite3 , .asc , .mdf , .sqlitedb , .asf , .mid , .stc , .asm , .mkv , .std , .asp , .mml , .sti , .avi , .mov , .stw , .backup , .mp3 , .suo , .bak , .mp4 , .svg , .bat , .mpeg , .swf , .bmp , .mpg , .sxc , .brd , .msg , .sxd , .bz2 , .myd , .sxi , .c , .myi , .sxm , .cgm , .nef , .sxw , .class , .odb , .tar , .cmd , .odg , .tbk , .cpp , .odp , .tgz , .crt , .ods , .tif , .cs , .odt , .tiff , .csr , .onetoc2 , .txt , .csv , .ost , .uop , .db , .otg , .uot , .dbf , .otp , .vb , .dch , .ots , .vbs , .der” , .ott , .vcd , .dif , .p12 , .vdi , .dip , .PAQ , .vmdk , .djvu , .pas , .vmx , .docb , .pdf , .vob , .docm , .pem , .vsd , .docx , .pfx , .vsdx , .dot , .php , .wav , .dotm , .pl , .wb2 , .dotx , .png , .wk1 , .dwg , .pot , .wks , .edb , .potm , .wma , .eml , .potx , .wmv , .fla , .ppam , .xlc , .flv , .pps , .xlm , .frm , .ppsm , .xls , .gif , .ppsx , .xlsb , .gpg , .ppt , .xlsm , .gz , .pptm , .xlsx , .h , .pptx , .xlt , .hwp , .ps1 , .xltm , .ibd , .psd , .xltx , .iso , .pst , .xlw , .jar , .rar , .zip , .java , .raw

Stringler arasında bir takım dosya uzantıları da bulunmuştur. Zararlının ransomware türünde bir yazılım olduğu ve bu uzantıların da döküman, backup, veritabanı, ses, görüntü v.b dosya formatlarına ait olduğu göz önünde bulundurulduğunda bunların ransomware’in hedef aldığı dosya formatları olduğunu söylemek mümkündür.

Krypto Analyzer (Kanal)

Önceki bulgularımıza dayanarak zararlının birçok aşamada sıkıştırma/şifreleme işlemleri yaptığını söyleyebiliriz. “KANAL” aracı ile kullanılan sıkıştırma/şifreleme işlemleri hakkında daha detaylı bilgiye sahip olunabilir. PEiD isimli statik analiz aracının bir eklentisi olan “KANAL” çalıştırılabilir dosya üzerindeki kriptografik işlemlere dair imzaları tespit etmemizi sağlayan bir araçtır.

Tespit edilen algoritmaların tamamı şu şekildedir;

ADLER32 :: 000056B0 :: 004056B0
CRC32 :: 0000D054 :: 0040D054
CryptDecrypt [Name] :: 0000F0D0 :: 0040F0D0
CryptEncrypt [Name] :: 0000F0E0 :: 0040F0E0
CryptGenKey [Name] :: 0000F0C4 :: 0040F0C4
RIJNDAEL [S] [char] :: 000089FC :: 004089FC
RIJNDAEL [S-inv] [char] :: 00008AFC :: 00408AFC
ZIP2 encryption :: 00006830 :: 00406830
ZLIB deflate [long] :: 0000CE6C :: 0040CE6C

ADLER32, CRC32, ZIP2 encryption, ZLIB deflate algoritmalarının Resources bölümünde yer alan arşiv için kullanıldığı açıktır. Ayrıca bu arşivin şifrelenmiş olduğunu da anlamaktayız. Geriye kalan algoritma isimlerinden yola çıkarak zararlının dosyaları şifrelemek için AES kullanmış olabileceğini söyleyebiliriz.

Temel Statik Analiz Sonucu Elde Edilen Bilgiler

  • Elimizdeki zararlı Ransomware türünden WannaCry adında bir zararlı
    yazılımdır.
  • Zararlı, içerisinde şifrelenmiş bir ZIP arşivi bulundurmakta ve yüksek
    ihtimalle bu arşivi runtime esnasında açmaktadır.
  • Zararlı, sistemde kalıcılık sağlamak adına kendini Registry’e ekliyor
    olabilir.
  • Zararlı, çalışma esnasında bir veya birden fazla servis oluşturarak kendini
    kullanıcıdan ve AV yazılımlarından gizliyor olabilir.
  • Zararlı, çalışma esnasında yeni process’ler başlatacaktır.
  • Zararlı, dinamik olarak bir DLL dosyası import etmektedir.
  • Zararlı, çalıştığı sistem hakkında bilgi toplamaktadır ve yüksek ihtimalle
    bu bilgileri PRNG Seed olarak kullanacaktır.
  • Zararlı, komut satırı aracılığıyla argüman almaktadır. Bu da zararlının
    birden fazla modda çalışabileceğini gösteriyor olabilir.
  • Zararlı, “cmd.exe” aracılığıyla dosya/dizin izinlerini değiştirmek üzere
    komutlar çalıştırmaktadır.
  • Zararlının hedefinde döküman, veritabanı, backup, ses, görüntü v.b olmak
    üzere 179 çeşit dosya formatı bulunmaktadır.
  • Zararlı, dosyaları şifrelemek için AES şifreleme algoritmasını kullanıyor
    olabilir.

İleri Statik Analiz

Temel statik ve dinamik analiz yöntemleri kullanılarak bir zararlının neler yaptığını öğrenmek mümkündür. Incident Reponse için bunlar çoğu zaman yeterli olsa bile know-how bilgisi gerektiğinde kaynak kod incelemesi ile derinlemesine bir analiz yapılması şarttır. Bu noktada IDA Pro aracının Xref ve Naming özelliklerinin kaynak kod analizi sürecini bir hayli kolaylaştırdığını söylemek gerekiyor.

Kod analizini kolaylaştırmanın bir diğer yolu ise doğrudan şüpheli fonksiyon ve stringlerin program içerisinde kullanıldığı yerleri incelemek. Daha önceden elde ettiğimiz bilgiler doğrultusunda araştırmamızı yönlendirebiliriz. Bu sayede onbinlerce satır kod arasında kör ebe oynamak yerine daha hedef odaklı incelemeler yapmış oluruz.

Kod analizi sırasında ortaya çıkan bulgulardan bazıları;

Start

Zararlının çalışmaya başladığında yaptığı işler sırasıyla;
• Hangi dizinde çalıştığını öğrenmek
• 11-18 karakter uzunluğunda, alfanümerik bir string üretmek (Gen_Rand_Str)
argc değerinin 2’ye eşit olup olmadığına bakmak

Argv Check

Şayet program çalıştırılırken verilen argümanların sayısı iki ise;
• “TaskStart” değerinde bir argüman olup olmadığına bak
• Var ise aşağıdaki dizinlerden birine okuma/yazma izinlerini vermeye çalış (Where_to_Reside)
◦ %WINDOWS%\ProgramData
◦ %WINDOWS%\Intel
◦ %TEMP

Replicate Launch

• Kendini “tasksche.exe” ismiyle kopyala
• “tasksche.exe” dosyasını sistem servisi olarak başlat (launch_tasksche)

taskche.exe killswitch

• Şayet “MsWinZonesCacheCounterMutexA” isimli Mutex açıksa “taskche.exe” servisini sonlandır (Close_Srv_If_CounterMutex)

Persistence, Load_Config, Export and unzip XIA

Kalıcılık için kendini kayıt defterine ekle (Persistence)
• Resources içerisindeki “XIA” isimli şifreli arşivi çıkar (Export_XIA)
◦ Not: Arşiv parolasının WNcry@2ol7 olduğunu görüyoruz.
• Config dosyasını “c.wnry” yükle
• Bulunulan dizindeki tüm dosyaları gizle (Cmd_exe)
• Bulunulan dizindeki tüm dosyalar için tam yetki ver (Cmd_exe)
• Dosya/dizin ve şifreleme işlemleriyle alakalı fonksiyonların adreslerini elde et
◦ Not: Kullanılacak olan fonksiyonların doğrudan import edilmesi yerine
çalışma esnasında adreslerinin bulunup kullanılması analizi zorlaştırdığından
zararlılar tarafından sıklıkla kullanılan bir yöntemdir.

Load_Config

Bu fonksiyon içerisinde üç adet BitCoin Wallet adresi görülmüştür. Wallet’lara
ait bilgilere baktığımızda bu hesaplara şimdiye kadar yaklaşık 100 bin USD
değerinde aktarım yapıldığı görülüyor.

Edit_Cfg

Zararlının kendi içindeki arşivden çıkardığı “c.wnry” adlı dosyadan veri okuma/yazma işlemleri yaptığı görülüyor. Bu dosyanın zararlıya ait bir konfigürasyon dosyası olduğu düşünülmektedir.

Arşivdeki “c.wnry” dosyasını çıkardığımızda ise içerisinde beş adet .onion
uzantılı adres görüyoruz.
• gx7ekbenv2riucmf.onion
• 57g7spgrzlojinas.onion
• xxlvbrloxvriy2c5.onion
• 76jdd2ir2embyv47.onion
• cwwnhwhlz52maqm7.onion

Bunlar yüksek ihtimalle ransomware’in C&C (komuta kontrol) sunucularının adresleridir. XIA içerisindeki diğer dosyaların arasında “s.wnry”isimli diğer bir arşiv ve bu arşivin içerisinde de TOR client yer almaktadır.

Bu bilgiler doğrultusunda zararlının C&C sunucularıyla TOR üzerinden haberleştiğini söylemek mümkündür.

Load ``t.wnry`` Encrypted DLL

Zararlının ilerleyen aşamalarda arşivden çıkardığı “t.wnry” isimli şifreli dosyayı okuduğu ve bunu deşifre ettikten sonra kendi oluşturduğu bir Class içerisine yüklediği görülmektedir.

Dosyayı yükleme aşamasının başında zararlı bir doğrulama aşaması olarak dosyanın başında “WANACRY!” string’ini aramaktadır. Karşı önlem olarak bu string bir signature olarak kullanılabilir.

Decrypting Class

Dinamik analiz esnasında Class yüklenip decrypt edildikten sonraki noktaya breakpoint koyularak program çalışmayı durdurduğunda Class’ın yer aldığı bellek alanı dump edilerek bu dosyanın açık hali elde edilebilir.

Run ``TaskStart`` Method

Class yüklendikten sonra zararlının bu class içerisinde “TaskStart” isimli bir metodu arayıp ardından bunu çağırdığı görülüyor. Buradan anlaşılacağı üzere “t.wnry” dosyası şifrelenmiş bir DLL’dir.

Get_File_Handles & Get_Crypto_Handles

Kod analizi esnasında doğrudan şüpheli fonksiyonların kod içerisinde kullanıldığı yerleri inceleyip daha hızlı sonuç alabileceğimizden söz etmiştik. Elbette malware geliştiriciler bu yöntemi bildiklerinden şüphe çekebilecek fonksiyonları doğrudan kullanmak yerine adreslerini runtime esnasında çözümleyip pointer vasıtasıyla kullanırlar. WannaCry örneğinde ise bu yöntem dosya ve şifreleme fonksiyonlarını elde etmek için kullanılmıştır.

Inside XIA.zip

Zararlının .rsrc kısmında yer alan şifreli arşiv açıldığında içerisinde bir takım dosyalar görülmektedir.

Msg dizini: Kullanıcıya gösterilecek fidye mesajlarının yer aldığı klasör.
b.wnry: Kullanıcının arkaplanına koyulacak olan resim.
c.wnry: Zararlının C&C adreslerinin yer aldığı konfigürasyon dosyası.
r.wnry: Kullanıcılar için SSS dosyası.
s.wnry: İçinde TOR client bulunan arşiv.
t.wnry: Şifreli DLL kütüphane Dosyası.

Bunların dışında taskdl.exe , taskse.exe , u.wnry adında üç adet çalıştırılabilir dosya bulunmaktadır.

İleri Statik Analiz Sonucunda Elde Edilen Bilgiler

  • Kendini kopyala ve “tasksche.exe” adıyla servis oluştur.
  • Sistemde kalıcılık sağlamak için Registry’i modifiye et.
  • Resources içerisindeki şifreli arşivi çıkart.
  • Çıkartılan dosyaları gizle ve dizine tam yetki ver.
  • Konfigürasyon dosyasını oku ve güncelle.
    • C&C sunucularıyla iletişim kurmak üzere .onion adreslerini al.
    • Ödemelerin alınacağı Bitcoin wallet adreslerini dosyaya yaz.
  • Şifreli DLL’in yer aldığı dosyayı oku, deşifre et ve bunu Class’a yükle.
  • Bu Class içerisinden “TaskStart” metodunu çağır.

Sonuç

Bu yazının sonuna geldiğimizde elimizdeki dosyanın WannaCry isimli Ransomware için bir Dropper olduğunu öğrenmekteyiz. Dosya içerisindeki şifreli DLL ve diğer çalıştırılabilir dosyalar da burada kullandığımız metodlar ile incelenerek bu araştırma daha da genişletilebilir ve zararlı hakkında daha fazla bilgiye sahip olunabilir.

Analiz sürecine bakacak olursak öncelikle çalıştırılabilir dosya üzerinde yer alan stringler, sectionlar, imzalar, import edilen dll ve fonksiyonlar gibi bilgileri inceleyerek dosyanın işlevi hakkında bazı yorumlar yaptık. Ardından elde ettiğimiz bu bilgileri kod inceleme esnasında araştırmamızı yönlendirmek için kullandık. Kodu incelerken önceki aşamada zararlı hakkında yaptığımız yorumların bir kısmını doğruladık. Bunun yanında zararlının iç yapısı ve kullandığı metodlar hakkında kritik bilgiler edindik ve bu zararlıdan korunmak için signature ve IoC olarak kullanılabilecek unique stringler, c&c addresleri gibi önemli bilgiler tespit ettik. Bu incelemede hiç bir dinamik analiz metodunun kullanılmadığına dikkat çekmek isterim. Bunun nedeni statik analizin önemine vurgu yapmak istememdendir. Bir dosya hakkında en güvenilir bilgi statik analiz yoluyla elde edilebilmektedir. Bunun yanında statik analizin kod inceleme aşaması uzun zaman alabilmektedir bundan dolayı bu aşama metadata incelemesi ve dinamik analizden elde edilen bilgilerle desteklenmelidir. Lakin dinamik analize hiçbir zaman tek başına güvenilmemesi gerekmektedir.