Volatility, Python ile yazılmış açık kaynak kodlu bir memory forensics (framework) çatısıdır. Volatility, 32 ve 64 bit Windows, Linux, OSX, Android platformların memory dump (bellek dökümü) dosyalarını analiz edebiliyor ve aynı zamanda Windows, Linux, OSX platformlarında analiz yapmamıza da olanak sağlıyor. [1]

Öncelikle elimizde analizini yapacağımız sistemin bir bellek dökümü dosyasının olması gerekiyor. Analiz etmek istediğiniz sistem Windows ise, bellek dökümünü MoolSols firmasının Windows Memory Toolkit ürününün free versiyonu yardımı ile alabilirsiniz. [2] *nix sistemler üzerinde bellek dökümü almak için ise fmem aracını kullanabilirsiniz. [3] [3.1]

Bu yazıda örnek olarak ZeuS zararlı yazılımının bulaşmış olduğu bir makinanın bellek dökümünü Volatility ile inceleyeceğiz. Örnek dosyayı bu bağlantıdan indirebilirsiniz.

-- http://publish.boateknoloji.com/wp-content/uploads/2014/01/zeus.vmem.zip

 

Volatility’nin düzgün çalışabilmesi için sisteminizde bazı araçların kurulu olması gerekiyor. Bunlar Distorm3, Yara, PyCrypto, PIL ve OpenPyxl [4]. Volatility’i sisteminize indirmek için aşağıdaki komutu kullanabilirsiniz. Herhangi bir kuruluma gerek kalmadan ~/Volatility dizini içinde çalışır hale gelecektir.

$ svn checkout http://volatility.googlecode.com/svn/trunk Volatility

 

Volatility’nin çalışma yapısını ve şablonunu inceleyelim.

$ python vol.py [PLUGIN] -f [IMAGE] --profile=[PROFILE]

 

İlk olarak ‘python vol.py’ komutu ile Volatility’nin çalışmasını sağlıyoruz. Devamında ise Volatility’nin işlem yapabilmesi için bizden beklediği parametreleri giriyoruz. Bunlar;

[PLUGIN]: Volatility’nin hangi eklentisini kullanmak istediğimizi,

-f [IMAGE]: Hangi bellek dökümü dosyası üzerinde işlem yapmak istediğimizi,

--profile=[PROFILE]: Hangi profilde analiz yapmak istediğimizi belirtir. (Volatility genel olarak profili belirtmeden de işlem yapabiliyor. Ancak daha iyi sonuçlar alabilmek için profili belirtmemiz gerekir.)

 

Eklentiler, profiller gibi diğer bütün objeler hakkında bilgi almak için aşağıdaki komutu çalıştırabilirsiniz.

$ python vol.py --info

 

Tüm komutlar ve seçenekleri görmek için ise aşağıdaki komutu çalıştırmanız yeterli olacaktır.

$ python vol.py -h

 

Bir plugin hakkında detaylı bilgi almak için de aşağıdaki komutu kullanabilirsiniz.

$ python vol.py [PLUGIN] -h

 

Eğer her seferinde profil tanımlaması ve bellek dökümü dosyasının yolu gibi parametreleri belirtmek istemiyorsanız Volatility için ortam değişkenleri (environment variable) tanımlayabilirsiniz.

Profil değişkeni atamak için:

$ export VOLATILITY_PROFILE=[PROFILE]

 

Dosya yolu değişkeni atamak için:

$ export VOLATILITY_LOCATION=file:///[PATH]

 

komutlarını kullanabilirsiniz. Bu değişkenleri atadıktan sonra aşağıdaki gibi basit ve sade bir şekilde Volatility’i çalıştırabilirsiniz.

$ python vol.py [PLUGIN]

 

Eğer daha spesifik bir konfigürasyon yapmak istiyorsanız bunu .volatilityrc dosyası ile yapabilirsiniz. .volatilityrc dosyası standart olarak kullanıcının ana dizininde algılanır. Eğer farklı bir dizindeki .volatilityrc dosyası ile işlem yapmak istiyorsanız bunun için aşağıdaki komutu kullanmalısınız.

$ python vol.py --conf-file:[PATH]

 

.volatilityrc dosyasının içeriği şuna benzemektedir:

[DEFAULT]
PROFILE=[PROFILE]
LOCATION=file:///[PATH]

 

Not: Eğer ortam değişkeni tanımladıysanız .volatilityrc dosyası ile çakışma yaşanabiliyor, .volatilityrc dosyasını kullanmak istiyorsanız önce ortam değişkenlerini unset komutu ile kaldırmanız gerekiyor.

$ unset VOLATILITY_PROFILE$ unset VOLATILITY_LOCATION

 

Volatility’den temel olarak bahsettik, şimdi bellek dökümü dosyamız üzerinde Volatility’nin bir kaç plugininden bahsedelim. Öncelikle imageinfo pluginini kullanarak başlayacağız. imageinfo, bellek dökümü dosyamız hakkında bize aşağıdaki gibi detaylı bir bilgi sunacaktır.

$ python vol.py -f ~/sample/zeus.vmem imageinfo

 

imageinfo

Burada Suggested Profile(s) kısmında gördüğümüz gibi Volatility bize iki profil önerdi. Bu profilleri belirterek, Volatility’nin belirtmiş olduğumuz profile göre işlem yapmasını sağlayabiliriz.

Diğer bir pluginimiz pslist bellek dökümünü almış olduğumuz sistemde o anda çalışan tüm işlemlerin (process) listesini detayları ile birlikte getiriyor.

$ python vol.py -f ~/sample/zeus.vmem pslist

 

pslist

pstree plugini ise o anki çalışan işlemlerin listesini bir işlem ağacı şeklinde getiriyor.

$ python vol.py -f ~/sample/zeus.vmem pstree

 

pstree

 

psxview plugini PsActiveProcessHead içeriği ile çeşitli diğer kaynakların raporladıkları işlem listelerinin neler olduğunu karşılaştırarak gizli işlemleri tespit etmemize yardımcı oluyor.

psxview

devicetree plugini ile sistemde bulunan aygıtların listesini ağaç şeklinde görebiliyoruz.

$ python vol.py -f ~/sample/zeus.vmem devicetree

 

devicetree

 connscan plugini ile sistemden dışarıya herhangi bir bağlantı olup olmadığını tarayabiliyoruz.

$ python vol.py -f ~/sample/zeus.vmem connscan

 

connscan

 

apihooks plugini, işlemlerde ve çekirdek belleğinde (kernel memory) herhangi bir hooking [5] olup olmadığını kontrol eder ve var ise bunları gösterir.

$ python vol.py -f ~/sample/zeus.vmem apihooks

 

Belirli bir işleme ait hooking olup olmadığını kontrol etmek için ise apihooks pluginine -p [PID] parametresini ekliyoruz.

$ python vol.py -f ~/sample/zeus.vmem apihooks -p 856

 

apihooks

threads plugini, bize eğer mevcutsa her iş parçacığının (threads) kayıtlarının içeriği de dahil olmak üzere, iş parçacığının başlangıç adresinde bulunan kodun disassemblysi ve analizle ilgili olabilecek çeşitli diğer alanlarda geniş bir bilgi verir.

$ python vol.py -f ~/sample/zeus.vmem threads

 

threads

threads plugini için bazı filtreler uygulayabilirsiniz, bunların listesini görmek için threads pluginini -L parametresi ile birlikte çalıştırın.

$ python vol.py threads -L

 

threads-L

Çıktıda bulunan filtreleri -F [FILTERNAME] parametresi ile kullanabilirsiniz.

threads-F_System

thrdscan pluginini, fiziksel bellekteki ETHREAD nesneleri ve (ETHREAD bir ana işlem esaslı olduğundan) gizli işlemleri taramak için kullanabilirsiniz.

$ python vol.py -f ~/sample/zeus.vmem thrdscan

thrdscan

malfind plugini gizli veya kod enjekte edilmiş DLL dosyalarını bulmamıza yardımcı olur ve -D [PATH] parametresini de beraberinde vermemizle birlikte bulguları bir dump dosyasına kaydeder. malfind pluginini tek bir işlem (process) için kullanmak istiyorsak -p [PID] parametresini de vermemiz gerekiyor.

$ python vol.py -f ~/sample/zeus.vmem malfind -D ~/dumps -p 856

 

malfind

clipboard plugini kullanıcıların panolarındaki veriyi geri getirmek için kullanılır.

$ python vol.py -f ~/sample/zeus.vmem clipboard

 

clipboard

screenshot plugini, sistemin ekran görüntüsünü wire-frame diagram şeklinde bize verir. screenshot pluginine -D [PATH] parametresi ile ekran görüntülerinin nereye kaydedileceğini belirtiyoruz.

$ python vol.py -f ~/sample/zeus.vmem screenshot -D ~/screenshots

 

screenshot

Kaydedilen ekran görüntüleri aşağıdakine benzer şekilde olacaktır.

screenshot-preview

 

cmdscan plugini, saldırganların konsol kabuğunu (cmd.exe) kullanarak girdikleri komutlar için bellekte arama yapar.

$ python vol.py -f ~/sample/zeus.vmem cmdscan

 

cmdscan

Bazı komutlara böylece değinmiş olduk, şimdi adım adım elimizdeki bellek dökümü dosyasının analizini yapalım.

Öncelikle elimizdeki bellek dökümü dosyası hakkında bilgi edinerek başlıyoruz.

$ python vol.py -f ~/sample/zeus.vmem imageinfo

imageinfo

Komutu çalıştırdıktan sonraki çıktıyı incelediğimizde Volatility bize sistemin WinXPSP2x86 veya WinXPSP3x86 profilinde olabileceği önerisinde bulunuyor. Bellek dökümünün alındığı tarih ve yerel zaman da çıktıda belirtilmiş.

Biz herhangi bir profil ataması yapmadan analizimize devam edeceğiz. Sistemde herhangi şüpheli bir işlemin çalışıp çalışmadığını kontrol etmek üzere pslist pluginini kullanarak çalışan tüm işlemlerin listesini alıyoruz.

$ python vol.py -f ~/sample/zeus.vmem pslist

 

pslist

İlk bakışta göze çarpan, şüpheli gibi görünen bir işlem görünmüyor. İncelemeye devam edelim. connscan plugini ile herhangi aktif bir bağlantı olup olmadığını kontrol edelim.

$ python vol.py -f ~/sample/zeus.vmem connscan

 

connscan

Çıktıyı incelediğimizde 856 işlem numarasına (PID) sahip işlemin, 172.16.176.143 IP numarasına sahip yerel adresin 1054/TCP, 0.0.0.0 IP numarasına sahip yerel adresin de 1056/TCP portu üzerinden; 193.104.41.75 IP numarasına sahip uzak sunucunu ile 80/TCP portu üzerinden iletişimde olduğunu görüyoruz.

193.104.41.75 IP adresi hakkında bilgi edinelim. (http://www.whois.sc/193.104.41.75)

Daha önceki pslist pluginine ait çıktımızdan 856 işlem numarasına sahip işlemin svchost.exe olduğunu biliyoruz. pstree pluginini kullanarak svchost.exe’nin işlem ağacındaki yerine gözatalım.

$ python vol.py -f ~/sample/zeus.vmem pstree

 

pstree

 

Çıktıyı incelediğimizde svchost.exe’nin services.exe altında çalışan bir işlem olduğunu görüyoruz. svchost.exe için malfind pluginini kullanarak enfekte olmuş mu kontrol edelim. malfind pluginine -D [PATH] parametresi ile dump dosyasının nereye çıkarılacağını ve -p [PID] parametresi ile de hangi işlem üzerinde çalışacağımızı belirtiyoruz.

$ python vol.py -f ~/sample/zeus.vmem malfind -D ~/dumps -p 856

 

malfind-p856

Dump dosyalarımızın kaydedildiği dizine bir gözatalım.

$ ls ~/dumps

ls-dumps

Gördüğümüz gibi malfind plugini process.0x80ff88d8.0xb70000, process.0x80ff88d8.0xcb0000 isimli iki .dmp dosyası oluşturmuş. Bu oluşturulan .dmp dosyalarını VirusTotal aracılığıyla tarayalım.

 

virustotal-1

 

virustotal-2

 

VirusTotal process.0x80ff88d8.0xb70000.dmp dosyasının enfekte olduğunu tespit etti. Diğer detaylar için bu bağlantıyı https://www.virustotal.com/en/file/8e3be5dc65aa35d68fd2aba1d3d9bf0f40d5118fe22eb2e6c97c8463bd1f1ba1/analysis/ kullanabilirsiniz.

Hazırlayan

Mustafa KISA <mustafa.kisa@boateknoloji.com>

Bağlantılar

[1] -- Volatility -- An Advanced Memory Forensics Framework: https://code.google.com/p/volatility

[2] -- MoonSols Windows Memory Toolkit: http://www.moonsols.com/windows-memory-toolkit

[3] -- fmem Tool: http://hysteria.sk/~niekt0/fmem

[3.1] -- Doc (6.2 fmem module): http://hysteria.sk/~niekt0/fmem/doc/foriana.pdf

[4] -- Volatility Recommented Packages: https://code.google.com/p/volatility/wiki/VolatilityInstallation#Recommended_packages

[5] -- Hooking: http://en.wikipedia.org/wiki/Hooking