Kyeong-Sik Lee und das Korean Digital Forensic Research Center haben Volafox, eine quelloffene Software zur Analyse von Mac OS X Arbeitsspeicherabbildern, veröffentlicht. Volafox basiert auf der Arbeit von Matthieu Suiche (Artikel und Präsentation) und dem Volatility Framework für die forensische Untersuchung von Arbeitsspeicherabbildern.
Volafox ist vollständig in Python geschrieben und erfordert den Python-Interpreter in Version 2.5 (oder einer späteren Version der Reihe 2.x) . Für die Installation laden Sie einfach das Archiv und entpacken Sie es, zum Beispiel mit unzip. Die Bedienung des Programms ist sehr einfach:
$ python volafox.py Memory analyzer for OS X 0.5 - n0fate Contact: rapfer@gmail.com usage: python volafox.py -i MEMORY_IMAGE -s KERNEL_IMAGE -o INFORMATION -= CAUTION =- this program need to physical memory image, kernel image(mach_kernel) and it support to Intel x86 Architecture only :( INFORMATION: os_version Dawin kernel detail version machine_info Kernel version, cpu, memory information mount_info Mount information kern_kext_info Kernel KEXT(Kernel Extensions) information kext_info KEXT(Kernel Extensions) information proc_info Process list syscall_info Kernel systemcall information
Das Speicherabbild muss in einem unstrukturierten Format (wie z.B. von dd erzeugt) erstellt worden sein. Aufgrund dieser Beschränkung kann Volafox leider die vom Mac Memory Reader erzeugten Abbilder nicht ohne vorherige Konvertierung verarbeiten. Ein Mach-o Address Space wäre eine hilfreiche Erweiterung.
Es sollte eigentlich möglich sein, den Kernel im Speicherabbild zu finden, jedoch wurde auch dies (noch) nicht implementiert. Man benötigt deshalb derzeit noch eine Kopie des ausgeführten Kernels (üblicherweise /mach_kernel).
Für den schnellen und unproblematischen Einstieg empfehle ich, auf die vom Programmautor bereitgestellten Beispiele zurückzugreifen: ein Speicherabbild und der dazugehörige Mach Kernel. Nach diesen Vorbereitungen können Sie als ersten Test die Version des Betriebssystems herausfinden:
$ python volafox.py -i MemoryImage.mem -s mach_kernel -o os_version Memory Image: MemoryImage.mem Kernel Image: mach_kernel Information: os_version Detail dawin kernel version: 10A432
Dieses Kommando zeigt die ProductBuildVersion, die man so auch in der Datei /System/Library/CoreServices/SystemVersion.plist findet.
Weiter geht es mit einigen Details über den untersuchten Computer.
$ python volafox.py -i MemoryImage.mem -s mach_kernel -o machine_info Memory Image: MemoryImage.mem Kernel Image: mach_kernel Information: machine_info -= Mac OS X Basic Information =- Major Version: 10 Minor Version: 0 Number of Physical CPUs: 2 Size of memory in bytes: 536870912 bytes Size of physical memory: 536870912 bytes Number of physical CPUs now available: 2 Max number of physical CPUs now possible: 2 Number of logical CPUs now available: 2 Max number of logical CPUs now possible: 2
Volafox kann auch die eingehängten Dateisysteme auflisten:
$ python volafox.py -i MemoryImage.mem -s mach_kernel -o mount_info Memory Image: MemoryImage.mem Kernel Image: mach_kernel Information: mount_info -= Mount List =- list entry fstypename mount on name mount from name 0304a290 hfs / /dev/disk0s2 03049948 devfs /dev devfs 03049000 autofs /net map -hosts 0403d520 autofs /home map auto_home 00000000 vmhgfs /Volumes/VMware Shared Folders .host:/
OS X verwaltet die aktiven Prozesse in einer doppelt verketteten Liste. Der Anfang dieser Liste lässt sich über das Kernel-Symbol kernproc finden (siehe auch den bereits erwähnten Artikel von Mattieu Suiche).
$ python volafox.py -i MemoryImage.mem -s mach_kernel -o proc_info Memory Image: MemoryImage.mem Kernel Image: mach_kernel Information: proc_info -= process list =- list_entry_next pid ppid process name username 03290d20 0 0 kernel_task 03290a80 1 0 launchdask n0fate 032902a0 2 1 launchctlk root 032907e0 10 1 kextddask root 03290540 11 1 DirectoryService root 03290000 12 1 notifydask root 0359bd20 13 1 diskarbitrationd root 0359ba80 14 1 configdask root 0359b7e0 15 1 syslogdask root 0359b540 16 1 distnotedk root 0359b000 17 1 mDNSResponder _mdnsresponder 0359b2a0 19 1 securitydk _mdnsresponder 03a5a7e0 24 1 ntpdhdask _mdnsresponder 03bc7d20 26 1 usbmuxdask _usbmuxd 03bc7a80 30 1 mdschdask _mdnsresponder 03bc77e0 31 1 loginwindow n0fate 03bc72a0 32 1 KernelEventAgent _mdnsresponder 03bc7000 34 1 hiddhdask _mdnsresponder 03bdaa80 35 1 fseventsdk _mdnsresponder 03befd20 37 1 dynamic_pager _mdnsresponder 03bef7e0 42 1 autofsdask _mdnsresponder 03a5a2a0 53 1 taskgatedk _usbmuxd 03bdad20 54 1 coreservicesd root 03a5a540 55 1 WindowServer root 03bda540 57 1 vmware-tools-dae _mdnsresponder 03a5a000 74 1 airportdsk _atsserver 03befa80 78 1 coreaudiod _coreaudiod 03bda2a0 79 1 launchdask n0fate 03bef000 83 79 Dockhdask n0fate 03bc7540 84 79 SystemUIServer n0fate 04166d20 85 79 Finderask n0fate 03bef2a0 92 79 fontddask n0fate 041667e0 95 79 pboardask n0fate 04166000 96 79 quicklookd n0fate 044ddd20 99 79 UserEventAgent n0fate 044dd000 100 79 ServerScanner n0fate 044fed20 105 79 AirPort Base Sta n0fate 044dd7e0 106 79 vmware-tools-use n0fate 044dd540 108 79 CCacheServer n0fate 03bda000 110 79 TISwitcher n0fate 0085e758 120 1 backupdask n0fate
Einzelheiten zu einem Prozess erfährt man, indem man ihn über seine PID auswählt:
$ python volafox.py -i MemoryImage.mem -s mach_kernel -o proc_info -x 120 Memory Image: MemoryImage.mem Kernel Image: mach_kernel Information: proc_info Dump PID: 120 -= process: 120=- list_entry_next pid ppid process name username 0085e758 120 1 backupdask n0fate task_ptr: 3bd81f4 vm_map_t: 41b2520 prev: 46145d8 next: 461402c start: 100000000 end: 7fffffe00000 neutries: 3a entries_pageable: 1 pmap_t: 3bf59f8 page directory pointer: 3bf5828 phys.address of dirbase: 4705c2400000000 object to pde: 1 ref count: 1 nx_enabled: 2 task_map: 0 pm_cr3: 0 pm_pdpt: 25c00000259 pm_pml4: 127df00000000000
Volafox kann ausserdem Kernel-Erweiterungen und Systemaufrufe auflisten. Es weist dabei auf Systemaufrufe hin, in die sich andere Software eingeklinkt hat.
