Volatility - CheatSheet

Reading time: 20 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

Eğer farklı tarama seviyeleri ile bellek analizini otomatikleştiren ve birden fazla Volatility3 eklentisini paralel olarak çalıştıran bir araca ihtiyacınız varsa, autoVolatility3 kullanabilirsiniz:: https://github.com/H3xKatana/autoVolatility3/

bash
# Full scan (runs all plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s full

# Minimal scan (runs a limited set of plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s minimal

# Normal scan (runs a balanced set of plugins)
python3 autovol3.py -f MEMFILE -o OUT_DIR -s normal

Eğer birkaç Volatility eklentisini paralel olarak başlatacak hızlı ve çılgın bir şeye ihtiyacınız varsa şunu kullanabilirsiniz: https://github.com/carlospolop/autoVolatility

bash
python autoVolatility.py -f MEMFILE -d OUT_DIRECTORY -e /home/user/tools/volatility/vol.py # It will use the most important plugins (could use a lot of space depending on the size of the memory)

Kurulum

volatility3

bash
git clone https://github.com/volatilityfoundation/volatility3.git
cd volatility3
python3 setup.py install
python3 vol.py —h

volatility2

Download the executable from https://www.volatilityfoundation.org/26

Volatility Komutları

Resmi belgeye Volatility komut referansı bağlantısından erişebilirsiniz.

“list” ve “scan” eklentileri hakkında bir not

Volatility, bazen isimlerinde yansıyan iki ana eklenti yaklaşımına sahiptir. “list” eklentileri, süreçler gibi bilgileri almak için Windows Kernel yapıları arasında gezinmeye çalışır (bellekteki _EPROCESS yapılarının bağlı listesini bulma ve yürütme), OS handle'ları (handle tablosunu bulma ve listeleme, bulunan herhangi bir işaretçiyi çözme vb.). İstenirse, örneğin, süreçleri listelemek için Windows API'sinin davranışına benzer şekilde çalışırlar.

Bu, “list” eklentilerini oldukça hızlı hale getirir, ancak kötü amaçlı yazılımlar tarafından manipülasyona karşı Windows API'si kadar savunmasızdırlar. Örneğin, kötü amaçlı yazılım DKOM kullanarak bir süreci _EPROCESS bağlı listesinden ayırırsa, bu süreç Görev Yöneticisi'nde görünmeyecek ve pslist'te de görünmeyecektir.

Diğer yandan, “scan” eklentileri, bellekten belirli yapılar olarak çözümlendiğinde anlamlı olabilecek şeyleri kazıma yaklaşımını benimser. Örneğin, psscan bellek okur ve ondan _EPROCESS nesneleri oluşturmaya çalışır (ilgi çekici bir yapının varlığını gösteren 4 baytlık dizeleri arayan havuz etiketi taraması kullanır). Avantajı, çıkmış süreçleri bulabilmesidir ve kötü amaçlı yazılım _EPROCESS bağlı listesiyle oynasa bile, eklenti hala bellekte yatan yapıyı bulacaktır (çünkü sürecin çalışması için hala var olması gerekir). Dezavantajı ise, “scan” eklentilerinin “list” eklentilerinden biraz daha yavaş olması ve bazen yanlış pozitifler verebilmesidir (çok uzun süre önce çıkmış ve yapısının bazı kısımları diğer işlemler tarafından üzerine yazılmış bir süreç).

Kaynak: http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/

OS Profilleri

Volatility3

Readme içinde açıklandığı gibi, desteklemek istediğiniz OS'nin sembol tablosunu volatility3/volatility/symbols içine koymanız gerekir.
Çeşitli işletim sistemleri için sembol tablosu paketleri indirilebilir olarak mevcuttur:

Volatility2

Harici Profil

Desteklenen profillerin listesini almak için:

bash
./volatility_2.6_lin64_standalone --info | grep "Profile"

Eğer indirdiğiniz yeni bir profili (örneğin bir linux profili) kullanmak istiyorsanız, aşağıdaki klasör yapısını bir yere oluşturmanız gerekiyor: plugins/overlays/linux ve bu klasörün içine profili içeren zip dosyasını koymalısınız. Ardından, profillerin numarasını almak için:

bash
./vol --plugins=/home/kali/Desktop/ctfs/final/plugins --info
Volatility Foundation Volatility Framework 2.6


Profiles
--------
LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 - A Profile for Linux CentOS7_3.10.0-123.el7.x86_64_profile x64
VistaSP0x64                                   - A Profile for Windows Vista SP0 x64
VistaSP0x86                                   - A Profile for Windows Vista SP0 x86

Linux ve Mac profillerini indirebilirsiniz https://github.com/volatilityfoundation/profiles

Önceki bölümde profilin LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 olarak adlandırıldığını görebilirsiniz ve bunu şu şekilde bir şey yürütmek için kullanabilirsiniz:

bash
./vol -f file.dmp --plugins=. --profile=LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64 linux_netscan

Profil Keşfet

volatility imageinfo -f file.dmp
volatility kdbgscan -f file.dmp

imageinfo ve kdbgscan arasındaki farklar

Buradan: Sadece profil önerileri sunan imageinfo'nun aksine, kdbgscan doğru profili ve doğru KDBG adresini (birden fazla varsa) kesin olarak tanımlamak için tasarlanmıştır. Bu eklenti, Volatility profilleriyle bağlantılı KDBGHeader imzalarını tarar ve yanlış pozitifleri azaltmak için mantık kontrolleri uygular. Çıktının ayrıntı seviyesi ve gerçekleştirilebilecek mantık kontrolü sayısı, Volatility'nin bir DTB bulup bulamamasına bağlıdır, bu nedenle doğru profili zaten biliyorsanız (veya imageinfo'dan bir profil öneriniz varsa), bunu kullanmayı unutmayın.

Her zaman kdbgscan'ın bulduğu süreç sayısına bakın. Bazen imageinfo ve kdbgscan birden fazla uygun profil bulabilir, ancak yalnızca geçerli olanın bazı süreçlerle ilişkili olacaktır (Bu, süreçleri çıkarmak için doğru KDBG adresinin gerekli olmasından kaynaklanmaktadır).

bash
# GOOD
PsActiveProcessHead           : 0xfffff800011977f0 (37 processes)
PsLoadedModuleList            : 0xfffff8000119aae0 (116 modules)
bash
# BAD
PsActiveProcessHead           : 0xfffff800011947f0 (0 processes)
PsLoadedModuleList            : 0xfffff80001197ac0 (0 modules)

KDBG

KDBG olarak adlandırılan kernel debugger block, Volatility ve çeşitli hata ayıklayıcılar tarafından gerçekleştirilen adli görevler için kritik öneme sahiptir. KdDebuggerDataBlock olarak tanımlanan ve _KDDEBUGGER_DATA64 türünde olan bu blok, PsActiveProcessHead gibi temel referanslar içerir. Bu özel referans, tüm süreçlerin listelenmesini sağlayarak, kapsamlı bellek analizi için temel olan süreç listesinin başını işaret eder.

OS Bilgisi

bash
#vol3 has a plugin to give OS information (note that imageinfo from vol2 will give you OS info)
./vol.py -f file.dmp windows.info.Info

Eklenti banners.Banners, dökümde linux banner'larını bulmak için vol3'te kullanılabilir.

Hashler/Parolalar

SAM hash'lerini, alan önbellekli kimlik bilgilerini ve lsa sırlarını çıkarın.

bash
./vol.py -f file.dmp windows.hashdump.Hashdump #Grab common windows hashes (SAM+SYSTEM)
./vol.py -f file.dmp windows.cachedump.Cachedump #Grab domain cache hashes inside the registry
./vol.py -f file.dmp windows.lsadump.Lsadump #Grab lsa secrets

Bellek Dökümü

Bir sürecin bellek dökümü, sürecin mevcut durumunun her şeyini çıkaracaktır. procdump modülü yalnızca kodu çıkaracaktır.

volatility -f file.dmp --profile=Win7SP1x86 memdump -p 2168 -D conhost/

Süreçler

Süreçleri listele

Şüpheli süreçleri (isimle) veya beklenmedik çocuk süreçleri (örneğin, iexplorer.exe'nin bir çocuğu olarak bir cmd.exe) bulmaya çalışın.
Gizli süreçleri tanımlamak için pslist'in sonucunu psscan ile karşılaştırmak ilginç olabilir.

bash
python3 vol.py -f file.dmp windows.pstree.PsTree # Get processes tree (not hidden)
python3 vol.py -f file.dmp windows.pslist.PsList # Get process list (EPROCESS)
python3 vol.py -f file.dmp windows.psscan.PsScan # Get hidden process list(malware)

Dump proc

bash
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory

Komut satırı

Şüpheli bir şey çalıştırıldı mı?

bash
python3 vol.py -f file.dmp windows.cmdline.CmdLine #Display process command-line arguments

cmd.exe içinde yürütülen komutlar conhost.exe (veya Windows 7'den önceki sistemlerde csrss.exe) tarafından yönetilmektedir. Bu, eğer bir saldırgan cmd.exe'yi bir bellek dökümü alınmadan önce sonlandırırsa, conhost.exe'nin belleğinden oturumun komut geçmişini geri kazanmanın hala mümkün olduğu anlamına gelir. Bunu yapmak için, konsolun modülleri içinde olağandışı bir etkinlik tespit edilirse, ilişkili conhost.exe sürecinin belleği dökülmelidir. Ardından, bu döküm içinde strings arayarak, oturumda kullanılan komut satırları potansiyel olarak çıkarılabilir.

Ortam

Her çalışan sürecin çevre değişkenlerini alın. Bazı ilginç değerler olabilir.

bash
python3 vol.py -f file.dmp windows.envars.Envars [--pid <pid>] #Display process environment variables

Token ayrıcalıkları

Beklenmedik hizmetlerde ayrıcalıklı token'leri kontrol edin.
Bazı ayrıcalıklı token kullanan süreçleri listelemek ilginç olabilir.

bash
#Get enabled privileges of some processes
python3 vol.py -f file.dmp windows.privileges.Privs [--pid <pid>]
#Get all processes with interesting privileges
python3 vol.py -f file.dmp windows.privileges.Privs | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"

SIDs

Bir süreç tarafından sahip olunan her SSID'yi kontrol edin.
Bir ayrıcalık SID'si kullanan süreçleri (ve bazı hizmet SID'si kullanan süreçleri) listelemek ilginç olabilir.

bash
./vol.py -f file.dmp windows.getsids.GetSIDs [--pid <pid>] #Get SIDs of processes
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services

Handle'lar

Bir işlemin bir handle'ı olduğu (açtığı) diğer dosyalara, anahtarlara, iş parçacıklarına, süreçlere... hangi dosyaların olduğunu bilmek faydalıdır.

bash
vol.py -f file.dmp windows.handles.Handles [--pid <pid>]

DLL'ler

bash
./vol.py -f file.dmp windows.dlllist.DllList [--pid <pid>] #List dlls used by each
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory process

Süreç başına dizgiler

Volatility, bir dizginin hangi işleme ait olduğunu kontrol etmemizi sağlar.

bash
strings file.dmp > /tmp/strings.txt
./vol.py -f /tmp/file.dmp windows.strings.Strings --strings-file /tmp/strings.txt

Ayrıca, yarascan modülünü kullanarak bir süreç içinde dizeleri aramayı da sağlar:

bash
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-rules "https://" --pid 3692 3840 3976 3312 3084 2784
./vol.py -f file.dmp yarascan.YaraScan --yara-rules "https://"

UserAssist

Windows, çalıştırdığınız programları UserAssist anahtarları adı verilen kayıt defteri özelliği ile takip eder. Bu anahtarlar, her programın kaç kez çalıştırıldığını ve en son ne zaman çalıştırıldığını kaydeder.

bash
./vol.py -f file.dmp windows.registry.userassist.UserAssist

Hizmetler

bash
./vol.py -f file.dmp windows.svcscan.SvcScan #List services
./vol.py -f file.dmp windows.getservicesids.GetServiceSIDs #Get the SID of services

bash
./vol.py -f file.dmp windows.netscan.NetScan
#For network info of linux use volatility2

Kayıt hives

Mevcut hives'ları yazdır

bash
./vol.py -f file.dmp windows.registry.hivelist.HiveList #List roots
./vol.py -f file.dmp windows.registry.printkey.PrintKey #List roots and get initial subkeys

Bir değer al

bash
./vol.py -f file.dmp windows.registry.printkey.PrintKey --key "Software\Microsoft\Windows NT\CurrentVersion"

Dump

bash
#Dump a hive
volatility --profile=Win7SP1x86_23418 hivedump -o 0x9aad6148 -f file.dmp #Offset extracted by hivelist
#Dump all hives
volatility --profile=Win7SP1x86_23418 hivedump -f file.dmp

Dosya Sistemi

Bağlama

bash
#See vol2

Tarama/döküm

bash
./vol.py -f file.dmp windows.filescan.FileScan #Scan for files inside the dump
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --physaddr <0xAAAAA> #Offset from previous command

Ana Dosya Tablosu

bash
# I couldn't find any plugin to extract this information in volatility3

NTFS dosya sistemi, master file table (MFT) olarak bilinen kritik bir bileşen kullanır. Bu tablo, bir hacimdeki her dosya için en az bir giriş içerir ve MFT'nin kendisini de kapsar. Her dosya hakkında boyut, zaman damgaları, izinler ve gerçek veriler gibi hayati bilgiler, MFT girişlerinde veya bu girişler tarafından referans verilen MFT dışındaki alanlarda kapsüllenmiştir. Daha fazla bilgi için resmi belgeleri inceleyebilirsiniz.

SSL Anahtarları/Sertifikaları

bash
#vol3 allows to search for certificates inside the registry
./vol.py -f file.dmp windows.registry.certificates.Certificates

Kötü Amaçlı Yazılım

bash
./vol.py -f file.dmp windows.malfind.Malfind [--dump] #Find hidden and injected code, [dump each suspicious section]
#Malfind will search for suspicious structures related to malware
./vol.py -f file.dmp windows.driverirp.DriverIrp #Driver IRP hook detection
./vol.py -f file.dmp windows.ssdt.SSDT #Check system call address from unexpected addresses

./vol.py -f file.dmp linux.check_afinfo.Check_afinfo #Verifies the operation function pointers of network protocols
./vol.py -f file.dmp linux.check_creds.Check_creds #Checks if any processes are sharing credential structures
./vol.py -f file.dmp linux.check_idt.Check_idt #Checks if the IDT has been altered
./vol.py -f file.dmp linux.check_syscall.Check_syscall #Check system call table for hooks
./vol.py -f file.dmp linux.check_modules.Check_modules #Compares module list to sysfs info, if available
./vol.py -f file.dmp linux.tty_check.tty_check #Checks tty devices for hooks

{{#endtab}}

{{#tab name="vol2"}}

bash
volatility --profile=Win7SP1x86_23418 -f file.dmp malfind [-D /tmp] #Find hidden and injected code [dump each suspicious section]
volatility --profile=Win7SP1x86_23418 -f file.dmp apihooks #Detect API hooks in process and kernel memory
volatility --profile=Win7SP1x86_23418 -f file.dmp driverirp #Driver IRP hook detection
volatility --profile=Win7SP1x86_23418 -f file.dmp ssdt #Check system call address from unexpected addresses

volatility --profile=SomeLinux -f file.dmp linux_check_afinfo
volatility --profile=SomeLinux -f file.dmp linux_check_creds
volatility --profile=SomeLinux -f file.dmp linux_check_fop
volatility --profile=SomeLinux -f file.dmp linux_check_idt
volatility --profile=SomeLinux -f file.dmp linux_check_syscall
volatility --profile=SomeLinux -f file.dmp linux_check_modules
volatility --profile=SomeLinux -f file.dmp linux_check_tty
volatility --profile=SomeLinux -f file.dmp linux_keyboard_notifiers #Keyloggers

{{#endtab}} {{#endtabs}}

Yara ile Tarama

Tüm yara kötü amaçlı yazılım kurallarını github'dan indirmek ve birleştirmek için bu scripti kullanın: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
rules dizinini oluşturun ve çalıştırın. Bu, kötü amaçlı yazılım için tüm yara kurallarını içeren malware_rules.yar adlı bir dosya oluşturacaktır.

bash
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py
#Only Windows
./vol.py -f file.dmp windows.vadyarascan.VadYaraScan --yara-file /tmp/malware_rules.yar
#All
./vol.py -f file.dmp yarascan.YaraScan --yara-file /tmp/malware_rules.yar

MISC

Dış eklentiler

Dış eklentileri kullanmak istiyorsanız, eklentilerle ilgili klasörlerin kullanılan ilk parametre olduğundan emin olun.

bash
./vol.py --plugin-dirs "/tmp/plugins/" [...]

Autoruns

https://github.com/tomchop/volatility-autoruns adresinden indirin.

volatility --plugins=volatility-autoruns/ --profile=WinXPSP2x86 -f file.dmp autoruns

Mutexes

./vol.py -f file.dmp windows.mutantscan.MutantScan

Sembolik Bağlantılar

bash
./vol.py -f file.dmp windows.symlinkscan.SymlinkScan

Bash

Bellekten bash geçmişini okumak mümkündür. Ayrıca .bash_history dosyasını da dökebilirsiniz, ancak bu devre dışı bırakıldı, bu nedenle bu volatility modülünü kullanabileceğiniz için mutlu olacaksınız.

./vol.py -f file.dmp linux.bash.Bash

Zaman Çizelgesi

bash
./vol.py -f file.dmp timeLiner.TimeLiner

Sürücüler

./vol.py -f file.dmp windows.driverscan.DriverScan

{{#endtab}}

{{#tab name="vol2"}}

bash
volatility --profile=Win7SP1x86_23418 -f file.dmp driverscan

{{#endtab}} {{#endtabs}}

Panoyu al

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 clipboard -f file.dmp

IE geçmişini al

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 iehistory -f file.dmp

Not Defteri Metnini Alın

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 notepad -f file.dmp

Ekran Görüntüsü

bash
#Just vol2
volatility --profile=Win7SP1x86_23418 screenshot -f file.dmp

Master Boot Record (MBR)

bash
volatility --profile=Win7SP1x86_23418 mbrparser -f file.dmp

Master Boot Record (MBR), bir depolama ortamının mantıksal bölümlerini yönetmede kritik bir rol oynar ve bu bölümler farklı dosya sistemleri ile yapılandırılmıştır. Sadece bölüm düzeni bilgilerini tutmakla kalmaz, aynı zamanda bir önyükleyici olarak işlev gören yürütülebilir kodu da içerir. Bu önyükleyici, işletim sisteminin ikinci aşama yükleme sürecini doğrudan başlatır (bkz. ikinci aşama önyükleyici) veya her bölümün hacim önyükleme kaydı (VBR) ile uyum içinde çalışır. Derinlemesine bilgi için MBR Wikipedia sayfasına bakın.

Referanslar

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin