RootedCON είναι η πιο σχετική εκδήλωση κυβερνοασφάλειας στην Ισπανία και μία από τις πιο σημαντικές στην Ευρώπη. Με αποστολή την προώθηση της τεχνικής γνώσης, αυτό το συνέδριο είναι ένα καυτό σημείο συνάντησης για επαγγελματίες της τεχνολογίας και της κυβερνοασφάλειας σε κάθε τομέα.
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)
Το Volatility έχει δύο κύριες προσεγγίσεις για τα plugins, οι οποίες μερικές φορές αντικατοπτρίζονται στα ονόματά τους. Τα plugins “list” θα προσπαθήσουν να πλοηγηθούν μέσα από τις δομές του Windows Kernel για να ανακτήσουν πληροφορίες όπως διαδικασίες (να εντοπίσουν και να περιηγηθούν στη συνδεδεμένη λίστα των δομών _EPROCESS στη μνήμη), χειριστές OS (εντοπισμός και καταγραφή του πίνακα χειριστών, αποαναφορά οποιωνδήποτε δεικτών βρεθούν, κ.λπ.). Συμπεριφέρονται περισσότερο ή λιγότερο όπως θα έκανε το Windows API αν ζητούνταν, για παράδειγμα, να καταγράψει διαδικασίες.
Αυτό καθιστά τα plugins “list” αρκετά γρήγορα, αλλά εξίσου ευάλωτα όπως το Windows API σε χειρισμούς από κακόβουλο λογισμικό. Για παράδειγμα, αν το κακόβουλο λογισμικό χρησιμοποιήσει DKOM για να αποσυνδέσει μια διαδικασία από τη συνδεδεμένη λίστα _EPROCESS, δεν θα εμφανιστεί στον Διαχειριστή Εργασιών και ούτε θα εμφανιστεί στην pslist.
Τα plugins “scan”, από την άλλη πλευρά, θα ακολουθήσουν μια προσέγγιση παρόμοια με την εκσκαφή της μνήμης για πράγματα που μπορεί να έχουν νόημα όταν αποαναφέρονται ως συγκεκριμένες δομές. Το psscan για παράδειγμα θα διαβάσει τη μνήμη και θα προσπαθήσει να δημιουργήσει αντικείμενα _EPROCESS από αυτήν (χρησιμοποιεί σάρωση pool-tag, η οποία αναζητά 4-byte strings που υποδεικνύουν την παρουσία μιας δομής ενδιαφέροντος). Το πλεονέκτημα είναι ότι μπορεί να ανακαλύψει διαδικασίες που έχουν τερματιστεί, και ακόμη και αν το κακόβουλο λογισμικό παρέμβει στη συνδεδεμένη λίστα _EPROCESS, το plugin θα βρει ακόμα τη δομή που βρίσκεται στη μνήμη (καθώς πρέπει να υπάρχει για να εκτελείται η διαδικασία). Το μειονέκτημα είναι ότι τα plugins “scan” είναι λίγο πιο αργά από τα plugins “list” και μερικές φορές μπορεί να δώσουν ψευδώς θετικά αποτελέσματα (μια διαδικασία που έχει τερματιστεί πολύ καιρό πριν και είχε μέρη της δομής της αντικατασταθεί από άλλες λειτουργίες).
Όπως εξηγείται μέσα στο readme, πρέπει να τοποθετήσετε τον πίνακα συμβόλων του OS που θέλετε να υποστηρίξετε μέσα στο volatility3/volatility/symbols.
Οι πακέτες πίνακα συμβόλων για τα διάφορα λειτουργικά συστήματα είναι διαθέσιμοι για λήψη στο:
Αν θέλετε να χρησιμοποιήσετε ένα νέο προφίλ που έχετε κατεβάσει (για παράδειγμα ένα linux) πρέπει να δημιουργήσετε κάπου την εξής δομή φακέλων: plugins/overlays/linux και να βάλετε μέσα σε αυτόν τον φάκελο το zip αρχείο που περιέχει το προφίλ. Στη συνέχεια, πάρτε τον αριθμό των προφίλ χρησιμοποιώντας:
Στο προηγούμενο κομμάτι μπορείτε να δείτε ότι το προφίλ ονομάζεται LinuxCentOS7_3_10_0-123_el7_x86_64_profilex64, και μπορείτε να το χρησιμοποιήσετε για να εκτελέσετε κάτι όπως:
Από εδώ: Σε αντίθεση με το imageinfo που απλά παρέχει προτάσεις προφίλ, το kdbgscan έχει σχεδιαστεί για να προσδιορίζει θετικά το σωστό προφίλ και τη σωστή διεύθυνση KDBG (αν υπάρχουν πολλές). Αυτό το plugin σαρώνει για τις υπογραφές KDBGHeader που συνδέονται με τα προφίλ του Volatility και εφαρμόζει ελέγχους εγκυρότητας για να μειώσει τα ψευδώς θετικά αποτελέσματα. Η λεπτομέρεια της εξόδου και ο αριθμός των ελέγχων εγκυρότητας που μπορούν να εκτελούνται εξαρτάται από το αν το Volatility μπορεί να βρει ένα DTB, οπότε αν ήδη γνωρίζετε το σωστό προφίλ (ή αν έχετε μια πρόταση προφίλ από το imageinfo), τότε βεβαιωθείτε ότι το χρησιμοποιείτε από .
Πάντα ρίξτε μια ματιά στον αριθμό διεργασιών που έχει βρει το kdbgscan. Μερικές φορές το imageinfo και το kdbgscan μπορούν να βρουν περισσότερα από ένα κατάλληλα προφίλ αλλά μόνο το έγκυρο θα έχει κάποια διαδικασία σχετική (Αυτό συμβαίνει επειδή για να εξάγουμε διεργασίες χρειάζεται η σωστή διεύθυνση KDBG)
Το μπλοκ αποσφαλμάτωσης πυρήνα, που αναφέρεται ως KDBG από το Volatility, είναι κρίσιμο για τις εγκληματολογικές εργασίες που εκτελούνται από το Volatility και διάφορους αποσφαλματωτές. Αναγνωρίζεται ως KdDebuggerDataBlock και είναι τύπου _KDDEBUGGER_DATA64, περιέχει βασικές αναφορές όπως το PsActiveProcessHead. Αυτή η συγκεκριμένη αναφορά δείχνει στην κεφαλή της λίστας διεργασιών, επιτρέποντας την καταγραφή όλων των διεργασιών, που είναι θεμελιώδους σημασίας για λεπτομερή ανάλυση μνήμης.
OS Information
#vol3 has a plugin to give OS information (note that imageinfo from vol2 will give you OS info)./vol.py-ffile.dmpwindows.info.Info
The plugin banners.Banners μπορεί να χρησιμοποιηθεί στο vol3 για να προσπαθήσει να βρει linux banners στο dump.
./vol.py-ffile.dmpwindows.hashdump.Hashdump#Grab common windows hashes (SAM+SYSTEM)./vol.py-ffile.dmpwindows.cachedump.Cachedump#Grab domain cache hashes inside the registry./vol.py-ffile.dmpwindows.lsadump.Lsadump#Grab lsa secrets
volatility--profile=Win7SP1x86_23418hashdump-ffile.dmp#Grab common windows hashes (SAM+SYSTEM)volatility--profile=Win7SP1x86_23418cachedump-ffile.dmp#Grab domain cache hashes inside the registryvolatility--profile=Win7SP1x86_23418lsadump-ffile.dmp#Grab lsa secrets
Memory Dump
Η μνήμη dump μιας διαδικασίας θα εξάγει τα πάντα από την τρέχουσα κατάσταση της διαδικασίας. Το procdump module θα εξάγει μόνο τον κώδικα.
RootedCON είναι η πιο σχετική εκδήλωση κυβερνοασφάλειας στην Ισπανία και μία από τις πιο σημαντικές στην Ευρώπη. Με αποστολή την προώθηση της τεχνικής γνώσης, αυτό το συνέδριο είναι ένα καυτό σημείο συνάντησης για επαγγελματίες της τεχνολογίας και της κυβερνοασφάλειας σε κάθε πειθαρχία.
Διαδικασίες
Λίστα διαδικασιών
Προσπαθήστε να βρείτε ύποπτες διαδικασίες (κατά όνομα) ή αναμενόμενες παιδικές διαδικασίες (για παράδειγμα μια cmd.exe ως παιδί της iexplorer.exe).
Θα μπορούσε να είναι ενδιαφέρον να συγκρίνετε το αποτέλεσμα του pslist με αυτό του psscan για να εντοπίσετε κρυφές διαδικασίες.
python3vol.py-ffile.dmpwindows.pstree.PsTree# Get processes tree (not hidden)python3vol.py-ffile.dmpwindows.pslist.PsList# Get process list (EPROCESS)python3vol.py-ffile.dmpwindows.psscan.PsScan# Get hidden process list(malware)
volatility--profile=PROFILEpstree-ffile.dmp# Get process tree (not hidden)volatility--profile=PROFILEpslist-ffile.dmp# Get process list (EPROCESS)volatility--profile=PROFILEpsscan-ffile.dmp# Get hidden process list(malware)volatility--profile=PROFILEpsxview-ffile.dmp# Get hidden process list
Dump proc
./vol.py -f file.dmp windows.dumpfiles.DumpFiles --pid <pid> #Dump the .exe and dlls of the process in the current directory
python3vol.py-ffile.dmpwindows.cmdline.CmdLine#Display process command-line arguments
volatility--profile=PROFILEcmdline-ffile.dmp#Display process command-line argumentsvolatility--profile=PROFILEconsoles-ffile.dmp#command history by scanning for _CONSOLE_INFORMATION
Οι εντολές που εκτελούνται στο cmd.exe διαχειρίζονται από το conhost.exe (ή το csrss.exe σε συστήματα πριν από τα Windows 7). Αυτό σημαίνει ότι αν το cmd.exe τερματιστεί από έναν επιτιθέμενο πριν αποκτηθεί ένα memory dump, είναι ακόμα δυνατό να ανακτηθεί το ιστορικό εντολών της συνεδρίας από τη μνήμη του conhost.exe. Για να το κάνετε αυτό, αν ανιχνευθεί ασυνήθιστη δραστηριότητα μέσα στα modules της κονσόλας, η μνήμη της σχετικής διαδικασίας conhost.exe θα πρέπει να αποθηκευτεί. Στη συνέχεια, αναζητώντας strings μέσα σε αυτό το dump, οι γραμμές εντολών που χρησιμοποιήθηκαν στη συνεδρία μπορούν ενδεχομένως να εξαχθούν.
Περιβάλλον
Αποκτήστε τις μεταβλητές env κάθε εκτελούμενης διαδικασίας. Μπορεί να υπάρχουν μερικές ενδιαφέρουσες τιμές.
python3vol.py-ffile.dmpwindows.envars.Envars [--pid <pid>]#Display process environment variables
volatility--profile=PROFILEenvars-ffile.dmp [--pid <pid>]#Display process environment variablesvolatility --profile=PROFILE -f file.dmp linux_psenv [-p <pid>] #Get env of process. runlevel var means the runlevel where the proc is initated
Δικαιώματα Token
Ελέγξτε για δικαιώματα token σε απροσδόκητες υπηρεσίες.
Θα μπορούσε να είναι ενδιαφέρον να καταγράψετε τις διεργασίες που χρησιμοποιούν κάποιο προνομιακό token.
#Get enabled privileges of some processespython3vol.py-ffile.dmpwindows.privileges.Privs [--pid <pid>]#Get all processes with interesting privilegespython3 vol.py -f file.dmp windows.privileges.Privs | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"
#Get enabled privileges of some processesvolatility--profile=Win7SP1x86_23418privs--pid=3152-ffile.dmp|grepEnabled#Get all processes with interesting privilegesvolatility --profile=Win7SP1x86_23418 privs -f file.dmp | grep "SeImpersonatePrivilege\|SeAssignPrimaryPrivilege\|SeTcbPrivilege\|SeBackupPrivilege\|SeRestorePrivilege\|SeCreateTokenPrivilege\|SeLoadDriverPrivilege\|SeTakeOwnershipPrivilege\|SeDebugPrivilege"
SIDs
Ελέγξτε κάθε SSID που ανήκει σε μια διαδικασία.
Θα μπορούσε να είναι ενδιαφέρον να καταγράψετε τις διαδικασίες που χρησιμοποιούν ένα SID με προνόμια (και τις διαδικασίες που χρησιμοποιούν κάποιο SID υπηρεσίας).
./vol.py-ffile.dmpwindows.getsids.GetSIDs [--pid <pid>]#Get SIDs of processes./vol.py-ffile.dmpwindows.getservicesids.GetServiceSIDs#Get the SID of services
volatility--profile=Win7SP1x86_23418getsids-ffile.dmp#Get the SID owned by each processvolatility--profile=Win7SP1x86_23418getservicesids-ffile.dmp#Get the SID of each service
Χειριστές
Χρήσιμο να γνωρίζουμε σε ποια άλλα αρχεία, κλειδιά, νήματα, διαδικασίες... έχει ένα διαδικασία χειριστή (έχει ανοίξει)
./vol.py-ffile.dmpwindows.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
volatility--profile=Win7SP1x86_23418dlllist--pid=3152-ffile.dmp#Get dlls of a procvolatility--profile=Win7SP1x86_23418dlldump--pid=3152--dump-dir=.-ffile.dmp#Dump dlls of a proc
Σειρές ανά διεργασία
Το Volatility μας επιτρέπει να ελέγξουμε σε ποια διεργασία ανήκει μια σειρά.
Windows παρακολουθεί τα προγράμματα που εκτελείτε χρησιμοποιώντας μια δυνατότητα στο μητρώο που ονομάζεται UserAssist keys. Αυτά τα κλειδιά καταγράφουν πόσες φορές εκτελείται κάθε πρόγραμμα και πότε εκτελέστηκε τελευταία φορά.
RootedCON είναι η πιο σχετική εκδήλωση κυβερνοασφάλειας στην Ισπανία και μία από τις πιο σημαντικές στην Ευρώπη. Με την αποστολή της προώθησης της τεχνικής γνώσης, αυτό το συνέδριο είναι ένα βραστό σημείο συνάντησης για επαγγελματίες της τεχνολογίας και της κυβερνοασφάλειας σε κάθε πειθαρχία.
Υπηρεσίες
./vol.py-ffile.dmpwindows.svcscan.SvcScan#List services./vol.py-ffile.dmpwindows.getservicesids.GetServiceSIDs#Get the SID of services
#Get services and binary pathvolatility--profile=Win7SP1x86_23418svcscan-ffile.dmp#Get name of the services and SID (slow)volatility--profile=Win7SP1x86_23418getservicesids-ffile.dmp
Δίκτυο
./vol.py-ffile.dmpwindows.netscan.NetScan#For network info of linux use volatility2
volatility--profile=Win7SP1x86_23418netscan-ffile.dmpvolatility--profile=Win7SP1x86_23418connections-ffile.dmp#XPand2003onlyvolatility--profile=Win7SP1x86_23418connscan-ffile.dmp#TCPconnectionsvolatility--profile=Win7SP1x86_23418sockscan-ffile.dmp#Opensocketsvolatility--profile=Win7SP1x86_23418sockets-ffile.dmp#Scannerfortcpsocketobjectsvolatility--profile=SomeLinux-ffile.dmplinux_ifconfigvolatility--profile=SomeLinux-ffile.dmplinux_netstatvolatility--profile=SomeLinux-ffile.dmplinux_netfiltervolatility--profile=SomeLinux-ffile.dmplinux_arp#ARP tablevolatility --profile=SomeLinux -f file.dmp linux_list_raw #Processes using promiscuous raw sockets (comm between processes)
volatility--profile=SomeLinux-ffile.dmplinux_route_cache
Registry hive
Εκτύπωση διαθέσιμων hives
./vol.py-ffile.dmpwindows.registry.hivelist.HiveList#List roots./vol.py-ffile.dmpwindows.registry.printkey.PrintKey#List roots and get initial subkeys
volatility--profile=Win7SP1x86_23418-ffile.dmphivelist#List rootsvolatility--profile=Win7SP1x86_23418-ffile.dmpprintkey#List roots and get initial subkeys
volatility--profile=Win7SP1x86_23418printkey-K"Software\Microsoft\Windows NT\CurrentVersion"-ffile.dmp# Get Run binaries registry valuevolatility-ffile.dmp--profile=Win7SP1x86printkey-o0x9670e9d0-K'Software\Microsoft\Windows\CurrentVersion\Run'
Dump
#Dump a hivevolatility--profile=Win7SP1x86_23418hivedump-o0x9aad6148-ffile.dmp#Offset extracted by hivelist#Dump all hivesvolatility--profile=Win7SP1x86_23418hivedump-ffile.dmp
Σύστημα Αρχείων
Σύνδεση
#See vol2
volatility--profile=SomeLinux-ffile.dmplinux_mountvolatility--profile=SomeLinux-ffile.dmplinux_recover_filesystem#Dump the entire filesystem (if possible)
Σάρωση/εκφόρτωση
./vol.py-ffile.dmpwindows.filescan.FileScan#Scan for files inside the dump./vol.py-ffile.dmpwindows.dumpfiles.DumpFiles--physaddr<0xAAAAA>#Offset from previous command
volatility--profile=Win7SP1x86_23418filescan-ffile.dmp#Scan for files inside the dumpvolatility--profile=Win7SP1x86_23418dumpfiles-n--dump-dir=/tmp-ffile.dmp#Dump all filesvolatility--profile=Win7SP1x86_23418dumpfiles-n--dump-dir=/tmp-Q0x000000007dcaa620-ffile.dmpvolatility--profile=SomeLinux-ffile.dmplinux_enumerate_filesvolatility--profile=SomeLinux-ffile.dmplinux_find_file-F/path/to/filevolatility--profile=SomeLinux-ffile.dmplinux_find_file-i0xINODENUMBER-O/path/to/dump/file
Master File Table
# I couldn't find any plugin to extract this information in volatility3
Το NTFS file system χρησιμοποιεί ένα κρίσιμο συστατικό γνωστό ως master file table (MFT). Αυτός ο πίνακας περιλαμβάνει τουλάχιστον μία καταχώρηση για κάθε αρχείο σε έναν τόμο, καλύπτοντας και το MFT. Σημαντικές λεπτομέρειες σχετικά με κάθε αρχείο, όπως μέγεθος, χρονικές σφραγίδες, δικαιώματα και πραγματικά δεδομένα, είναι ενσωματωμένες μέσα στις καταχωρήσεις MFT ή σε περιοχές εξωτερικές του MFT αλλά αναφερόμενες από αυτές τις καταχωρήσεις. Περισσότερες λεπτομέρειες μπορούν να βρεθούν στην επίσημη τεκμηρίωση.
SSL Keys/Certs
#vol3 allows to search for certificates inside the registry
./vol.py -f file.dmp windows.registry.certificates.Certificates
#vol2 allos you to search and dump certificates from memory
#Interesting options for this modules are: --pid, --name, --ssl
volatility --profile=Win7SP1x86_23418 dumpcerts --dump-dir=. -f file.dmp
Κακόβουλο Λογισμικό
./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
Χρησιμοποιήστε αυτό το σενάριο για να κατεβάσετε και να συγχωνεύσετε όλους τους κανόνες κακόβουλου λογισμικού yara από το github: https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9
Δημιουργήστε τον φάκελο rules και εκτελέστε το. Αυτό θα δημιουργήσει ένα αρχείο με όνομα malware_rules.yar που περιέχει όλους τους κανόνες yara για κακόβουλο λογισμικό.
Αν θέλετε να χρησιμοποιήσετε εξωτερικά πρόσθετα, βεβαιωθείτε ότι οι φάκελοι που σχετίζονται με τα πρόσθετα είναι η πρώτη παράμετρος που χρησιμοποιείται.
Είναι δυνατόν να διαβάσετε από τη μνήμη την ιστορία του bash. Θα μπορούσατε επίσης να εξάγετε το αρχείο .bash_history, αλλά ήταν απενεργοποιημένο, θα είστε ευτυχείς που μπορείτε να χρησιμοποιήσετε αυτό το module του volatility.