On the Viability of Memory Forensics in Compromised Environments
Total Page:16
File Type:pdf, Size:1020Kb
On the Viability of Memory Forensics in Compromised Environments Zur Praktikabilit¨atvon Hauptspeicherforensik in kompromittierten Umgebungen Der Technischen Fakult¨atder Friedrich-Alexander-Universit¨at Erlangen-N¨urnberg zur Erlangung des Grades DOKTOR-INGENIEUR vorgelegt von Johannes Stuettgen aus Herdecke Als Dissertation genehmigt von der Technischen Fakult¨atder Friedrich-Alexander-Universit¨at Erlangen-N¨urnberg Tag der m¨undlichen Pr¨ufung: 28.05.2015 Vorsitzende des Promotionsorgans: Prof. Dr.-Ing. habil. Marion Merklein Gutachter: Prof. Dr.-Ing. Felix Freiling Prof. Dr. Michael Meier Abstract Memory forensics has become a powerful tool for the detection and analysis of ma- licious software. It provides investigators with an impartial view of a system, expos- ing hidden processes, threads, and network connections, by acquiring and analyzing physical memory. Because malicious software must be at least partially resident in memory in order to execute, it cannot remove all its traces from RAM. However, the memory acquisition process is vulnerable to subversion in compromised envi- ronments. Malicious software can employ anti-forensic techniques to intercept the acquisition and filter memory contents while they are copied. In this thesis, we analyze 12 popular memory acquisition tools for Windows, Linux, and Mac OS X, and study their implementation in regard to how they enumerate and map memory. We find that all of the analyzed programs use the operating system to perform these tasks, and further illustrate this by implementing an open source memory acquisition framework for Mac OS X. In a survey of kernel rootkit techniques, that prevent or filter physical memory access, we show that all 12 tested programs are vulnerable to anti-forensics, because they rely on the operating system for critical functions. To elliminate this vulnerability, we develop an operating system independent ap- proach that directly utilizes the hardware to enumerate and map memory. By inter- acting with the PCI controller, we are able to safely avoid memory mapped device buffers while acquiring the entire physical address space. We program the page tables directly to map memory, forcing the MMU to facilitate arbitrary physical memory access from our driver’s data segment. We implement our techniques into the open source memory acquisition frameworks Winpmem, Pmem, and OSXPmem, further- ing the capabilities of memory acquisition software on the Windows, Linux, and Mac OS X platforms. Finally, we apply our novel technique to related problems in memory forensics. Memory acquisition software for Linux can only be run on a system with the exact same kernel version and configuration as the system it was compiled on, dueto dependencies on kernel data structures. We are able to create a minimal, kernel independent version of our module, which we inject into a compatible host module on the target. By hijacking the hosts data structures, we are able to load the infected module, redirect control flow, and communicate with it using a character device. A second innovative property of our acquisition approach is that, because we can enumerate the location of memory mapped device buffers, we are able to safely access memory regions unknown to the operating system. This allows us to acquire malicious firmware during of the memory acquisition process. We present asurvey on firmware code and data in the physical address space, and show how wecan capture the BIOS, PCI option ROMs, and the ACPI tables using our approach. We implement plugins for the open source memory analysis framework Volatility, which are able to extract the ACPI tables from memory and analyze them for malicious behavior. Zusammenfassung Hauptspeicherforensik hat sich zu einem m¨achtigen Werkzeug fur¨ die Erkennung und Analyse von Schadsoftware entwickelt. Sie stellt Ermittlern eine objektive Sicht auf Computersysteme bereit, mit der versteckte Artefakte, wie Prozesse und Netzwerk- verbindungen, durch Analyse des Hauptspeicherinhalts enttarnt werden k¨onnen. Da Schadsoftware zumindest in Teilen des Hauptspeichers vorhanden sein muss um aus- gefuhrt¨ werden zu k¨onnen, ist es unm¨oglich alle Spuren einer Infektion zur Laufzeit aus dem Speicher zu beseitigen. In kompromittierten Umgebungen besteht allerdings die Gefahr, dass der Zugriff auf den Hauptspeicher durch anti-forensische Methoden unterwandert wird. In dieser Arbeit analysieren wir die Implementierung von 12 weit verbreitete Werk- zeuge zur Erstellung von Hauptspeicherabbildern unter Windows, Linux, und Mac OS X. Unsere Untersuchungen zeigen, dass alle Programme das Betriebssystem zur Umsetzung kritischer Aufgaben verwenden, was wir durch die Implementierung des Programms OSXPmem illustrieren. In einer Studie geben wir dann einen Uberblick¨ uber¨ die verschiedenen anti-forensischen Techniken auf Betriebssystemebene, und zeigen mit einem Experiment das alle 12 untersuchten Programme anf¨allig fur¨ Anti- Forensik sind. Wir schließen diese Lucke¨ durch die Entwicklung von betriebssystemunabh¨angige Techniken zur Hauptspeichersicherung. Durch direkte Interaktion mit dem PCI Con- troller identifizieren wir in den physischen Adressraum eingeblendete¨ Gerate, was uns den sicheren Zugriff auf den restlichen Speicher¨ ermoglicht. Wir blenden diesen in den Adressraum unserer Anwendung ein, indem wir die Datenstrukturen der MMU manipulieren. Wir implementieren unsere Techniken in die quelloffenen Programme Winpmem, Pmem, und OSXPmem, was Ermittlern den Einsatz unter Windows, Linux, und Mac OS X erm¨oglicht. Schließlich nutzen wir unsere Techniken, um zwei weitere Probleme der Hauptspei- cherforensik zu l¨osen. Programme zur Speichersicherung unter Linux sind nur auf Systemen mit der exakt gleichen Kernel Version und Konfiguration lauff¨ahig mit der sie kompiliert wurden, da sie ein Kernel Module laden was von den Datenstrukturen des Kernels abh¨angig ist. Wir l¨osen dieses Problem indem wir eine minimale Version unseres Moduls in ein kompatibles Opfer“-Modul auf dem Zielsystem injizieren. Zur ” Kommunikation mit dem Kernel zweckentfremden wir die Datenstrukturen des Op- fers, was uns erlaubt unser Programm auf einer großen Menge verschiedener Linux Systeme zu verwenden, ohne es neu kompilieren zu mussen.¨ Die zweite innovative Eigenschaft unseres Ansatzes ist, dass wir gefahrlos auf Speicherbereiche zugreifen k¨onnen die dem Betriebssystem nicht bekannt sind, da uns die Position der in den Adressraum eingeblendeten Ger¨ate bekannt ist. Dies erlaubt uns den Zugriff auf die Firmware im Zuge der Hauptspeicheruntersuchung. Wir geben einen Uberblick¨ uber¨ die Lage von BIOS, PCI option ROMs und den ACPI Tabellen im physischen Adress- raum, und implementieren Techniken zur Sicherung und Analyse von Firmware fur¨ die quelloffene Speicheranalyse-Software Volatility. Acknowledgments This thesis would not have been possible without the support of others. First and foremost, I would like to thank my supervisor Felix Freiling for his continuous advice and support during my time at the Security Research Group of the Department of Computer Science in Erlangen. Many thanks also go to Michael Meier, from the University of Bonn, for agreeing to be my second supervisor. I also thank my colleagues at the Security Research Group, for a cheerful and friendly working atmosphere. I would also like to extend my thanks to the Google Incident Response Team, for many interesting discussions and an exciting working environment. A special thank you goes to Michael Cohen, who, with his guidance and inspiration facilitated two of the three papers this thesis is built upon. In addition, I want to thank the following list of people (in alphabetical order) for helping me proofread this thesis and forge it into something legible: Michael Gruhn, Tilo M¨uller,Ben Stock, Heiner St¨uttgenand Stefan V¨omel. Finally, I want to thank Mathieu Suiche, for his commitment to forensic tool testing, providing me with an evaluation version of Moonsols Windows Memory Toolkit, that allowed me to also test a commercial tool for anti-forensic resilience. Contents 1 Introduction ................................................... 1 1.1 Contributions................................................2 1.2 Related Work................................................4 1.3 Publications.................................................7 1.4 Outline.....................................................8 2 Technical Background ......................................... 9 2.1 x86 Architecture............................................. 10 2.1.1 The Physical Address Space............................. 12 2.1.2 Memory Protection.................................... 15 2.1.3 The PCI Express Bus.................................. 19 2.2 Linux Kernel Modules........................................ 25 2.2.1 Module Binary Organization............................ 26 2.2.2 Linking and Loading................................... 27 2.3 System Firmware............................................. 29 2.3.1 Basic Input Output System............................. 29 2.3.2 (Unified) Extensible Firmware Interface................... 30 2.3.3 PCI Option ROMs..................................... 30 2.3.4 Advanced Configuration and Power Interface.............. 31 2.4 Summary.................................................... 33 3 Memory Acquisition .......................................... 35 3.1 Principles of Memory Acquisition............................... 36 3.1.1 Criteria for Sound Memory Acquisition................... 36 3.1.2