17 Nisan 2014

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?

  1.         Hafıza dökümünün alındığı sırada sistemde çalışan süreçlerin listesi
  2.         Sistemde, dökümün alındığı anda aktif olan veya daha önceki ağ bağlantıları
  3.         Süreçlerin bellek alanlarına enjekte edilmiş dll dosyaları veya kodlar
  4.         Süreçlerin yüklediği dlllerin listesi
  5.         Bir sürecin sahip olduğu handlelar(sistem nesneleri, dosyalar, kayıt defteri girdileri vb.)
  6.         Bir sürecin bellek alanındaki stringler
  7.         Sistem clipboardunun içeriği
  8.         Sisteme bağlı cihazların ve yüklü sürücülerin listesi
  9.         IDT, SSDT gibi kernel tablolarının/nesnelerinin içeriği
  10.         Sistemin yaklaşık ekran görüntüsü
  11.         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.

0 yorum:

Yorum Gönder

Her türlü eleştiri,yorum,ekleme ve düzeltmeye yönelik fikirlerinizi paylaşabilirsiniz.Hakaret içeren yorumlar filtrelenmektedir.

Makalelerin kötüye kullanım kullanıcının sorumluluğundadır. | networkpentest.net. Blogger tarafından desteklenmektedir.