Programming lesson
Exploit-Entwicklung für COMP3703: Stack- und Heap-basierte Angriffe meistern
Lerne die Grundlagen der Stack- und Heap-basierten Exploit-Entwicklung am Beispiel von COMP3703 Assignment 2. Von Buffer Overflows bis Use-After-Free – dieser Leitfaden hilft dir, die Konzepte zu verstehen und eigene Exploits zu schreiben.
Einführung in die Exploit-Entwicklung für COMP3703
Die Sicherheitsforschung ist ein zentraler Bestandteil der modernen Informatik. Im Rahmen des COMP3703 Assignments 2 beschäftigst du dich mit Stack-basierten und Heap-basierten Exploits. Diese Techniken sind nicht nur für die akademische Welt relevant, sondern auch für reale Sicherheitslücken in Software, die täglich millionenfach genutzt wird. Ob in Spielen, Apps oder Finanzsystemen – das Verständnis von Speicherfehlern hilft, Angriffe zu verstehen und Abwehrmechanismen zu entwickeln.
In diesem Tutorial lernst du die grundlegenden Konzepte, die du für die Lösung der Aufgaben benötigst: von der Stack-basierten Exploitation (Problem 1) bis zur Heap-basierten Exploitation (Problem 2). Wir behandeln typische Schwachstellen wie Buffer Overflows, Use-After-Free und Double-Free und zeigen dir, wie du mit Python und pwntools eigene Exploits schreibst.
Stack-basierte Exploitation: Die Grundlagen
Der Stack ist ein Speicherbereich, der für Funktionsaufrufe und lokale Variablen genutzt wird. Ein Stack Buffer Overflow tritt auf, wenn mehr Daten in einen Puffer geschrieben werden, als Platz ist. Dadurch können benachbarte Daten wie die Rücksprungadresse überschrieben werden. Dies ermöglicht es, den Programmablauf zu manipulieren.
Intel HEX Format und Parser-Schwachstellen
Im Assignment wird ein Binärprogramm verwendet, das das Intel HEX Format parst. Solche Parser sind anfällig für Buffer Overflows, da sie oft keine Längenprüfung durchführen. Ein Angreifer kann speziell präparierte HEX-Daten senden, um den Stack zu überschreiben und Code auszuführen.
Beispiel: Stell dir vor, du spielst ein Online-Spiel und ein Gegner schickt einen manipulierten Spielstand. Wenn der Client diesen nicht richtig prüft, könnte der Gegner deinen Computer übernehmen. So ähnlich funktioniert ein Stack-Exploit.
Exploit-Primitives aufbauen
Die Teilaufgaben in Problem 1 sind so gestaltet, dass du schrittweise Exploit-Primitives entwickelst. Zunächst lernst du, den Instruction Pointer (IP) zu kontrollieren, dann den Stack zu manipulieren und schließlich beliebigen Code auszuführen. Dabei arbeitest du mit pwntools, einer Python-Bibliothek für Exploit-Entwicklung.
from pwn import *
# Beispiel: Verbindung zu einem lokalen Dienst
p = remote('localhost', 1337)
p.sendline(b'A' * 100)
p.interactive()Wichtig: In der finalen Abgabe musst du remote() verwenden, da die Binärdateien auf einem entfernten Server laufen. Während der Entwicklung darfst du process() nutzen, um mit gdb zu debuggen.
Heap-basierte Exploitation: Use-After-Free und Double-Free
Der Heap wird für dynamische Speicheranforderungen verwendet. Anders als der Stack ist der Heap nicht linear organisiert. Hier lauern andere Gefahren: Use-After-Free (UAF) und Double-Free.
Use-After-Free verstehen
Ein Use-After-Free tritt auf, wenn ein Programm auf Speicher zugreift, der bereits freigegeben wurde. Dies kann zu Codeausführung führen, wenn der Angreifer den freigegebenen Speicher mit eigenen Daten belegt. Stell dir vor, du löschst eine Nachricht in einer Messaging-App, aber die App zeigt sie trotzdem an – und der Inhalt wurde von einem Angreifer ausgetauscht.
Double-Free ausnutzen
Ein Double-Free liegt vor, wenn derselbe Speicherblock zweimal freigegeben wird. Dies kann den Heap-Allokator durcheinanderbringen und zu Arbitrary Write führen. Moderne Heap-Implementierungen wie ptmalloc haben Schutzmechanismen, aber mit genug Geschick lassen sich diese umgehen.
Heap-Exploits in der Praxis
Im Assignment gibt es zwei Binärdateien mit ähnlicher Funktionalität, aber unterschiedlichen Exploit-Mitigationen. Du musst die Schwachstellen identifizieren und Exploits schreiben, die die Schutzmaßnahmen umgehen. Dazu gehören ASLR, NX und Stack Canaries.
Ein aktuelles Beispiel: Im Jahr 2026 nutzen viele KI-Chatbots dynamische Speicherverwaltung. Ein Fehler im Heap-Management könnte es einem Angreifer erlauben, den Bot zu kapern und schädliche Antworten zu generieren.
Artefakt und Bericht erstellen
Deine Abgabe besteht aus zwei Teilen: dem Artefakt (Python-Skripte) und dem Bericht (PDF). Der Bericht sollte deine Vorgehensweise erklären, etwa 3500 Wörter umfassen und nach der Konvention u1234567_report.pdf benannt sein.
Python-Skripte schreiben
Jedes Teilproblem erfordert ein eigenes Skript. Verwende pwntools und stelle sicher, dass die Skripte nur über das Netzwerk kommunizieren. Teste sie mit den bereitgestellten Server-Skripten.
# Beispiel: Exploit für Stack Buffer Overflow
from pwn import *
p = remote('target', 1337)
p.recvuntil(b'>')
p.sendline(b'A' * 64 + p32(0xdeadbeef))
p.interactive()Bericht verfassen
Im Bericht erklärst du die Schwachstellen, deine Exploit-Strategie und die Ergebnisse. Verwende Diagramme, um den Speicherfluss zu veranschaulichen. Vergiss nicht, auf Trends wie Cybersecurity in der Gaming-Industrie oder KI-Sicherheit einzugehen, um deine Arbeit kontextuell einzuordnen.
Häufige Fehler und Tipps
- Fehler 1: Lokale Adressen in remote() verwenden. Denk daran, dass du die Adressen aus dem Binär extrahieren musst.
- Fehler 2: Schutzmechanismen ignorieren. Prüfe immer, ob ASLR, NX oder Stack Canaries aktiviert sind.
- Tipp: Nutze checksec aus pwntools, um die Sicherheitsmerkmale einer Binärdatei zu analysieren.
- Tipp: Entwickle deine Exploits schrittweise. Beginne mit einfachen Buffer Overflows und steigere die Komplexität.
Fazit
Die Exploit-Entwicklung ist eine faszinierende Disziplin, die tiefe Einblicke in die Funktionsweise von Betriebssystemen und Compilern bietet. Mit den hier vorgestellten Techniken bist du gut gerüstet, um die Aufgaben des COMP3703 Assignments 2 zu lösen. Denk daran: Übung macht den Meister. Experimentiere mit den Binärdateien, lies die bereitgestellten Hinweise und tausche dich mit Kommilitonen aus. Viel Erfolg!