title: Using Memory Management Structures to Identify and Analyze Malicious and Benign Data
title: Verwendung von Speicherverwaltungsstrukturen zur Identifizierung und Analyse von schadhaften und gutartigen Daten
Creators: name: Block, Frank
Publisher: name: Friedrich-Alexander-Universität Erlangen-Nürnberg (FAU)
Year: 2024

description: In forensic investigations, analyzing memory plays a vital role in reconstructing events, detecting potential malicious activities, and addressing legal inquiries. This analysis is crucial for identifying and examining advanced malware and its data, especially memory-only variants, as well as legitimate process data. One crucial type of structure, which is used for the management of such data, are memory management structures. These structures are used on multiple levels, ranging from the CPU/MMU to the kernel up the processes, and vary widely in the information they contain and the memory they reference. Understanding these structures is essential for identifying and analyzing both potentially malicious and benign user space process data. This thesis starts with potentially malicious data on Windows and low-level memory management structures on the CPU/MMU level. In particular, we use Page Table Entries (PTEs) in order to identify executable pages, which might be the result of code injections. Before this thesis, such memory could have been hidden from existing memory forensic tools with simple steps or even unintentionally, without explicit actions. We then test the limitations of this new detection approach, but also of other detection tools, by introducing new techniques which exploit PTEs and other memory management structures (both on Windows and Linux) in order to hide certain data from the investigator’s eyes. To reveal the hidden data, we present corresponding approaches for the identification of those hiding techniques, again with the help of memory management structures. In the subsequent part of this thesis, the focus shifts to memory management structures at the Windows kernel level, aimed at detecting both malicious and benign modifications to memory mapped image-files (executables and DLLs). Firstly, we introduce a novel and reliable approach for identifying modified pages within Memory-Mapped Image Files (MMIFs). We also discuss and demonstrate why previous approaches are not dependable (anymore), especially in the context of a Windows feature called memory combining. Secondly, we present a new method to identify the exact modified bytes within those modified pages. The utilization of the actual modified bytes, coupled with this level of granularity, improves and simplifies the identification and analysis of specific attacker techniques, such as API hooks and ETW/AMSI bypasses. Other existing approaches are either only able to pinpoint on the whole page (which means to present 4096 bytes instead of only 3 bytes that actually were modified), or use pattern matching in order to identify malicious traces. We also demonstrate that these detection approaches fail to reliably identify malicious modifications within Memory-Mapped Image Files. In the last part we delve into memory management structures within Linux user space processes, specifically focusing on the Heap and Glibc’s heap implementation from a memory forensics standpoint. Our emphasis here is on the identification and reconstruction of all (previously) existing chunks of data, allocated by processes. Prior to this work, the heap was just a large cohesive memory region from a memory forensics perspective. Our new ability to reconstruct all allocated chunks now enables us to more easily analyze the contained data. The second focus lies on the data analysis of these reconstructed chunks for several applications. We identify, for example, certain data structures and links between them, while using a black box approach. While our primary focus is on benign applications in this section, the methodologies discussed are also applicable to data derived from malicious processes. All mentioned detection approaches are implemented as plugins for the memory forensic frameworks Volatility and/or Rekall and released in publicly available repositories.
description: In forensischen Untersuchungen spielt die Analyse des Speichers eine entscheidende Rolle bei der Rekonstruktion von Ereignissen, der Entdeckung potenziell schadhafter Aktivitäten und der Aufkläurung juristischer Fälle. Diese Analyse ist von entscheidender Bedeutung für die Identifizierung und Untersuchung von fortgeschrittener Malware und ihren Daten, insbesondere von rein im Speicher existierenden Varianten, sowie legitimen Prozessdaten. Eine wichtige Art von Strukturen, die für das Management solcher Daten verwendet werden, sind Speicherverwaltungsstrukturen. Diese Strukturen werden auf mehreren Ebenen eingesetzt, von der CPU/MMU über den Kernel bis hin zu Prozessen, und unterscheiden sich erheblich in den enthaltenen Informationen und dem von ihnen referenzierten Speicher. Das Verständnis dieser Strukturen ist entscheidend für die Identifizierung und Analyse sowohl potenziell schadhafter als auch harmloser Prozessdaten im User-Space. Diese Dissertation beginnt mit potenziell schadhaften Daten unter Windows, und Strukturen zur Speicherverwaltung auf der CPU/MMU-Ebene. Insbesondere werden sogenannte Page Table Entry (PTE) verwendet um ausführbare Speicher-Seiten zu identifizieren, die das Ergebnis von Code- Injektionen sein könnten. Vor dieser Arbeit konnte ein solcher Speicher mit einfachen Schritten, oder sogar unbeabsichtigt, vor vorhandenen forensischen Speichertools verborgen werden. Wir testen die Grenzen dieses neuen Ansatzes, aber auch anderer Erkennungswerkzeuge, indem wir neue Techniken einführen, die PTEs und andere Speicherverwaltungsstrukturen (sowohl unter Windows als auch unter Linux) ausnutzen, um bestimmte Daten vor den Ermittlern zu verbergen. Um die verborgenen Daten aufzudecken, präsentieren wir ebenfalls entsprechende Ansätze zur Identifizierung dieser Verstecktechniken, erneut mithilfe von Speicherverwaltungsstrukturen. Im anschließenden Teil dieser Arbeit verlagert sich der Fokus auf Speicherverwaltungsstrukturen auf der Kernel-Ebene von Windows, die darauf abzielen sowohl schadhafte als auch harmlose Modifikationen an Memory-Mapped Image Files (MMIFs) (im Speicher geladene, ausführbare Dateien und DLLs) zu erkennen. Zunächst stellen wir einen neuen und zuverlässigen Ansatz zur Identifizierung modifizierter Seiten innerhalb von Memory-Mapped Image Files vor. Wir diskutieren und demonstrieren auch, warum frühere Ansätze nicht mehr verlässlich sind, insbesondere im Zusammenhang mit einem Windows-Feature namens memory combining. Zweitens präsentieren wir eine neue Methode zur Identifizierung der exakten modifizierten Bytes innerhalb dieser modifizierten Seiten. Die Verwendung der tatsächlich modifizierten Bytes in Verbindung mit diesem Granularitätsgrad verbessert und vereinfacht die Identifizierung und Analyse spezifischer Angriffstechniken, wie beispielsweise API-Hooks und ETW/AMSI-Umgehungen. Andere bestehende Ansätze können entweder nur eine Veränderung auf eine komplette Seite eingrenzen (was bedeutet, dass 4096 Bytes anstelle von nur 3 Bytes präsentiert werden, die tatsächlich modifiziert wurden), oder verwenden Pattern-Matching um Spuren schadhafter Daten zu identifizieren. Wir zeigen auch, dass diese Erkennungsansätze es versäumen schadhafte Modifikationen innerhalb von Memory-Mapped Image Files zuverlässig zu identifizieren. Im letzten Teil der Arbeit vertiefen wir uns in Speicherverwaltungsstrukturen innerhalb von Linux-Benutzerprozessen und konzentrieren uns speziell auf den Heap und die Heap-Implementierung von Glibc aus forensischer Sicht. Unser Schwerpunkt liegt hier auf der Identifizierung und Rekonstruktion aller (in der Vergangenheit) existierender Chunks, die von Prozessen allokiert wurden. Vor dieser Arbeit war der Heap aus forensischer Sicht nur eine große zusammenhängende Speicherregion. Mit der nun bereitstehenden Fähigkeit, alle allokierten Chunks zu rekonstruieren, die enthaltenen Daten leichter zu analysieren. Der zweite Schwerpunkt liegt auf der Datenanalyse dieser rekonstruierten Chunks für verschiedene Anwendungen. Dabei identifizieren wir beispielsweise, unter Verwendung eines Black-Box-Ansatzes, bestimmte Datenstrukturen und Verbindungen zwischen ihnen. Obwohl unser Hauptaugenmerk in diesem Abschnitt auf harmlosen Anwendungen liegt, sind die diskutierten Methoden auch auf Daten aus schadhaften Prozessen anwendbar. Alle genannten Erkennungsansätze wurden als Plugins für die Memory-Forensics Werkzeuge Volatility und/oder Rekall implementiert und in öffentlich zugänglichen Repositorien veröffentlicht.