Giriş
Bu yazımda WannaCry fidye yazılımının basit bir analizini gerçekleştireceğim. Bu makalenin amacı WannaCry'ın detaylı bir analizini yapmak değil, kötü amaçlı yazılım analizi sırasında kullanılan bazı yöntem ve stratejiler hakkında sizleri bilgilendirmektir.
Temel Statik Analiz
Temel statik analiz dediğim, uygulama çalıştırılmadan ya da kod incelemesi yapılmadan gerçekleşen analiz aşamasıdır. Bu adımda dosya üzerindeki imzalar, stringler, importlar, header ve section bilgileri gibi bilgiler toplanarak zararlı yazılımın ne yaptığı hakkında fikirler oluşturulur. Temel statik ve dinamik analiz ile elde edilen bilgiler bize bir yön göstererek analizin ileri aşamalarında (ileri statik ve ileri dinamik analiz) işimizi büyük ölçüde kolaylaştırabilir.
Antivirüs Algılama (AV olarak anılacaktır.)
VirusTotal taraması ile kötü amaçlı yazılımın ne tür olduğu ve hangi kötü amaçlı aile varyantı olduğu hakkında bilgi edinilebilir.
Trojan, Generic, Heur gibi sonuçlar, AV yazılımının sezgisel taramasından kaynaklanan genel bir isimlendirmedir ancak kötü amaçlı yazılım ailesi hakkında yararlı bilgiler içermez. Bu nedenle göz ardı edilmelidir.
Diğer sonuçlarda Ransomware ve WannaCrypt gibi isimler görüyoruz. Bunlar az önce bahsettiklerimden daha spesifik isimlerdir ve bir imza eşleşmesinden kaynaklanmaları muhtemel olduğu için daha güvenilir sonuçlardır. Bu bilgiler ışığında elimizdeki örneğin: WannaCrypt adlı bir Ransomware (fidye yazılımı) zararlı yazılımı olduğunu söylemek mümkündür.
Elde edilen bu anahtar kelimeler internette araştırılarak fidye yazılımı operasyonu hakkında bilgi edinilebilir. Hatta WannaCrypt'in detaylı bir analiz raporu elde edilebilir. Bunlardan elde edilen bilgiler analizin ilerleyen aşamalarına rehberlik etmek için kullanılabilir. Ancak kötü amaçlı yazılım geliştiricilerinin de bu yöntemleri bildiği ve sizi yanıltmak ve dikkatinizi dağıtmak için kötü amaçlı yazılıma sahte imzalar ekleyebilecekleri unutulmamalıdır.
PE Bölümleri
Kötü amaçlı yazılımlar hakkında bilgi edinmenin bir başka yolu da bölümlerinin hash değerlerini internette aramaktır. Zararlı varyantlar, mevcut bir zararlı yazılımın kodunun değiştirilerek yeniden kullanılmasından kaynaklanır. Dolayısıyla kodların yer aldığı .text bölümünün hash değerleri değişse bile bazen programda kullanılan veriler değişmez. Dolayısıyla .rdata, .data, .rsrc gibi bölümlerin hash değerleri aynı kalır. Bu hash'ler internetten araştırılarak aynı bölümü kullanan zararlı türevleri bulunabilir.
Yukarıdaki ekran görüntüsünden elde edilebilecek bir diğer bilgi ise bölümlerin Entropisi'dir. Bir verinin yüksek entropiye sahip olması, o veride tekrarların olmadığı ya da çok az olduğu anlamına gelir. Hem veri şifreleme hem de veri sıkıştırma algoritmaları verideki tekrarları bozar ve sonuç olarak verinin entropisini artırır. Dolayısıyla entropisi yüksek olan bir bölümün şifrelenmiş ya da sıkıştırılmış veri içerdiğini söylemek mümkündür. Örneğimizde .rsrc bölümü 8.00 gibi çok yüksek bir entropi değerine sahip. Dolayısıyla bu bölümün sıkıştırılmış ya da şifrelenmiş olduğunu söyleyebiliriz.
Resources bölümü "XIA" adında bir ZIP arşivi içerir. Bu arşiv, .rsrc bölümünün yüksek Entropiye sahip olmasının ana nedenidir.
PE Imports
Zararlı yazılımlar tarafından kullanılan kütüphaneler ve fonksiyonlar incelenerek zararlının ne yaptığına dair bir fikir oluşturulabilir. Analizin diğer aşamaları bu bilgilerle yönlendirilebilir. Örneğin, zararlının yaptığı bir işle ilgili fonksiyonlar (Fidye yazılımı örneğinde bunlar şifreleme fonksiyonları olabilir.) kodunda takip edilebilir ve zararlının bunu nasıl yaptığına dair tüm detaylar ortaya çıkarılabilir.
Bu bölümde içe aktarılan DLL ve içindeki fonksiyonlar ayrı ayrı ele alınacaktır.
ADVAPI32.dll: Hizmet/işlem oluşturma, dosya izinleri, veri şifreleme vb. ile ilgili işlevleri içerir.
Kayıt Defteri Karşılığı
Hizmet oluşturma işlevleri, zararlının arka planda çalışacak hizmetler oluşturarak kullanıcıdan gizlenmeye çalışacağının bir işareti olabilir. Ayrıca kötü amaçlı yazılımlar tarafından kullanılan bir başka yaygın kalıcılık tekniğidir.
KERNEL32.dll: Bir işletim sistemi/uygulama arayüzü olan WinAPI'nin kütüphanelerinden biridir.
Dosya Sistemi ile Alakalı Importların Kayıt Defteri Karşılığı
Dosya/dizin işlemleriyle ilgili işlevlerin kullanılması da bir fidye yazılımından beklenen bir durumdur ve önceki bulgularımızla paraleldir.
İşlemlerle Alakalı Importların Kayıt Defteri Karşılığı
Yukarıdaki fonksiyonlar çok iş parçacıklı uygulamalar tarafından iş parçacıklarının senkronize çalışmasını sağlamak için kullanılır. Bu bilgiler doğrultusunda virüsün yeni süreçler yaratacağını söylemek mümkündür.
Bu işlevlerin varlığı, zararlının Resources (.rsrc) bölümünü kullandığı anlamına gelir. Makalenin "PE Bölümleri" bölümünde bu bölümün entropisinin çok yüksek olduğundan bahsetmiştik.
Modül yükleme ve bellek yönetimi ile ilgili işlevler Dinamik DLL yükleme işlemi sırasında genellikle birlikte kullanılır. Bu işlevlerden bazıları zararlılar tarafından paket açma veya işlem enjeksiyonu sırasında da kullanılır.
Buradaki işlevler, adından da anlaşılacağı gibi, sistem hakkında bilgi sağlar. Fidye yazılımlarının sistem bilgilerini "ClientID" veya "PRNG Seed" üretmek için kullandığı görülmüştür. Buradaki amaç da bu olabilir.
MSVCRT.dll: C çalışma zamanı kütüphanelerinden biri. Bunların dışında ilgi çeken bazı fonksiyonlar aşağıdaki gibidir.
Bu fonksiyonlar PRNG ve PRNG Seed fonksiyonlarıdır. Şifreleme işlemleri sırasında bu fonksiyonların anahtar üretmek için kullanıldığı tespit edilmiştir. Zararlının sistem bilgilerini (bilgisayar adı, BIOS geçmişi) topladığından bahsetmiştik. Bu işlevlerin dahil edilmesi, zararlının bu bilgileri PRNG Seed'i olarak kullanma olasılığını güçlendirmektedir.
Yukarıdaki fonksiyonlar, PEST'in komut satırı üzerinden argüman aldığını gösterir.
String İfadeleri
Kötü amaçlı yazılım hakkında daha iyi bir fikir edinmek için çalıştırılabilir dosyadaki okunabilir stringler incelenebilir. Bu dizelerden bazıları programda kullanılan değişkenlere aittir.
İşte örnekte bizi ilgilendiren stringlerden bazıları;
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ı hakkında bir fikir verir. Büyük olasılıkla zararlının Resources bölümü ile ilişkilidirler.
İmzalar;
WANACRY! , WanaCrypt0r , WNcry@2ol7
Buradaki string ifadeler, zararlıyı tanımlamak üzere imzalar oluşturmak için kullanılabilecek benzersiz stringlerdir.
[CODE title="Komutlarla Alakalı Stringler"]cmd.exe /c “%s” icacls . /grant Everyone:F /T /C /Q attrib +h .[/CODE]
Bu stringler bize zararlının "cmd.exe" aracılığıyla bir dizi komut çalıştırdığını göstermektedir. Buradaki komutlar bir dosyanın/dizinin izinlerini ve özelliklerini değiştirmeye izin vermektedir. Zararlının fidye yazılımı türünde olduğu göz önüne alındığında, zararlının bu komutları bulunduğu dizindeki tüm dosyalara tam erişim sağlamak için kullandığı anlaşılmaktadır.
taskdl.exe , taskse.exe , tasksche.exe
Stringler arasında bazı çalıştırılabilir dosyaların adları bulundu. Bu isimlerin ne amaçla kullanılacağı daha sonra daha net anlaşılacaktır.
Kripto Analizi (KANAL)
Önceki bulgularımıza dayanarak, zararlının sıkıştırma/şifreleme işlemlerini birçok aşamada gerçekleştirdiğini söyleyebiliriz. Kullanılan sıkıştırma/şifreleme işlemleri hakkında daha detaylı bilgi "KANAL" aracı ile elde edilebilir. PEiD adlı statik analiz aracının bir eklentisi olan "KANAL", çalıştırılabilir dosya üzerindeki kriptografik işlemlere ait imzaları tespit etmemizi sağlayan bir araçtır.
Tespit edilen algoritmaların tamamı aşağıdaki gibidir;
[CODE title="Algoritma"]ADLER32 :: 000056B0 :: 004056B0
CRC32 :: 0000D054 :: 0040D054
CryptDecrypt [Name] :: 0000F0D0 :: 0040F0D0
CryptEncrypt [Name] :: 0000F0E0 :: 0040F0E0
CryptGenKey [Name] :: 0000F0C4 :: 0040F0C4
RIJNDAEL [char] :: 000089FC :: 004089FC
RIJNDAEL [S-inv] [char] :: 00008AFC :: 00408AFC
ZIP2 encryption :: 00006830 :: 00406830
ZLIB deflate [long] :: 0000CE6C :: 0040CE6C[/CODE]
Resources bölümündeki arşiv için ADLER32, CRC32, ZIP2 şifreleme ve ZLIB deflate algoritmalarının kullanıldığı açık. Ayrıca bu arşivin şifrelenmiş olduğunu da anlıyoruz. Geriye kalan algoritma isimlerinden yola çıkarak kötü niyetlinin dosyaları şifrelemek için AES kullanmış olabileceğini söyleyebiliriz.
Temel Statik Analiz Sonuçları
Temel statik analiz ile elde edilen bulgular bize zararlının ne yaptığına dair bir fikir verse de kesinlik yoktur. Burada amaç mümkün olduğunca çok hipotez üretmektir. Bu hipotezler esasen analizin ilerleyen aşamalarında bize yol gösterecek ipuçlarıdır. Analizin ilerleyen aşamalarında bu hipotezlerin bazıları doğrulanacak bazıları yanlışlanacaktır. Hatta belki de öngörülemeyen bulgular ortaya çıkacaktır. Bu nedenle, temel analizin sonuçları hakkında her zaman şüpheci olmak ve ek doğrulama getirmek gerekir.
Gelişmiş Statik Analiz
Temel statik ve dinamik analiz yöntemlerini kullanarak bir kötü amaçlı yazılımın ne yaptığını öğrenmek mümkündür. Olay Müdahalesi için kaynak kod incelemesi ile derinlemesine bir analiz gerekebilir. Bu noktada IDA Pro aracının Xref ve Naming özellikleri kaynak kod analizi sürecini büyük ölçüde kolaylaştırır.
Kod analizini kolaylaştırmanın bir diğer yolu da şüpheli fonksiyon ve dizgilerin doğrudan program içerisinde kullanıldığı yerleri incelemektir. Daha önce edindiğimiz bilgilere dayanarak araştırmamıza yön verebiliriz. Bu şekilde on binlerce satır kod arasında Marco Polo oynamak yerine daha hedefe yönelik incelemeler yapmış oluruz. Ters kod mühendisliği söz konusu olduğunda, takip edilebilecek pek çok tavşan deliği vardır. Bu aşamada başarının anahtarı, takip etmeye değer olanları bulmaktır.
Kod analizi sırasında ortaya çıkan bulgulardan bazıları aşağıdadır. Tersine mühendisliğe aşina değilseniz, lütfen kod bölümlerini açıklamalarıyla eşleştirmeye çalışın.
Bu örneğin çalışmaya başladığında yaptığı iş sırasıyla;
Argüman Kontrolü
Programı çalıştırırken verilen argüman sayısı iki ise;
◦ %WINDOWS%\Intel
◦ %TEMP%
taskche.exe killswitch fonksiyonu
- Mutex "MsWinZonesCacheCounterMutexA" varsa "taskche.exe" hizmetini sonlandır. (Close_Srv_If_CounterMutex)
Persistence, Load_Config, XIA'yı dışa aktarın ve açın.
Kalıcılık için kendini kayıt defterine ekle.
- Resources'daki şifrelenmiş "XIA" arşivini dışa aktarın (Export_XIA)
Not: Arşiv şifresinin WNcry@2ol7 olduğunu görüyoruz.
Bu işlevde üç adet BitCoin Cüzdan adresi buluyoruz.
Edit_CFG
Zararlının, kötü amaçlı yazılımın içindeki arşivden çıkarılan "c.wnry" dosyasından okuma/yazma işlemleri yaptığı görülmektedir. Bu dosyanın zararlı yazılımın yapılandırma dosyası olduğu düşünülmektedir.
,
Arşivden "c.wnry" dosyasını çıkardığımızda, beş adet .onion adresi içerdiğini görüyoruz.
Bunlar büyük olasılıkla fidye yazılımının C&C sunucularının adresleridir. XIA'daki bir diğer dosya ise bir TOR istemcisi içeren "s.wnry" adlı bir arşivdir.
Bu bilgiler doğrultusunda zararlının C&C sunucuları ile TOR üzerinden iletişim kurduğunu söylemek mümkündür.
Zararlının arşivden çıkarılan "t.wnry" isimli şifrelenmiş dosyayı okuduğu ve ardından bir Class olarak şifresini çözdüğü görülmektedir.
Kurulumun başlangıcında bir doğrulama aşaması olarak, kötü amaçlı yazılım dosyanın başında "WANACRY!" dizesini arar. Bir karşı önlem olarak, bu dize bir imza olarak kullanılabilir.
TaskStart Yöntemini Çalıştır
Class yüklendikten sonra, zararlının bu class'ta "TaskStart" adında bir yöntem aradığı ve sonra onu çağırdığı görülüyor. Buradan da anlaşılacağı üzere "t.wnry" dosyası şifrelenmiş bir DLL'dir.
Zararlı yazılımın .rsrc bölümündeki şifrelenmiş arşiv açıldığında, içinde bir dizi dosya bulunur.
DLL'yi Ayıklamak için Diğer Adımlar
Dinamik analiz sırasında, Class'ın şifresinin çözüldüğü ve yüklendiği noktaya bir breakpoint koyabilir, Class'ın bulunduğu bellek alanını boşaltabilir ve bu dosyanın orijinal sürümünü elde edebiliriz.
Gelişmiş Statik Analiz Bulguları
Bitiş
Bu yazının sonunda elimizdeki dosyanın WannaCry adlı Ransomware için bir Dropper olduğunu öğreniyoruz. Dosya içerisindeki şifrelenmiş DLL ve diğer çalıştırılabilir dosyalar da burada kullandığımız yöntemlerle analiz edilebilir ve bu araştırma daha da genişletilerek zararlı yazılım hakkında daha fazla bilgi sahibi olunabilir.
Analiz sürecine bakacak olursak öncelikle çalıştırılabilir dosya üzerindeki dizgiler, bölümler, imzalar, içe aktarılan DLL ve fonksiyonlar gibi statik bilgileri inceleyerek hipotezler çıkarıyoruz.
Daha sonra bu bilgileri kod incelemesi sırasında araştırmamızı yönlendirmek için kullandık. Kodu incelerken bir önceki aşamada kötü amaçlı yazılım hakkında yaptığımız bazı hipotezleri doğruladık. Ayrıca zararlı yazılımın iç yapısı ve kullandığı yöntemler ile C&C adresleri gibi bu zararlıya karşı korunmak için imza ve IoC olarak kullanılabilecek benzersiz dizgiler hakkında kritik bilgiler elde ettik.
Bu yazımda WannaCry fidye yazılımının basit bir analizini gerçekleştireceğim. Bu makalenin amacı WannaCry'ın detaylı bir analizini yapmak değil, kötü amaçlı yazılım analizi sırasında kullanılan bazı yöntem ve stratejiler hakkında sizleri bilgilendirmektir.
Temel Statik Analiz
Temel statik analiz dediğim, uygulama çalıştırılmadan ya da kod incelemesi yapılmadan gerçekleşen analiz aşamasıdır. Bu adımda dosya üzerindeki imzalar, stringler, importlar, header ve section bilgileri gibi bilgiler toplanarak zararlı yazılımın ne yaptığı hakkında fikirler oluşturulur. Temel statik ve dinamik analiz ile elde edilen bilgiler bize bir yön göstererek analizin ileri aşamalarında (ileri statik ve ileri dinamik analiz) işimizi büyük ölçüde kolaylaştırabilir.
Antivirüs Algılama (AV olarak anılacaktır.)
VirusTotal taraması ile kötü amaçlı yazılımın ne tür olduğu ve hangi kötü amaçlı aile varyantı olduğu hakkında bilgi edinilebilir.
Trojan, Generic, Heur gibi sonuçlar, AV yazılımının sezgisel taramasından kaynaklanan genel bir isimlendirmedir ancak kötü amaçlı yazılım ailesi hakkında yararlı bilgiler içermez. Bu nedenle göz ardı edilmelidir.
Diğer sonuçlarda Ransomware ve WannaCrypt gibi isimler görüyoruz. Bunlar az önce bahsettiklerimden daha spesifik isimlerdir ve bir imza eşleşmesinden kaynaklanmaları muhtemel olduğu için daha güvenilir sonuçlardır. Bu bilgiler ışığında elimizdeki örneğin: WannaCrypt adlı bir Ransomware (fidye yazılımı) zararlı yazılımı olduğunu söylemek mümkündür.
Elde edilen bu anahtar kelimeler internette araştırılarak fidye yazılımı operasyonu hakkında bilgi edinilebilir. Hatta WannaCrypt'in detaylı bir analiz raporu elde edilebilir. Bunlardan elde edilen bilgiler analizin ilerleyen aşamalarına rehberlik etmek için kullanılabilir. Ancak kötü amaçlı yazılım geliştiricilerinin de bu yöntemleri bildiği ve sizi yanıltmak ve dikkatinizi dağıtmak için kötü amaçlı yazılıma sahte imzalar ekleyebilecekleri unutulmamalıdır.
PE Bölümleri
Kötü amaçlı yazılımlar hakkında bilgi edinmenin bir başka yolu da bölümlerinin hash değerlerini internette aramaktır. Zararlı varyantlar, mevcut bir zararlı yazılımın kodunun değiştirilerek yeniden kullanılmasından kaynaklanır. Dolayısıyla kodların yer aldığı .text bölümünün hash değerleri değişse bile bazen programda kullanılan veriler değişmez. Dolayısıyla .rdata, .data, .rsrc gibi bölümlerin hash değerleri aynı kalır. Bu hash'ler internetten araştırılarak aynı bölümü kullanan zararlı türevleri bulunabilir.
Yukarıdaki ekran görüntüsünden elde edilebilecek bir diğer bilgi ise bölümlerin Entropisi'dir. Bir verinin yüksek entropiye sahip olması, o veride tekrarların olmadığı ya da çok az olduğu anlamına gelir. Hem veri şifreleme hem de veri sıkıştırma algoritmaları verideki tekrarları bozar ve sonuç olarak verinin entropisini artırır. Dolayısıyla entropisi yüksek olan bir bölümün şifrelenmiş ya da sıkıştırılmış veri içerdiğini söylemek mümkündür. Örneğimizde .rsrc bölümü 8.00 gibi çok yüksek bir entropi değerine sahip. Dolayısıyla bu bölümün sıkıştırılmış ya da şifrelenmiş olduğunu söyleyebiliriz.
Resources bölümü "XIA" adında bir ZIP arşivi içerir. Bu arşiv, .rsrc bölümünün yüksek Entropiye sahip olmasının ana nedenidir.
PE Imports
Zararlı yazılımlar tarafından kullanılan kütüphaneler ve fonksiyonlar incelenerek zararlının ne yaptığına dair bir fikir oluşturulabilir. Analizin diğer aşamaları bu bilgilerle yönlendirilebilir. Örneğin, zararlının yaptığı bir işle ilgili fonksiyonlar (Fidye yazılımı örneğinde bunlar şifreleme fonksiyonları olabilir.) kodunda takip edilebilir ve zararlının bunu nasıl yaptığına dair tüm detaylar ortaya çıkarılabilir.
Bu bölümde içe aktarılan DLL ve içindeki fonksiyonlar ayrı ayrı ele alınacaktır.
ADVAPI32.dll: Hizmet/işlem oluşturma, dosya izinleri, veri şifreleme vb. ile ilgili işlevleri içerir.
Kayıt Defteri Karşılığı
Hizmet oluşturma işlevleri, zararlının arka planda çalışacak hizmetler oluşturarak kullanıcıdan gizlenmeye çalışacağının bir işareti olabilir. Ayrıca kötü amaçlı yazılımlar tarafından kullanılan bir başka yaygın kalıcılık tekniğidir.
KERNEL32.dll: Bir işletim sistemi/uygulama arayüzü olan WinAPI'nin kütüphanelerinden biridir.
Dosya Sistemi ile Alakalı Importların Kayıt Defteri Karşılığı
Dosya/dizin işlemleriyle ilgili işlevlerin kullanılması da bir fidye yazılımından beklenen bir durumdur ve önceki bulgularımızla paraleldir.
İşlemlerle Alakalı Importların Kayıt Defteri Karşılığı
Yukarıdaki fonksiyonlar çok iş parçacıklı uygulamalar tarafından iş parçacıklarının senkronize çalışmasını sağlamak için kullanılır. Bu bilgiler doğrultusunda virüsün yeni süreçler yaratacağını söylemek mümkündür.
Bu işlevlerin varlığı, zararlının Resources (.rsrc) bölümünü kullandığı anlamına gelir. Makalenin "PE Bölümleri" bölümünde bu bölümün entropisinin çok yüksek olduğundan bahsetmiştik.
Modül yükleme ve bellek yönetimi ile ilgili işlevler Dinamik DLL yükleme işlemi sırasında genellikle birlikte kullanılır. Bu işlevlerden bazıları zararlılar tarafından paket açma veya işlem enjeksiyonu sırasında da kullanılır.
Buradaki işlevler, adından da anlaşılacağı gibi, sistem hakkında bilgi sağlar. Fidye yazılımlarının sistem bilgilerini "ClientID" veya "PRNG Seed" üretmek için kullandığı görülmüştür. Buradaki amaç da bu olabilir.
MSVCRT.dll: C çalışma zamanı kütüphanelerinden biri. Bunların dışında ilgi çeken bazı fonksiyonlar aşağıdaki gibidir.
Bu fonksiyonlar PRNG ve PRNG Seed fonksiyonlarıdır. Şifreleme işlemleri sırasında bu fonksiyonların anahtar üretmek için kullanıldığı tespit edilmiştir. Zararlının sistem bilgilerini (bilgisayar adı, BIOS geçmişi) topladığından bahsetmiştik. Bu işlevlerin dahil edilmesi, zararlının bu bilgileri PRNG Seed'i olarak kullanma olasılığını güçlendirmektedir.
Yukarıdaki fonksiyonlar, PEST'in komut satırı üzerinden argüman aldığını gösterir.
String İfadeleri
Kötü amaçlı yazılım hakkında daha iyi bir fikir edinmek için çalıştırılabilir dosyadaki okunabilir stringler incelenebilir. Bu dizelerden bazıları programda kullanılan değişkenlere aittir.
İşte örnekte bizi ilgilendiren stringlerden bazıları;
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ı hakkında bir fikir verir. Büyük olasılıkla zararlının Resources bölümü ile ilişkilidirler.
İmzalar;
WANACRY! , WanaCrypt0r , WNcry@2ol7
Buradaki string ifadeler, zararlıyı tanımlamak üzere imzalar oluşturmak için kullanılabilecek benzersiz stringlerdir.
[CODE title="Komutlarla Alakalı Stringler"]cmd.exe /c “%s” icacls . /grant Everyone:F /T /C /Q attrib +h .[/CODE]
Bu stringler bize zararlının "cmd.exe" aracılığıyla bir dizi komut çalıştırdığını göstermektedir. Buradaki komutlar bir dosyanın/dizinin izinlerini ve özelliklerini değiştirmeye izin vermektedir. Zararlının fidye yazılımı türünde olduğu göz önüne alındığında, zararlının bu komutları bulunduğu dizindeki tüm dosyalara tam erişim sağlamak için kullandığı anlaşılmaktadır.
taskdl.exe , taskse.exe , tasksche.exe
Stringler arasında bazı çalıştırılabilir dosyaların adları bulundu. Bu isimlerin ne amaçla kullanılacağı daha sonra daha net anlaşılacaktır.
Kripto Analizi (KANAL)
Önceki bulgularımıza dayanarak, zararlının sıkıştırma/şifreleme işlemlerini birçok aşamada gerçekleştirdiğini söyleyebiliriz. Kullanılan sıkıştırma/şifreleme işlemleri hakkında daha detaylı bilgi "KANAL" aracı ile elde edilebilir. PEiD adlı statik analiz aracının bir eklentisi olan "KANAL", çalıştırılabilir dosya üzerindeki kriptografik işlemlere ait imzaları tespit etmemizi sağlayan bir araçtır.
Tespit edilen algoritmaların tamamı aşağıdaki gibidir;
[CODE title="Algoritma"]ADLER32 :: 000056B0 :: 004056B0
CRC32 :: 0000D054 :: 0040D054
CryptDecrypt [Name] :: 0000F0D0 :: 0040F0D0
CryptEncrypt [Name] :: 0000F0E0 :: 0040F0E0
CryptGenKey [Name] :: 0000F0C4 :: 0040F0C4
RIJNDAEL
RIJNDAEL [S-inv] [char] :: 00008AFC :: 00408AFC
ZIP2 encryption :: 00006830 :: 00406830
ZLIB deflate [long] :: 0000CE6C :: 0040CE6C[/CODE]
Resources bölümündeki arşiv için ADLER32, CRC32, ZIP2 şifreleme ve ZLIB deflate algoritmalarının kullanıldığı açık. Ayrıca bu arşivin şifrelenmiş olduğunu da anlıyoruz. Geriye kalan algoritma isimlerinden yola çıkarak kötü niyetlinin dosyaları şifrelemek için AES kullanmış olabileceğini söyleyebiliriz.
Temel Statik Analiz Sonuçları
- Bu kötü amaçlı yazılım WannaCry adlı bir fidye yazılımıdır.
- Zararlı, şifrelenmiş bir ZIP arşivi içerir ve büyük olasılıkla Runtime sırasında arşivden çıkarılır.
- Kötü amaçlı yazılım, sistemde kalıcılık sağlamak için kendisini Kayıt Defterine ekliyor olabilir.
- Kötü amaçlı yazılım, kalıcılığı sağlamak veya Antivirüs sistemlerinden kaçmak için çalışması sırasında bir veya daha fazla hizmet oluşturuyor olabilir.
- Kötü amaçlı yazılım çalışma sırasında yeni işlemler başlatabilir.
- Kötü amaçlı yazılım DLL dosyalarını dinamik olarak import ediyor olabilir.
- Kötü amaçlı yazılım, çalıştığı sistem hakkında bilgi toplayabilir ve yüksek olasılıkla bu bilgileri PRNG Seed olarak kullanacaktır.
- Kötü amaçlı yazılım komut satırı üzerinden argüman alıyor olabilir.
- Kötü amaçlı yazılım "cmd.exe" komutları aracılığıyla dosya/dizin izinlerini değiştirebilir.
- Kötü amaçlı yazılım dosyaları şifrelemek için AES şifreleme algoritması kullanıyor olabilir.
Temel statik analiz ile elde edilen bulgular bize zararlının ne yaptığına dair bir fikir verse de kesinlik yoktur. Burada amaç mümkün olduğunca çok hipotez üretmektir. Bu hipotezler esasen analizin ilerleyen aşamalarında bize yol gösterecek ipuçlarıdır. Analizin ilerleyen aşamalarında bu hipotezlerin bazıları doğrulanacak bazıları yanlışlanacaktır. Hatta belki de öngörülemeyen bulgular ortaya çıkacaktır. Bu nedenle, temel analizin sonuçları hakkında her zaman şüpheci olmak ve ek doğrulama getirmek gerekir.
Gelişmiş Statik Analiz
Temel statik ve dinamik analiz yöntemlerini kullanarak bir kötü amaçlı yazılımın ne yaptığını öğrenmek mümkündür. Olay Müdahalesi için kaynak kod incelemesi ile derinlemesine bir analiz gerekebilir. Bu noktada IDA Pro aracının Xref ve Naming özellikleri kaynak kod analizi sürecini büyük ölçüde kolaylaştırır.
Kod analizini kolaylaştırmanın bir diğer yolu da şüpheli fonksiyon ve dizgilerin doğrudan program içerisinde kullanıldığı yerleri incelemektir. Daha önce edindiğimiz bilgilere dayanarak araştırmamıza yön verebiliriz. Bu şekilde on binlerce satır kod arasında Marco Polo oynamak yerine daha hedefe yönelik incelemeler yapmış oluruz. Ters kod mühendisliği söz konusu olduğunda, takip edilebilecek pek çok tavşan deliği vardır. Bu aşamada başarının anahtarı, takip etmeye değer olanları bulmaktır.
Kod analizi sırasında ortaya çıkan bulgulardan bazıları aşağıdadır. Tersine mühendisliğe aşina değilseniz, lütfen kod bölümlerini açıklamalarıyla eşleştirmeye çalışın.
Bu örneğin çalışmaya başladığında yaptığı iş sırasıyla;
- Hangi dizinde çalıştığını öğren.
- 11-18 karakter uzunluğunda alfanümerik bir dize oluştur. (Gen_Rand_Str.)
- argc'nin 2'ye eşit olup olmadığını tanımla.
Argüman Kontrolü
Programı çalıştırırken verilen argüman sayısı iki ise;
- "TaskStart" argümanını kontrol et.
- Varsa aşağıdaki dizinlerden birine okuma/yazma izinleri vermeyi dene. (Where_to_Reside)
◦ %WINDOWS%\Intel
◦ %TEMP%
- "tasksche.exe" adıyla kendini kopyala.
- "tasksche.exe" dosyasını sistem hizmeti olarak başlat. (launch_tasksche)
taskche.exe killswitch fonksiyonu
- Mutex "MsWinZonesCacheCounterMutexA" varsa "taskche.exe" hizmetini sonlandır. (Close_Srv_If_CounterMutex)
Persistence, Load_Config, XIA'yı dışa aktarın ve açın.
Kalıcılık için kendini kayıt defterine ekle.
- Resources'daki şifrelenmiş "XIA" arşivini dışa aktarın (Export_XIA)
Not: Arşiv şifresinin WNcry@2ol7 olduğunu görüyoruz.
- "c.wnry" yapılandırma dosyasını yükleyin
- Geçerli dizindeki tüm dosyaları gizle (Cmd_exe)
- Geçerli dizindeki tüm dosyalar için tam yetki verin (Cmd_exe)
- Dosya/dizin ve şifreleme ile ilgili fonksiyonların adreslerini alın
Bu işlevde üç adet BitCoin Cüzdan adresi buluyoruz.
Edit_CFG
Zararlının, kötü amaçlı yazılımın içindeki arşivden çıkarılan "c.wnry" dosyasından okuma/yazma işlemleri yaptığı görülmektedir. Bu dosyanın zararlı yazılımın yapılandırma dosyası olduğu düşünülmektedir.
Arşivden "c.wnry" dosyasını çıkardığımızda, beş adet .onion adresi içerdiğini görüyoruz.
- gx7ekbenv2riucmf.onion
- 57g7spgrzlojinas.onion
- xxlvbrloxvriy2c5.onion
- 76jdd2ir2embyv47.onion
- cwwnhwhlz52maqm7.onion
Bunlar büyük olasılıkla fidye yazılımının C&C sunucularının adresleridir. XIA'daki bir diğer dosya ise bir TOR istemcisi içeren "s.wnry" adlı bir arşivdir.
Bu bilgiler doğrultusunda zararlının C&C sunucuları ile TOR üzerinden iletişim kurduğunu söylemek mümkündür.
Zararlının arşivden çıkarılan "t.wnry" isimli şifrelenmiş dosyayı okuduğu ve ardından bir Class olarak şifresini çözdüğü görülmektedir.
Kurulumun başlangıcında bir doğrulama aşaması olarak, kötü amaçlı yazılım dosyanın başında "WANACRY!" dizesini arar. Bir karşı önlem olarak, bu dize bir imza olarak kullanılabilir.
TaskStart Yöntemini Çalıştır
Class yüklendikten sonra, zararlının bu class'ta "TaskStart" adında bir yöntem aradığı ve sonra onu çağırdığı görülüyor. Buradan da anlaşılacağı üzere "t.wnry" dosyası şifrelenmiş bir DLL'dir.
Zararlı yazılımın .rsrc bölümündeki şifrelenmiş arşiv açıldığında, içinde bir dizi dosya bulunur.
- Msg dizini: kullanıcıya gösterilecek fidye mesajlarının bulunduğu klasör.
- b.wnry: Kullanıcının arka planına yerleştirilecek görüntü.
- c.wnry: Zararlının C&C adreslerini içeren yapılandırma dosyası.
- r.wnry: Kullanıcılar için SSS dosyası.
- s.wnry: İçinde TOR istemcisi bulunan arşiv.
- t.wnry: Şifrelenmiş DLL kütüphane dosyası.
DLL'yi Ayıklamak için Diğer Adımlar
Dinamik analiz sırasında, Class'ın şifresinin çözüldüğü ve yüklendiği noktaya bir breakpoint koyabilir, Class'ın bulunduğu bellek alanını boşaltabilir ve bu dosyanın orijinal sürümünü elde edebiliriz.
Gelişmiş Statik Analiz Bulguları
- Kendini kopyala ve "tasksche.exe" adıyla hizmet oluştur.
- Kalıcılığı korumak için Kayıt Defterini değiştir.
- Şifrelenmiş arşivi Resources'den çıkar.
- Çıkarılan dosyaları gizle ve dizine tam izinler ver.
- Yapılandırma dosyasını oku ve güncelle.
- C&C sunucuları ile iletişim kurmak için .onion adreslerini al.
- Ödemelerin alınacağı Bitcoin cüzdan adreslerini dosyaya yaz.
- Şifrelenmiş bir DLL dosyasını oku, kodunu çöz ve Class'a yükle.
- Bu Class içerisinden "TaskStart" metodunu çağır.
Bitiş
Bu yazının sonunda elimizdeki dosyanın WannaCry adlı Ransomware için bir Dropper olduğunu öğreniyoruz. Dosya içerisindeki şifrelenmiş DLL ve diğer çalıştırılabilir dosyalar da burada kullandığımız yöntemlerle analiz edilebilir ve bu araştırma daha da genişletilerek zararlı yazılım hakkında daha fazla bilgi sahibi olunabilir.
Analiz sürecine bakacak olursak öncelikle çalıştırılabilir dosya üzerindeki dizgiler, bölümler, imzalar, içe aktarılan DLL ve fonksiyonlar gibi statik bilgileri inceleyerek hipotezler çıkarıyoruz.
Daha sonra bu bilgileri kod incelemesi sırasında araştırmamızı yönlendirmek için kullandık. Kodu incelerken bir önceki aşamada kötü amaçlı yazılım hakkında yaptığımız bazı hipotezleri doğruladık. Ayrıca zararlı yazılımın iç yapısı ve kullandığı yöntemler ile C&C adresleri gibi bu zararlıya karşı korunmak için imza ve IoC olarak kullanılabilecek benzersiz dizgiler hakkında kritik bilgiler elde ettik.