Hoşgeldin Misafir

#STHM-Kötü Amaçlı Yazılım Analizine giriş

CW-ommah

17 Ocak 2022
906 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Allah’ın Rahmeti Ve Bereketi Üzerinize Olsun
Selamun aleyküm dostlarım. Bu makalemizde Kötü amaçlı yazılımın ne olduğunu inceleyeceğiz. Soruşturmalarımıza yardımcı olması için yaygın olarak kullanılan araç ve kaynaklardan faydanacağız ve temel statik ve dinamik analiz kavramlarına göz atacağız Allah’ın izniyle.

Kötü Amaçlı Yazılımı Analizi
Kötü amaçlı yazılım anlamına gelen malware kelimesi, İngilizcedeki MALicious softWARE teriminden türetilmiştir. Bu nedenle, kötü niyetli bir amaca sahip herhangi bir yazılım malware olarak kabul edilebilir. Malware’ler, davranışlarına göre farklı kategorilere ayrılır. Ancak bu makalede onların ayrıntılarını incelemeyeceğiz. Burada, bir makinede kötü amaçlı yazılım bulunduğundan şüphelenirsek hangi adımları atmamız gerektiği üzerine düşüneceğiz. Şimdi başlayalım.

Malware Analizinin Amacı

Malware analizi önemli bir beceridir. Kısaca açıklamak gerekirse, güvenlik sektöründe aşağıdaki kişiler malware analizi yapar:
  • Güvenlik Operasyonları ekipleri, ağlarındaki kötü amaçlı etkinlikleri tespit edebilmek için malware analiz eder ve buna yönelik tespit kuralları yazar.
  • Olay Müdahale (Incident Response) ekipleri, bir ortamda ne tür zararların oluştuğunu belirlemek, bu zararları gidermek ve sistemi eski hâline döndürmek için malware analizi yapar.
  • Tehdit Avcılığı (Threat Hunt) ekipleri, ağ içerisinde malware avı yapmak amacıyla kullanacakları IOC’leri (Indicators of Compromise / Uzlaşma Göstergeleri) belirlemek için malware analiz eder.
  • Güvenlik ürünü geliştiren şirketlerdeki Malware Araştırmacıları, güvenlik ürünlerine yeni tespit mekanizmaları eklemek amacıyla malware analizi yapar.
  • Microsoft ve Google gibi işletim sistemi geliştiricilerindeki Tehdit Araştırma ekipleri ise, istismar edilen güvenlik açıklarını keşfetmek ve işletim sistemlerine/uygulamalara daha fazla güvenlik özelliği eklemek için malware analiz eder.
Genel olarak bakıldığında, birçok farklı kişinin çeşitli önemli nedenlerle malware analizi yaptığı görülmektedir. O hâlde, nasıl başlanacağına birlikte bakalım dostlarım.

Başlamadan Önce

Malware, dikkatsiz şekilde ele alındığında bir silah kadar tehlikeli olabilir. Herhangi bir analize başlamadan önce, güvenli bir şekilde nasıl çalışılması gerektiğini anlamak oldukça önemlidir. Araştırmanız sırasında sisteminizi korumak ve kontrollü bir ortam sağlamak için aşağıdaki önlemleri her zaman uygulayın:
  • Malware veya şüpheli dosyaları, yalnızca malware analizi amacıyla kullanılan bir makine dışında asla analiz etmeyin.
  • Malware örneklerini analiz etmediğiniz veya farklı konumlara taşımadığınız zamanlarda, yanlışlıkla çalıştırılmalarını önlemek için bunları her zaman parola korumalı zip/rar ya da benzeri arşivlerde saklayın.
  • Malware’i bu parola korumalı arşivden yalnızca izole edilmiş ortam içerisinde ve sadece analiz sırasında çıkarın.
  • Malware analizi için özel olarak izole edilmiş bir sanal makine (VM) oluşturun ve analiz tamamlandığında bu sistemi temiz hâline geri döndürebileceğinizden emin olun.
  • Tüm internet bağlantılarının kapalı olduğundan veya en azından izlenebilir durumda olduğundan emin olun.
  • Malware analizi tamamlandıktan sonra, önceki analizlerden kalan izlerin sonraki analizleri etkilemesini önlemek için sanal makineyi yeniden temiz başlangıç durumuna döndürün.
1778925443377.png
Kötü amaçlı yazılım analizi teknikleri
1778925464355.png
Malware analizi, bir bulmacayı çözmeye benzer. Bu bulmacanın parçalarını bulmak için farklı araçlar ve teknikler kullanılır; bu parçaların bir araya getirilmesi ise malware’in ne yapmaya çalıştığına dair tam resmi ortaya çıkarır. Çoğu zaman elinizde çalıştırılabilir bir dosya (binary ya da PE dosyası olarak da adlandırılır. PE, Portable Executable anlamına gelir), kötü amaçlı bir belge dosyası veya bir Ağ Paket Yakalama dosyası (pcap) bulunur. Malware analizi sırasında en yaygın olarak incelenen dosya türü Portable Executable (PE) dosyalarıdır.

Bu bulmacanın farklı parçalarını bulmak için genellikle çeşitli araçlar, yöntemler ve kısayollar kullanılır. Bu teknikler temel olarak aşağıdaki iki kategoriye ayrılır:

  • Statik Analiz (Static Analysis)
  • Dinamik Analiz (Dynamic Analysis)

Statik Analiz1778925498521.png

Bir malware çalıştırılmadan analiz ediliyorsa, buna Statik Analiz (Static Analysis) denir. Bu durumda, PE dosyasının farklı özellikleri çalıştırılmadan incelenir. Benzer şekilde, kötü amaçlı bir belge dosyasının çalıştırılmadan yalnızca özelliklerinin incelenmesi de Statik Analiz olarak değerlendirilir.

Statik analiz örnekleri arasında; malware içerisindeki metin dizilerini (strings) incelemek, farklı bölümlerle ilgili bilgiler elde etmek için PE başlığını kontrol etmek veya bir ayrıştırıcı (disassembler) kullanarak koda bakmak yer alır. Bu tekniklerin bazılarını ilerleyen yazılarımızda inceleyeceğiz.

Malware’ler çoğu zaman statik analizden kaçınmak için çeşitli teknikler kullanır. Bu teknikler arasında gizleme (obfuscation), paketleme (packing) veya özelliklerini saklamaya yönelik başka yöntemler bulunur. Bu tür teknikleri aşabilmek için ise genellikle dinamik analiz kullanılır.

Dinamik Analiz1778925555526.png

Malware bir ikilemle karşı karşıyadır. Amacını gerçekleştirebilmesi için çalıştırılması gerekir ve koda ne kadar gizleme (obfuscation) eklenirse eklensin, çalıştığı anda tespit edilmesi daha kolay hâle gelir.

Statik analiz bize malware hakkında önemli bilgiler sağlayabilir, ancak bazen bu yeterli olmaz. Bu gibi durumlarda, malware’in ne yaptığını gözlemleyebilmek için onu kontrollü bir ortamda çalıştırmamız gerekebilir. Malware’ler çoğu zaman özelliklerini gizleyerek statik analizi engellemeye çalışır. Ancak bu durumların büyük kısmında dinamik analiz etkili sonuçlar verebilir.

Dinamik analiz teknikleri arasında, malware’i bir sanal makine (VM) üzerinde çalıştırmak yer alır. Bu işlem; malware etkinliklerini izlemek için çeşitli araçların manuel olarak kullanılmasıyla ya da bu görevi otomatik şekilde gerçekleştiren sandbox ortamları aracılığıyla yapılabilir. Bu tekniklerin bazılarını ilerleyen yazılarımızdaa öğreneceğiz inşallah.

Bununla birlikte malware’ler, analistlerin dinamik analiz yapmasını engellemek için de çeşitli teknikler kullanır. Dinamik analizlerin çoğu kontrollü ortamlarda gerçekleştirildiğinden, bu yöntemlerin büyük bölümü çalıştırıldıkları ortamı tespit etmeye dayanır. Malware, eğer kontrollü bir ortamda çalıştırıldığını fark ederse, gerçek kötü amaçlı davranışlarını gizlemek için farklı ve zararsız bir kod yolunu çalıştırabilir.

Gelişmiş Malware Analizi

Gelişmiş malware analizi teknikleri, temel statik ve dinamik analiz yöntemlerinden kaçabilen malware’leri incelemek için kullanılır. Bu tür analizlerde disassembler ve debugger araçlarından yararlanılır.
Disassembler’lar, malware’in kodunu ikili formattan (binary) assembly diline dönüştürerek analistin malware komutlarını statik olarak incelemesine olanak sağlar. Debugger’lar ise çalışan bir programa bağlanır ve analistin malware çalışırken yürüttüğü komutları izlemesine imkân tanır.
Bir debugger, analistin malware’i farklı noktalarda durdurup yeniden çalıştırmasına olanak sağlayarak ilgi çekici bilgilerin tespit edilmesini kolaylaştırır. Aynı zamanda sistemin bellek ve CPU durumu hakkında da genel bir görünüm sunar.

Temel Statik Analiz
Yeni bir malware örneği analiz edilirken, ilk adım genellikle temel statik analiz gerçekleştirmektir. Temel statik analiz, derinlemesine incelemeye geçmeden önce malware’i genel hatlarıyla değerlendirme süreci olarak düşünülebilir. Bu analiz yöntemi, karşı karşıya olduğumuz malware hakkında bize genel bir bakış sağlar.
Bazı durumlarda, malware’in hangi Windows API çağrılarını yaptığı veya paketlenmiş (packed) olup olmadığı gibi kritik bilgiler elde etmemize yardımcı olabilir. Ancak bazı durumlarda ise yalnızca malware’in genel yapısını anlamamızı sağlayan ve onu analiz etmek için ne kadar çaba gerektiğine dair fikir veren bilgiler sunabilir.
Şimdi daha fazla vakit kaybetmeden, temel statik analiz gerçekleştirmek için kullanabileceğimiz bazı tekniklere göz atalım dostlarım.

Dosya Türünü İnceleme

Malware’in dosya türü çoğu zaman dosya uzantısından anlaşılır ve açıkça görülebilir. Ancak bazı durumlarda malware geliştiricileri, yanıltıcı dosya uzantıları kullanarak kullanıcıları kandırmaya çalışır. Bu gibi senaryolarda, dosya uzantılarına bağlı kalmadan bir dosyanın gerçek türünü nasıl tespit edeceğimizi bilmek oldukça faydalıdır.
Linux sistemlerinde bir dosyanın türünü öğrenmek için file komutu kullanılabilir. file komutunun ne yaptığını anlamak için man sayfasını okuyabilir veya --help seçeneğini kullanabiliriz:
Kod:
man file
veya
Kod:
file --help
Kod:
user@machine$ file wannacry
wannacry: PE32 executable (GUI) Intel 80386, for MS Windows
user@machine$

String’leri İnceleme

Bir dosya hakkında bize faydalı bilgiler sağlayan bir diğer önemli komut da strings komutudur. Bu komut, bir dosya içerisinde bulunan string ifadelerini listeler.
strings komutunun ne yaptığını anlamak için man sayfasını okuyabilir veya --help seçeneğini kullanabiliriz:
Kod:
man strings
veya
Kod:
strings --help
Bu komutun da oldukça basit bir kullanıma sahip olduğunu göreceğiz. Bir dosya içindeki stringleri görmek için aşağıdaki komut kullanılabilir:
Kod:
strings <dosya_adı>

Bir dosyadaki stringleri incelemek, çoğu zaman malware’in davranışına dair ipuçları sağlayabilir. Örneğin, strings komutunun çıktısında URLDownloadToFile ifadesini görürsek, bu malware’in Windows API’lerinden biri olan URLDownloadToFile ile ilgili bir işlem yaptığını anlayabiliriz. Büyük ihtimalle internetten bir dosya indirip diske kaydediyordur.
Benzer şekilde stringler, malware analizi sırasında daha sonra bize yardımcı olacak bağlamsal bilgiler de sunabilir.
Kod:
user@machine$ strings wannacry
!This program cannot be run in DOS mode.
Rich
.text
`.rdata
@.data
.rsrc
49t$
TVWj
PVVh
tE9u
 inflate 1.1.3 Copyright 1995-1998 Mark Adler
 n;^
Qkkbal
i]Wb
9a&g
MGiI
wn>Jj
#.zf
+o*7
- unzip 0.15 Copyright 1998 Gilles Vollant
CloseHandle
GetExitCodeProcess
TerminateProcess
WaitForSingleObject
CreateProcessA
GlobalFree
GetProcAddress
LoadLibraryA
GlobalAlloc
SetCurrentDirectoryA
GetCurrentDirectoryA
GetComputerNameW
SetFileTime
SetFilePointer
MultiByteToWideChar
GetFileAttributesW
GetFileSizeEx
user@machine$

Burada, ‘WannaCry’ örneği üzerinde strings komutunun çalıştırıldığını görebiliriz. Çıktının DOS Stub ile başladığını fark ederiz. Bu kısım, “!This program cannot be run in DOS mode” (Bu program DOS modunda çalıştırılamaz) mesajını içeren metindir.
Bazı değerler anlamlı görünmeyebilir ve rastgele veri gibi durabilir, ancak aynı zamanda faydalı çıktılar da görebilirsiniz. Örneğin, yukarıda bazı stringlerin Windows API çağrılarına benzediğini fark edebiliriz. CloseHandle, GetExitCodeProcess, TerminateProcess gibi ifadeler buna örnektir.
Benzer şekilde, “inflate 1.1.3 Copyright 1995-1998 Mark Adler” ifadesini de görebiliriz. Yapılan kısa bir araştırma, bunun zlib veri sıkıştırma kütüphanesinin bir parçası olduğunu gösterir. Bu da örneğin bu kütüphaneyi kullanıyor olabileceğini düşündürür.

İpucu: Bazen strings komutunun çıktısı terminalde tamamen görüntülenemeyecek kadar büyük olabilir. Bu durumda çıktıyı bir dosyaya yönlendirebilir ve vim ya da benzeri bir araçla inceleyebiliriz. Aşağıdaki terminalde çıktının “str” adlı bir dosyaya yönlendirildiği gösterilmektedir.

Kod:
user@machine$ strings wannacry>str
user@machine$
Alternatif olarak, çıktıyı daha okunabilir bir şekilde incelemek için more veya less komutlarını da kullanabilirsiniz.
Kod:
user@machine$ strings wannacry |more
!This program cannot be run in DOS mode.
Rich
.text
`.rdata
@.data
.rsrc
49t$
TVWj
PVVh
tE9u
PVVW
SVWjcf
X_^[
X_^[
^t19
QPPh
tXVP
X_^]
^t)9
X_^[]
WWWWWPj
SjJ3
X[_^
Yu#j
uSh8
Yu8S
SSh
hn!@
SVWj@
--more--
Burada, listeyi aşağı doğru kaydırmak için boşluk (space) tuşunu kullanabiliriz.

Hash Değerlerini Hesaplama

Dosya hash’leme, bir dosyayı tanımlayan sabit uzunlukta benzersiz bir sayı üretir. Bu nedenle dosya hash’i, bir dosya için benzersiz bir tanımlayıcı olarak düşünülebilir; tıpkı bir ülkedeki vatandaşlar için kullanılan sosyal güvenlik numaraları veya kimlik numaraları gibi.
Hash’leme, malware analizinde önemli bir kavramdır. Belirli bir malware’i tanımlamak için bir kimlik olarak kullanılabilir. Daha sonra göreceğimiz gibi bu kimlik, diğer analistlerle paylaşılabilir veya bilgi alışverişi amacıyla çevrimiçi olarak araştırılabilir. Ayrıca şunu unutmamak gerekir ki, bir dosyada tek bir bitlik değişiklik bile tamamen farklı bir hash değeri oluşmasına neden olur; yani bir dosyanın hash’ini değiştirmek aslında yalnızca bir bitini değiştirmek kadar kolaydır.
Genellikle dosya hash’i hesaplamak için md5sum, sha1sum ve sha256sum gibi algoritmalar kullanılır. Linux’ta basit bir komutla dosya hash’i hesaplanabilir. Örneğin md5sum için:
Kod:
md5sum <dosya_adı>
Kod:
user@machine$ md5sum wannacry
84c82835a5d21bbcf75a61706d8ab549  wannacry
user@machine$
Yukarıda, WannaCry adlı dosya için md5sum hash değerinin hesaplandığını görebiliriz.
Benzer şekilde, bir dosyanın sha1sum veya sha256sum değerini hesaplamak için de sha1sum ve sha256sum komutları kullanılabilir. (Hash değerleri çoğu zaman sonundaki sum ifadesi olmadan da anılır; örneğin md5sum yerine md5 gibi.)

AV Taramaları ve VirusTotal

Bir dosyayı antivirüs programlarıyla taramak veya bir hash değerini VirusTotal üzerinde aramak, güvenlik araştırmacıları tarafından yapılan kötü amaçlı yazılım sınıflandırması hakkında faydalı bilgiler sağlayabilir.
Ancak çevrimiçi bir tarayıcı kullanırken, hassas bilgilerin sızmasını önlemek için dosyayı yüklemek yerine malware’in hash değerini aramak önerilir. Bir örneği yalnızca ne yaptığınızdan emin olduğunuz durumlarda yüklemelisiniz.
Şimdi yukarıda hesapladığımız örnek üzerinden ne tür bilgiler elde edebileceğimize bakalım. WannaCry örneği için hesapladığımız md5sum değerini VirusTotal ana sayfasında arayabiliriz.

1778925899171.png
VirusTotal birçok kullanışlı özelliğin bir karışımını sunar. 60’tan fazla antivirüs (AV) üreticisinden gelen tarama sonuçlarını ve her bir AV üreticisinin örneğe verdiği sınıflandırmayı sağlar.
1778925916256.png
Details (Detaylar) sekmesi, örneğin geçmişini, ilk gönderilme tarihini, son gönderilme tarihini ve örneğe ait meta verileri listeler.
1778925934604.png
Bazen ayrıca, örneğin farklı çevrim içi ortamlarda nasıl davrandığına ve sahip olduğu ilişkilerine dair bilgiler de sunar.
1778925961863.png
1778925973771.png
Ayrıca VirusTotal üzerinde topluluk tarafından yazılmış yorumları da bulabiliriz. Bu yorumlar, bazen örnek hakkında ek bağlam ve ek bilgiler sağlayabilir.
1778925993766.png
Yukarıdaki ekran görüntülerinden de açıkça anlaşılabileceği gibi, incelemekte olduğumuz örnek bir WannaCry fidye yazılımı (ransomware) örneğidir.

PE Dosya Başlığı

PE Başlığı

Görsel PE Arayüzünü gösterir
PE Dosya Başlığı (Portable Executable File Header), bir Portable Executable dosyasına ait meta verileri içerir. Bu veriler, analizimiz sırasında bize çok sayıda faydalı bilgi sağlayabilir. İleri seviye yol için hazırlanacak olan Malware Analysis modülünde PE başlığı ve içerdiği bilgiler ayrıntılı olarak ele alınacaktır. Ancak PE başlığında bulunan bazı önemli bilgiler aşağıda açıklanmıştır:

Importlar / Exportlar

Bir PE dosyası, çoğu zaman bir sistemde çalışmak için ihtiyaç duyduğu tüm kodu kendi içinde barındırmaz. Genellikle işletim sistemi tarafından sağlanan kodları yeniden kullanır. Bu, hem yer tasarrufu sağlamak hem de işletim sisteminin sunduğu altyapıyı kullanarak işleri sıfırdan yazmak yerine mevcut kaynaklardan yararlanmak amacıyla yapılır. Importlar, PE dosyasının dışarıdan aldığı ve farklı görevleri yerine getirmek için kullandığı fonksiyonlardır.

Örneğin, bir geliştirici Windows Kayıt Defteri’nden (Registry) bir değer sorgulamak isterse, bunu kendisi yazmak yerine Microsoft tarafından sağlanan RegQueryValue fonksiyonunu import eder. Bu fonksiyonun çalıştırılacak sistem olan Windows üzerinde zaten bulunacağı varsayıldığı için, PE dosyasının içine dahil edilmesine gerek yoktur.

Benzer şekilde, PE dosyaları export fonksiyonları da sunabilir. Exportlar, diğer ikili dosyaların (binary’lerin) kullanabileceği fonksiyonları dışarıya açar. Böylece diğer programlar bu fonksiyonları yeniden yazmak yerine doğrudan kullanabilir. Exportlar genellikle dinamik olarak bağlanan kütüphaneler (DLL dosyaları) ile ilişkilidir ve DLL olmayan bir PE dosyasında çok fazla export bulunması beklenmez.

Çoğu PE dosyası görevlerini yerine getirmek için Windows API’lerini kullandığından, importlar bize o PE dosyasının ne yapacağı hakkında çok önemli ipuçları verir. Örneğin, InternetOpen fonksiyonunu import eden bir PE dosyasının internet ile iletişim kuracağı, URLDownloadToFile fonksiyonunu kullanan bir PE dosyasının ise internetten dosya indireceği anlaşılabilir. Windows API isimleri genellikle sezgisel ve açıklayıcıdır. Ancak yine de belirli bir fonksiyonun ne yaptığını doğrulamak için Microsoft Dokümantasyonu’na başvurulabilir.

Bölümler (Sections)

PE dosya başlığında bulunan bir diğer faydalı bilgi de dosyadaki bölümlere (sections) ait bilgilerdir. Bir PE dosyası farklı amaçlara hizmet eden çeşitli bölümlere ayrılır. Bu bölümler, dosyanın derlenmesinde kullanılan derleyiciye veya paketleyiciye bağlı olarak değişiklik gösterebilse de PE dosyalarında en yaygın görülen bölümler aşağıdaki gibidir:
  • .text: Genellikle PE dosyası çalıştırıldığında CPU tarafından yürütülen komutları içerir. Bu bölüm çalıştırılabilir olarak işaretlenir.
  • .data: PE dosyası tarafından kullanılan global değişkenleri ve diğer global verileri içerir.
  • .rsrc: Bu bölüm, PE dosyası tarafından kullanılan kaynakları içerir; örneğin resimler, ikonlar vb.

pecheck yardımcı aracı ile PE başlığını analiz etme

PE başlığını kontrol etmek için, pecheck aracını kullanabiliriz.
Kod:
user@machine$ pecheck wannacry
PE check for 'wannacry':
Entropy: 7.995471 (Min=0.0, Max=8.0)
MD5     hash: 84c82835a5d21bbcf75a61706d8ab549
SHA-1   hash: 5ff465afaabcbf0150d1a3ab2c2e74f3a4426467
SHA-256 hash: ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa
SHA-512 hash: 90723a50c20ba3643d625595fd6be8dcf88d70ff7f4b4719a88f055d5b3149a4231018ea30d375171507a147e59f73478c0c27948590794554d031e7d54b7244
.text entropy: 6.404235 (Min=0.0, Max=8.0)
.rdata entropy: 6.663571 (Min=0.0, Max=8.0)
.data entropy: 4.455750 (Min=0.0, Max=8.0)
.rsrc entropy: 7.999868 (Min=0.0, Max=8.0)
Dump Info:
----------DOS_HEADER----------

[IMAGE_DOS_HEADER]
0x0        0x0   e_magic:                       0x5A4D   
0x2        0x2   e_cblp:                        0x90     
0x4        0x4   e_cp:                          0x3       
.
.
.
.
.
[IMAGE_IMPORT_DESCRIPTOR]
0xD5D0     0x0   OriginalFirstThunk:            0xD60C   
0xD5D0     0x0   Characteristics:               0xD60C   
0xD5D4     0x4   TimeDateStamp:                 0x0        [Thu Jan  1 00:00:00 1970 UTC]
0xD5D8     0x8   ForwarderChain:                0x0       
0xD5DC     0xC   Name:                          0xDC84   
0xD5E0     0x10  FirstThunk:                    0x8000   

ADVAPI32.dll.CreateServiceA Hint[100]
ADVAPI32.dll.OpenServiceA Hint[431]
ADVAPI32.dll.StartServiceA Hint[585]
ADVAPI32.dll.CloseServiceHandle Hint[62]
ADVAPI32.dll.CryptReleaseContext Hint[160]
ADVAPI32.dll.RegCreateKeyW Hint[467]
ADVAPI32.dll.RegSetValueExA Hint[516]
ADVAPI32.dll.RegQueryValueExA Hint[503]
ADVAPI32.dll.RegCloseKey Hint[459]
ADVAPI32.dll.OpenSCManagerA Hint[429]

Burada, PECheck aracının WannaCry örneğinin PE başlığından çıkardığı bilgileri görebiliriz. Örneğin, örneğin dört adet bölüme sahip olduğunu görüyoruz: .text, .rdata, .data ve .rsrc ve bu bölümlerin kendi entropy (entropi) değerleri de listelenmektedir. Benzer şekilde, dosyanın farklı hash değerleri de gösterilmektedir.

PECheck ayrıca bir PE dosyasının import ettiği fonksiyonları da gösterir. Yukarıdaki terminal penceresinde, IMAGE_IMPORT_DESCRIPTOR yapısını görebiliriz. Bu yapı, örneğin ADVAPI32.dll dinamik kütüphanesinden (DLL) hangi fonksiyonların import edildiğini gösterir. Örneğin import edilen diğer tüm kütüphaneler için de benzer tanımlayıcılar (descriptor) görülecektir.
Görüldüğü gibi pecheck, bu bölümde ele aldığımızdan çok daha fazla bilgi sunmaktadır.Ancak tüm bu bilgileri detaylı şekilde incelemek çok uzun olduğu için bu makalemizde buna yer vermeyeceğiz maalesef.

Temel Dinamik Analiz
Temel statik analiz bize bir örnek hakkında faydalı bilgiler sağlasa da, analiz sürecinde daha ileriye gidebilmek için genellikle ek analizler yapmamız gerekir. Bir malware’in davranışına dair daha fazla ipucu bulmanın hızlı ve pratik yollarından biri temel dinamik analiz yapmaktır.
Bir malware örneğinin birçok özelliği, çalıştırılmadığı zaman gizlenebilir. Ancak dinamik analiz gerçekleştirdiğimizde bu özellikler açığa çıkar ve malware örneğinin davranışları hakkında daha fazla bilgi edinebiliriz.


Uyarı!

Dinamik analiz, canlı (çalışan) malware örneklerinin çalıştırılmasını gerektirir ve bu durum yıkıcı olabilir. Malware analizini mutlaka izole edilmiş bir sanal makine (Virtual Machine) üzerinde yapmanız şiddetle tavsiye edilir.
Herhangi bir malware analizine başlamadan önce sanal makinenizin temiz bir anlık görüntüsünü (snapshot) oluşturabilir ve her analizden sonra sistemi tekrar temiz bir duruma geri döndürerek sıfırdan başlayabilirsiniz.
Malware analizi için özel olarak tasarlanmamış, gerçek (canlı) bir sistem üzerinde kesinlikle malware analizi yapmayın.

1778926141242.png

Sandbox’lara Giriş

Sandbox terimi askeri alandan ödünç alınmıştır. Sandbox, adından da anlaşılacağı gibi bir kum kutusudur ve bir operasyonun gerçekleştirileceği araziyi modellemek için kullanılır. Askeri ekipler, olası senaryoları belirlemek amacıyla operasyonları bu ortamda gerçek bir çatışma olmadan (dry run) test eder.
Malware analizinde sandbox, bir malware’in hedef alacağı gerçek ortamı taklit eden izole bir ortamdır. Analist, bir örneği bu ortamda çalıştırarak onun hakkında daha fazla bilgi edinir.
Malware analizinde kullanılan sandbox sistemleri büyük ölçüde sanal makinelere (Virtual Machines) dayanır. Bu sanal makineler, gerektiğinde anlık görüntü (snapshot) alabilir ve tekrar temiz bir duruma geri dönebilir.

1778926188505.png

Bir Sandbox’ın Oluşturulması

Sandbox kullanılarak malware analizi yapılırken, analizin etkili olabilmesi için aşağıdaki hususlar dikkate alınmalıdır:
  • Malware örneğinin hedef aldığı gerçek ortamı taklit eden bir sanal makine (Virtual Machine)
  • Anlık görüntü (snapshot) alabilme ve sistemi temiz bir duruma geri döndürebilme yeteneği
  • İşletim sistemi izleme yazılımları (örneğin Procmon, ProcExplorer, Regshot vb.)
  • Ağ izleme yazılımları (örneğin Wireshark, tcpdump vb.)
  • Sahte bir DNS sunucusu ve web sunucusu aracılığıyla ağ üzerinde kontrol sağlanması
  • Analiz günlüklerini ve malware örneklerini sanal makineye alıp çıkarabilmek için, ana sistemi (host) riske atmayan bir mekanizma bulunması (Bu konuda dikkatli olunmalıdır. Malware analiz sanal makineniz ile paylaşımlı bir klasör kullanıyorsanız ve bu klasör malware çalışırken erişilebilir durumdaysa, malware’in bu paylaşımlı klasördeki tüm dosyaları etkileme riski vardır.)

Açık Kaynaklı Sandbox’lar

İyi bir sandbox’ın hangi bileşenlerden oluştuğunu anlamak önemli olsa da, her zaman sıfırdan bir sandbox oluşturmak gerekli değildir. Bunun yerine açık kaynaklı sandbox’lar kurulabilir.
Bu sandbox’lar, temel dinamik analiz yapabilmek için bir altyapı sağlar ve aynı zamanda daha keşifçi bir yaklaşım benimseyen kişiler için önemli ölçüde özelleştirilebilir.

Cuckoo Sandbox

Cuckoo's Sandbox, malware analizi topluluğunda en yaygın bilinen sandbox’tır. 2010 yılında Google Summer of Code projesi kapsamında geliştirilmiştir. Açık kaynaklı bir projedir ve genellikle SOC (Security Operations Center) ortamlarında ve meraklıların ev laboratuvarlarında kullanıldığını görebilirsiniz.
Cuckoo Sandbox’ın avantajları arasında geniş topluluk desteği, kolay anlaşılır dokümantasyon ve yüksek düzeyde özelleştirme imkânı bulunur. Sisteminizi kurup ağa entegre ederek, topluluk tarafından oluşturulan imzalar sayesinde hangi dosyaların zararlı, hangilerinin zararsız olduğunu tespit etmenize yardımcı olabilirsiniz; çünkü çok geniş bir topluluk imza veritabanına sahiptir.
Cuckoo Sandbox artık arşivlenmiştir ve güncelleme beklemektedir. Ayrıca Python 3 desteği bulunmadığı için günümüzde büyük ölçüde güncelliğini yitirmiştir. Ancak her şey kaybolmuş değildir, çünkü alternatif çözümler mevcuttur.

CAPE Sandbox

CAPE Sandbox, Cuckoo's Sandbox’ın biraz daha gelişmiş bir sürümüdür. Paketlenmiş malware’lerin (packed malware) açılmasına yardımcı olmak için hata ayıklama (debugging) ve bellek dökümü (memory dumping) özelliklerini destekler. (Paketleme ve açma konularını ileri seviye malware analizi modülünde daha detaylı öğreneceğiz.)
Başlangıç seviyesindeki kullanıcılar bu sandbox’ı kullanabilir, ancak tüm özelliklerinden faydalanmak için ileri düzey bilgi gereklidir. Bu sandbox’ın topluluk sürümü çevrim içi olarak mevcuttur ve kurulum yapmadan önce test etmek için kullanılabilir. CAPE Sandbox günümüzde aktif olarak geliştirilmeye devam etmekte olup Python 3 desteğine sahiptir.

Çevrimiçi Sandbox’lar

Bir sandbox kurmak ve bakımını yapmak zaman alıcı bir süreç olabilir. Bu durumu göz önünde bulundurduğumuzda, çevrimiçi sandbox’lar oldukça faydalı olabilir. En yaygın kullanılan çevrimiçi sandbox’lardan bazıları şunlardır:
Çevrimiçi sandbox’lar faydalı araçlar sunsa da, ne yaptığınızdan emin olmadığınız sürece bir örneği çevrimiçi ortama yüklememek en doğru yaklaşımdır. Daha iyi bir yöntem, kullandığınız servis üzerinde örneğin hash değerini arayarak daha önce başka biri tarafından yüklenip yüklenmediğini kontrol etmektir.
Şimdi Hybrid Analysis üzerinde örneğimiz için ne tür ilginç analizler sunduğuna bakalım.

Hybrid Analysis kullanarak örnekleri analiz etme

Hybrid Analysis ana sayfasında bizi aşağıdaki ekran karşılar:
1778926255535.png
Daha önce belirttiğimiz gibi bir örnek dosya yüklemeyeceğiz. Bunun yerine, örneğimizin hash değerini arayacağız. Bu nedenle, bağlı sanal makinedeki WannaCry örneğinin md5sum değerini arayacağız.
Bu arama sonucunda, örneğin daha önce birden fazla kez gönderildiğini göreceğiz ve gönderilmiş sonuçlar arasından seçim yapabiliriz.

1778926272973.png
Bu sonuçlar arasından, Windows 7 64-bit üzerinde gönderilmiş olanı açalım.
1778926286280.png

Örneğe tıkladığımızda yukarıdaki arayüzü göreceğiz. Sağ tarafta, raporun farklı bölümlerini vurgulayan bir gezinme paneli bulunur. Ayrıca sonucun kötü amaçlı (malicious) olduğunu, 100/100 tehdit puanına sahip olduğunu ve %95 antivirüs tespit oranı olduğunu görebiliriz.
Bunun altında, örneğin davranışına genel bir bakış yer alır. Daha aşağıda ise MITRE ATT&CK tekniklerine (MITRE) eşleştirme bölümünü görürüz. “View all details” seçeneğine tıkladığımızda aşağıdaki eşleştirmeleri göreceğiz:

1778926307450.png
Bunun altında, örnekle ilgili bazı göstergeler (indicators), bağlam bilgileri ve bazı statik analiz bilgileri yer alır. Dinamik analiz kısmı ise bunun daha aşağısında bulunur.
1778926319798.png

Bu bölüm, örneğin bir sandbox ortamında çalıştırıldığında gösterdiği davranışlar hakkında bize çok fazla bilgi sağlar. Her bir sürece tıklayarak o süreçle ilgili daha fazla ayrıntı görebiliriz.
Yukarıdaki ekran görüntüsünde özellikle cmd.exe çalıştırmaları dikkat çekicidir. Örneğin, örneğin script dosyaları çalıştırdığını ve yedekleri ile volume shadow copy’leri sildiğini görebiliriz. Bu davranış, fidye yazılımı (ransomware) operatörleri tarafından kurbanın dosyalarını bu kaynaklardan geri yüklemesini engellemek için sıkça uygulanır.
Bu bölümün altında ise örneğin ağ (network) analizi kısmı yer alır:

1778926351055.png

Raporda ayrıca çıkarılmış string’ler (extracted strings) ve çıkarılmış dosyalar (extracted files) da bulunmaktadır. Bunlar, yukarıdaki süreçler bölümünde gördüğümüz batch script’ler hakkında bilgi sağlayabilir.

1778926372997.png
En sonunda topluluk yorumları da yer almaktadır. Gördüğümüz gibi, ele aldığımız teknikleri kullanarak bir malware örneğini oluşturan birçok parçayı ortaya çıkarabiliriz. Ancak bazı durumlarda bu teknikler, bir karar vermek için yetersiz kalabilir. Şimdi, malware analizini zorlaştıran senaryoların neler olduğunu belirlemek için okumaya devam edelim.

Anti-Analysis Teknikleri
Güvenlik araştırmacıları malware’i analiz etmek için teknikler ve araçlar geliştirirken, malware yazarları da bu araçları ve teknikleri etkisiz hale getirmeye çalışmaktadır. Analiz Ettiğimiz malware hakkında çok sayıda bilgi edindik. Ancak malware yazarlarının işimizi zorlaştırmak için kullanabileceği yöntemler de vardır. Aşağıda, malware yazarlarının bu amaçla kullandığı bazı teknikler yer almaktadır.

Paketleme ve Gizleme (Packing ve Obfuscation)

Malware yazarları, analistin işini zorlaştırmak için sıklıkla paketleme (packing) ve gizleme (obfuscation) tekniklerini kullanır. Bir packer, malware’in içeriğini gizler, sıkıştırır veya şifreler. Bu teknikler, malware’in statik olarak analiz edilmesini zorlaştırır.
Özellikle, paketlenmiş bir malware üzerinde string araması yapıldığında önemli bilgiler ortaya çıkmaz. Bu yöntemi kullanmış olan bir Malwareyi analiz edelim
Kod:
user@machine$ strings zmsuz3pinwl
!This program cannot be run in DOS mode.
RichH
.rsrc
.data
.adata
dApB
Qtq5
wn;3b:TC,n
*tVlr
D6j[
^sZ"4V
JIoL
j~AI
tYFu
7^V1
vYB09
"PeHy
M4AF#
3134
%}W\+
3A;a5
dLq<
.

Bu örneğin, büyük ölçüde bizim için fazla bir değer taşımayan rastgele (garbage) string’ler içerdiğini fark edeceğiz. Şimdi başka neler elde edebileceğimizi görmek için örnek üzerinde pecheck çalıştıralım.
Kod:
user@machine$ pecheck zmsuz3pinwl
PE check for 'zmsuz3pinwl':
Entropy: 7.978052 (Min=0.0, Max=8.0)
MD5     hash: 1ebb1e268a462d56a389e8e1d06b4945
SHA-1   hash: 1ecc0b9f380896373e81ed166c34a89bded873b5
SHA-256 hash: 98c6cf0b129438ec62a628e8431e790b114ba0d82b76e625885ceedef286d6f5
SHA-512 hash: 6921532b4b5ed9514660eb408dfa5d28998f52aa206013546f9eb66e26861565f852ec7f04c85ae9be89e7721c4f1a5c31d2fae49b0e7fdfd20451191146614a
 entropy: 7.999788 (Min=0.0, Max=8.0)
 entropy: 7.961048 (Min=0.0, Max=8.0)
 entropy: 7.554513 (Min=0.0, Max=8.0)
.rsrc entropy: 6.938747 (Min=0.0, Max=8.0)
 entropy: 0.000000 (Min=0.0, Max=8.0)
.data entropy: 7.866646 (Min=0.0, Max=8.0)
.adata entropy: 0.000000 (Min=0.0, Max=8.0)
Dump Info:
----------Parsing Warnings----------

Suspicious flags set for section 0. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 1. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 2. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 3. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 4. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 5. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Suspicious flags set for section 6. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.

Imported symbols contain entries typical of packed executables.

Beklendiği gibi, pecheck çıktısına göre çalıştırılabilir dosyanın paketlenmiş (packed) bir executable’a özgü özellikler gösterdiğini görüyoruz. Örnekte .text bölümünün bulunmadığını ve diğer bölümlerin çalıştırma (execute) izinlerine sahip olduğunu fark ederiz. Bu durum, bu bölümlerin ya çalıştırılabilir komutlar içerdiğini ya da çalışma sırasında çalıştırılabilir komutlarla doldurulacağını gösterir.
Ayrıca, önceki örnekte gördüğümüz gibi işlevselliğini ortaya koyabilecek çok sayıda import içermediğini de göreceğiz.Paketlenmiş çalıştırılabilir dosyaların analizinde ilk adım genellikle örneğin paketinin açılmasıdır (unpacking). Bu, ileri seviye bir konudur ve ilerleyen Makalelerimizde ele alınacaktır.

Sandbox Kaçınma (Sandbox Evasion)

Daha önce gördüğümüz gibi, bir örneği analiz etmek için her zaman bir sandbox ortamında çalıştırabiliriz. Birçok durumda bu yöntem, temel statik analiz tekniklerini aşan örnekleri analiz etmemize yardımcı olabilir. Ancak malware yazarları bu süreci zorlaştırmak için bazı yöntemler kullanır. Bu tekniklerden bazıları şunlardır:
  • Uzun uyku (sleep) çağrıları: Malware yazarları, sandbox’ların sınırlı bir süre çalıştığını bilir. Bu nedenle, malware’in çalıştırıldıktan sonra uzun bir süre boyunca herhangi bir aktivite göstermeyecek şekilde programlanmasını sağlarlar. Bu genellikle uzun sleep çağrıları ile yapılır. Amaç, sandbox’ın zaman aşımına uğramasını sağlamaktır.
  • Kullanıcı etkinliği tespiti: Bazı malware örnekleri, zararlı aktiviteleri gerçekleştirmeden önce kullanıcı etkileşimini bekler. Bu tekniğin mantığı, bir sandbox ortamında genellikle gerçek bir kullanıcının olmamasıdır. Bu nedenle fare hareketi veya klavye kullanımı gerçekleşmez. Gelişmiş malware’ler ayrıca otomatik sandbox’larda kullanılan fare hareketi desenlerini de tespit edebilir. Bu yöntem, otomatik sandbox tespitini atlatmak için tasarlanmıştır.
  • Kullanıcı etkinliğini kontrol etme (footprinting): Bazı malware’ler, MS Office geçmişi veya internet tarama geçmişi gibi kullanıcıya ait dosya ve aktiviteleri kontrol eder. Eğer hiç ya da çok az aktivite tespit edilirse, sistemin bir sandbox olduğunu varsayarak çalışmayı durdurabilir.
  • Sanal makineleri tespit etme: Sandbox’lar sanal makineler üzerinde çalışır. Sanal makineler ise malware tarafından tespit edilebilecek bazı izler bırakır. Örneğin, VMware veya VirtualBox üzerinde çalışan sistemlerde bulunan bazı sürücüler, sistemin bir sanal makine olduğunu ele verir. Malware yazarları genellikle sanal makineleri sandbox ile ilişkilendirir ve VM tespit edilirse malware’i çalıştırmayı durdurur.
Yukarıdaki liste tam kapsamlı değildir, ancak malware analizinde nelerle karşılaşabileceğimize dair bir fikir verir. Malware analizine özel gelecekteki bir modülde bu teknikleri ve bu teknikleri kullanan malware’leri tespit etme yöntemlerini daha ayrıntılı olarak ele alacağız Allah’ın izniyle dostlarım.

1778926475128.png
Okuduğunuz için teşekkür ederim



CW-Ommah
Bug Researchers Tim Sundu...


1778926528804.png
 

Ekli dosyalar

  • 1778926172995.png
    1778926172995.png
    48.1 KB · Görüntüleme: 1