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 ) 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 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
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>
1 Yorum
harika bir inceleme hocam teşekkürler