Zararlı Yazılım(Malware) Analizinde Bellek Dökümü(Memory Dump) İnceleme

Bellek dökümü analizi, gerek zararlı yazılımın sistemde gerçekleştirdiği aktivitelerin sistemden bağımsız çalışan araçlarla incelenmesine imkan vermesinden dolayı, gerekse olay incelemelerinde karşılaşıldığı gibi elde zararlının kendisinin değil de bulaştığı sistemin bulunması durumunda analiz imkanı tanımasından dolayı önemli bir zararlı yazılım analiz yöntemi olarak değerlendirilmektedir. Yazıda, örnek sisteme bulaşmış zararlının bellek analizi ile tespit edilmesi senaryosu ele alınmıştır.


Belleğin Önemi


Bilgisayar sistemlerinde normal şartlar altında süreçler(process) çalışmak için işletim sistemi tarafından belleğe yüklenmeye gereksinim duyarlar. Zararlı yazılımlar kendilerini çalışan diğer süreçlerin bellek alanlarına enjekte etmek gibi yöntemler kullansalar da sonuçta bir şekilde bellekte yer edinmeleri gerekir. Bunun sebebi özetlemek gerekirse; günümüz işlemcileri çalıştıracağı kodları(instruction) kendi önbelleğinden çeker. Eğer gerekli alan önbellekte yüklü değilse bu alan bellekten yüklenir. 
Önbellek ve belleğin senkron olmasından dolayı(detaylar için cache write back ve cache write through policy aranabilir) sistemde çalışan süreçlerin aktiviteleri bellek analizi ile tespit edilebilir. Tabi burada bellekteki bazı süreçlerin diske kaydedilip(swapping) bellekten çıkarılmış olma ihtimali de var ancak bu süreçleri de bellek dökümüne dahil etmek döküm alma işlemini gerçekleştiren uygulamanın sorumluluğundadır. Yine detaylar için virtual memory, memory paging, process swapping başlıkları aranılabilir.


Bellek Dökümünün Alınması


Eğer dökümü incelenecek sistem sanal makinada çalışıyorsa sanal makinanın snapshot özelliği kullanılarak sistemin o anki durumu kaydedilir. Kaydedilen snapshot dosyası(vmware için .vmem uzantılı) analizin yapılacağı sisteme kopyalanır.


Windows sistemlerde bellek dökümü almak için MoonSols’un DumpIt (http://www.moonsols.com/2011/07/18/moonsols-dumpit-goes-mainstream/)  uygulaması kullanılabilir. DumpIt, bellek dökümü alınacak sistemde herhangi bir parametreye ihtiyaç duymadan çalıştırılır. Döküm alma işlemi bittiğinde çalıştığı dizinde .raw uzantısına sahip sistemin belleğiyle aynı boyutlarda bir dosya oluşturacaktır. Bu dosya volatility uygulamasının bulunduğu dökümün analiz edileceği sisteme kopyalanır.


Linux sistemlerde ise dd komutu veya memdump uygulaması kullanılabilir. Memdump konsoldan
memdump > dump.mem şeklinde çağırılarak sistemin fiziksel bellek dökümü dump.mem dosyasına kaydedilir. Daha sonra bu dosya analizin yapılacağı sisteme kopyalanır.

Bellek Dökümünden Neler Elde Edilebilir?


  • Hafıza dökümünün alındığı sırada sistemde çalışan süreçlerin listesi
  • Sistemde, dökümün alındığı anda aktif olan veya daha önceki ağ bağlantıları
  • Süreçlerin bellek alanlarına enjekte edilmiş dll dosyaları veya kodlar
  • Süreçlerin yüklediği dlllerin listesi
  • Bir sürecin sahip olduğu handlelar(sistem nesneleri, dosyalar, kayıt defteri girdileri vb.)
  • Bir sürecin bellek alanındaki stringler
  • Sistem clipboardunun içeriği
  • Sisteme bağlı cihazların ve yüklü sürücülerin listesi
  • IDT, SSDT gibi kernel tablolarının/nesnelerinin içeriği
  • Sistemin yaklaşık ekran görüntüsü
  • Açık kullanıcı oturumları


Bellek Dökümünün Analiz Edilmesi


Analiz işlemi için ücretsiz ve çok başarılı bir bellek analiz aracı/frameworkü olan volatility ve eklentileri kullanılmıştır.Volatility https://www.volatilesystems.com/default/volatility adresinden temin edilebilir. Kali’de hali hazırda yüklü gelmektedir ve konsoldan vol komutu ile çalıştırılabilir, ama eklentileri bulabilmesi için çalıştırmadan önce /usr/share/volatility/ dizinine geçilmesi gerekir. İlk olarak
vol -f dump1.vmem imageinfo
komutu ile bellek dökümü hakkında bilgi alınır. Komut
-f dump1.vmem (dump1.vmem adlı bellek döküm dosyası üzerinde)
imageinfo (imageinfo adlı eklentiyi kullan)
şeklinde açıklanabilir. Windows XP SP3 sistemin bellek dökümü için çıktısı şu şekildedir.


Suggested Profile(s) : WinXPSP2x86, WinXPSP3x86 (Instantiated with WinXPSP2x86)
                 AS Layer1 : JKIA32PagedMemoryPae (Kernel AS)
                 ……
         KUSER_SHARED_DATA : 0xffdf0000
       Image date and time : 2013-08-23 09:08:32 UTC+0000
Image local date and time : 2013-08-23 12:08:32 +0300

Bundan sonraki volatility komutları için -f dump1.vmem –profile=WinXPSP3x86 parametrelerinin, ilgili eklentinin adı ve parametreleriyle beraber kullanılarak bellek dökümü ve dökümün ait olduğu sistemin volatility’e bildirilmesi gerekir.


vol -f dump1.vmem –profile=WinXPSP3x86 pslist komutu ile süreçlerin listesi alınır.


….
0x865be658 spoolsv.exe         1380 704 10   136   0   0 2013-08-15 12:22:51                 
0x86144020 explorer.exe        1644   1604 14   438   0   0 2013-08-15 12:22:53                 
0x8634fda0 vmtoolsd.exe        1804   1644   5   253   0   0 2013-08-15 12:22:56                 
0x86488858 svchost.exe         1916 704   5   121   0   0 2013-08-15 12:23:03                 
……
Listenin tamamı incelendiğinde beklenmeyen child processler gibi sıradışı bir şey göze çarpmamakta(explorer.exe nin başlattığı vmtoolsd.exe yi saymazsak), genel olarak normal gözükmektedir. Bir sonraki adımda zararlı yazılımın birşekilde ağ erişimi sağlaması beklendiğinden dolayı connections(aktif bağlantılar) ve connscan(bağlantı geçmişi) komutları ile sistemin ağ haraketleri incelenir.
vol -f dump1.vmem –profile=WinXPSP3x86 connscan


Offset(P)  Local Address          Remote Address         Pid
———- ————————- ————————- —
0x060dc008 192.168.41.139:1551    192.168.41.1:4545      1644
0x060df488 192.168.41.139:1433    192.168.41.1:4545      1644
0x06101630 192.168.41.139:1575    192.168.41.1:4545      1644
0x0610be68 192.168.41.139:1518    192.168.41.1:4545      1644
0x0611ae68 192.168.41.139:1285    192.168.41.1:4545      1644
0x0611c610 192.168.41.139:1526    192.168.41.1:4545      1644
0x0613a738 192.168.41.139:1473    192.168.41.1:4545      1644
0x06223508 192.168.41.139:1610    192.168.41.1:4545      1644
0x06360b40 192.168.41.139:1172    192.168.41.1:4545      2984
0x063743d8 192.168.41.139:1592    192.168.41.1:4545      1644
0x06385620 192.168.41.139:1221    192.168.41.1:4545      2984
…….
0x0643e008 192.168.41.139:1597    192.168.41.1:4545      1644
0x06449e68 192.168.41.139:1319    192.168.41.1:4545      1644
0x0644a008 192.168.41.139:1332    192.168.41.1:4545      1644
0x065da620 192.168.41.139:1248    192.168.41.1:4545      2984
0x066b3cd8 192.168.41.139:1439    192.168.41.1:4545      1644


Bağlantı geçmişinden görüldüğü üzere iki süreç 192.168.41.1 IP’si ile bağlantı kurmuş. 2984 PID’ine(process id) sahip süreç, süreç listesinde olmadığı için hakkında henüz bir bilgi yok fakat 1644 explorer.exe’nin PID’i olmasından dolayı dikkate değer. Explorer.exe’nin ağ aktivitesi göstermesi beklenmeyen bir durumdur. Bu senaryo için zararlının önce 2984 PID’ine sahip süreç olarak veya süreç üzerinden çalıştığı daha sonra kendisini explorer.exe’ye enjekte ettiği hipotezi öne sürülebilir. Bu hipotezi doğrulamak için explorer.exe’yi volatility’nin malfind eklentisi ile analiz edip enjekte edilen kodları görülebilir. Malfind dll/code injection gibi zararlıların çok sık kullandığı yöntemleri tespit etmekte kullanılabilecek bir eklentidir.


root@hb:/usr/share/volatility# vol -f dump1.vmem –profile=WinXPSP3x86 malfind -p 1644 -D ~/Desktop/
komutu ile enjekte edilen kodların kaydedileceği dizin ve incelenecek sürecin PID’i belirtilerek malfind çalıştırılır. Örnekte


process.0x86144020.0x22f0000.dmp
process.0x86144020.0x24b0000.dmp
process.0x86144020.0x2730000.dmp
process.0x86144020.0x27a0000.dmp


isimlerinde dört dosya elde edilmiştir. Bu aşamada dosyaları virustotal gibi online tarama hizmetleri ile analiz etmek daha önceden tanımlanmış zararlılar için sonuç verebilir. Strings komutu ile (windowsta da strings isimli bir uygulama mevcut) dosyaların içindeki okunabilir stringleri incelemek atılacak ilk adımlardan biri olabilir. Örnek dosyalar incelendiğinde ilk göze çarpan


METERPRETER_TRANSPORT_HTTP
http://192.168.41.1:4545/iEZZ_rJQzeRi8vUx5v6pn/


stringleridir. Eldeki verilere dayanarak explorer.exe’ye 192.168.41.1 ipsinin 4545 portuna bağlanacak şekilde ayarlanmış meterpreter reverse http  payloadı kullanıldığı söylenebilir. Dosya üzerinde daha detaylı incelemeler gelişmiş statik ve dinamik analiz yöntemleri kullanılarak gerçekleştirilebilir.
vol -f dump1.vmem –profile=WinXPSP3x86 handles -p 1644 -s -t Mutant
komutu ile explorer.exe’nin kullandığı mutex’ler listelenerek


….
0x864884c8   1644   0x5c8   0x100000 Mutant       _!MSFTHISTORY!_
0x866fd9d8   1644   0x5cc   0x1f0001 Mutant        HGFSMUTEX
0x86217e48   1644   0x5e4   0x1f0001 Mutant        c:!documents and settings!mw2!local settings!temporary internet files!content.ie5!
0x86258318   1644   0x5f0   0x1f0001 Mutant        c:!documents and settings!mw2!cookies!
0x86258368   1644   0x5fc   0x1f0001 Mutant        c:!documents and settings!mw2!local settings!history!history.ie5!
0x86359e58   1644   0x608   0x100000 Mutant       WininetStartupMutex
0x863825f8   1644   0x61c   0x1f0001 Mutant        WininetConnectionMutex
0x86359dc8   1644   0x620   0x100000 Mutant       WininetProxyRegistryMutex
0x86252368   1644   0x62c   0x100000 Mutant       RasPbFile


RasPbFile isminde beklenmeyen bir mutexin handleına sahip olduğu görülür. Bu isim arama motorlarında aratıldığında yine meterpreter tarafından kullanıldığı görülmektedir.


Zararlı yazılımın meterpreter olduğu tespit edildikten sonra olay bir adım daha ileri götürülüp meterpreter aracılığıyla hangi komutların çalıştırıldığı belirlenebilir.
root@hb:/usr/share/volatility# vol -f dump1.vmem –profile=WinXPSP3x86 memdump -p 1644 -D ~/Desktop/
komutu ile explorer.exe nin tüm bellek alanı 1644.dmp isimli dosyaya kaydedilir.
strings 1644.dmp > dump.txt  şeklinde içerisindeki stringler dump.txt dosyasına kaydedilip gedit gibi bir text editörle incelenir. Sistemde yüklü meterpreter’ın HTTP üzerinden saldırganla bağlantı kurduğu bilindiğinden; “Host:”, “HTTP” gibi anahtar kelimeler aranarak dosyadaki(bellekteki) HTTP istekleri bulunup incelenir. Örnek dosyadaki incelemede saldırganın kullandığı saptanan farklı komutlar şunlardır.


HTTP isteği Meterpreter Karşılığı
stdapi_sys_config_getprivs getsystem
stdapi_sys_process_getpid ps
stdapi_sys_process_kill kill pid
stdapi_sys_config_sysinfo sysinfo
priv_passwd_get_sam_hashes hashdump

Komutların başarıyla çalışması sonucu saldırgana dönen cevaplar da HTTP isteklerinde görülebilir. Volatility’nin bu yazıda değinilmeyen ama bellek dökümü analizinde faydalı olabilecek farklı birçok eklentisi mevcuttur. Volatility’nin kendi yardım çıktısından veya wiki sayfasından farklı eklentileri inceleyip denemek faydalı olacaktır.

Onur ALANBEL <onur.alanbel@bga.com.tr>