Software Exploitation - Cheatsheet
Definition und Historie von Buffer Overflows
Definition:
Buffer-Overflow ist ein Sicherheitsproblem, bei dem ein Programm mehr Daten in einen Puffer schreibt, als dieser aufnehmen kann, was zur Überschreibung von benachbarten Speichersegmenten führt.
Details:
- Erste dokumentierte Buffer-Overflow-Attacke: Morris-Wurm (1988).
- Häufige Ursache für Sicherheitslücken, ermöglicht Codeausführung, Systemabstürze oder Datenkorruption.
- Schutzmaßnahmen: Bounds-Checking, Stack Canaries, ASLR (Address Space Layout Randomization), DEP (Data Execution Prevention).
Typische Angriffsmethoden und Beispiele von Buffer Overflows
Definition:
Buffer Overflows entstehen, wenn mehr Daten in einen Puffer geschrieben werden, als dort gespeichert werden können, was zu Speicherfehlern führt und potenziell ausgenutzt werden kann.
Details:
- Stack-based Buffer Overflow: Überschreiben des Rücksprungadressenspeichers, um bösartigen Code auszuführen.
- Heap-based Buffer Overflow: Manipulation von Speichersteuerinformationen, um das Programmverhalten zu ändern.
- Format String Attack: Einfügen von Formatierungszeichenfolgen, um Speicherinhalte zu lesen oder zu schreiben.
- Beispiel: char buf[10]; gets(buf);
Schutzmechanismen und Best Practices zur Vermeidung von Buffer Overflows
Definition:
Techniken und Methoden zur Verhinderung von Pufferüberläufen in Software; Ziel ist es, Sicherheitslücken zu vermeiden und Programmstabilität zu gewährleisten.
Details:
- Verwende sichere Funktionen: Vermeide unsichere Funktionen wie
strcpy
, nutze stattdessen sichere wie strncpy
. - Stack Canaries: Platzierung von Werten (Canaries) am Ende des Speicherstapels zum Erkennen von Überläufen.
- Address Space Layout Randomization (ASLR): Zufällige Anordnung von Speicheradressen zur Erschwerung von Angriffen.
- Data Execution Prevention (DEP): Markiere Speicherbereiche als nicht ausführbar.
- Größenprüfungen: Überprüfe Eingabepuffergrößen strikt.
- Boundary Checks: Implementiere Check-Befehle zum Vermeiden von Überläufen.
- Code Reviews: Regelmäßige Überprüfung von Code auf potenzielle Sicherheitslücken.
Grundlagen und Entstehung von Format String Vulnerabilities
Definition:
Ausnutzung von unsicheren Formatstrings zur Manipulation des Programmspeichers und zu unerwünschten Operationen.
Details:
- Tritt auf bei Verwendung von unsicheren Formatstrings in Funktionen wie printf, fprintf, sprintf, etc.
- Angreifer kann Spezialzeichen wie %x, %n, %s einfügen, um Speicherinhalte auszulesen oder zu überschreiben.
- Ermöglicht Ausführen von beliebigem Code oder Abruf sensibler Informationen.
- Prävention durch Verwendung sicherer Funktionen und Format-Überprüfungen.
- Beispiel: printf(buf); mit buf = %x%x%x führt zur Auslesung von Speicheradressen.
Werkzeuge und Techniken für die Binäranalyse im Reverse Engineering
Definition:
Tools und Techniken zur Analyse von Binärdateien im Rahmen des Reverse Engineerings.
Details:
- Disassembler: Wandeln Binärcode in lesbaren Assemblercode um (z.B. IDA Pro, Ghidra)
- Debugger: Erlauben schrittweises Ausführen und Überwachen von Programmen (z.B. GDB, OllyDbg)
- Statische Analyse: Untersuchung des Binärcodes ohne Ausführung (z.B. Radare2, Binary Ninja)
- Dynamische Analyse: Überprüfung des Verhaltens von Programmen zur Laufzeit (z.B. WinDbg, Strace)
- Deobfuskation: Techniken zur Umkehrung von Obfuskation oder Komprimierungsmethoden (z.B. Unpacker, Deobfuscator)
- Automatisierte Werkzeuge: Scripte und Frameworks für Routineanalysen (z.B. angr, R2pipe)
- Cryptanalyse: Analyse verschlüsselter Daten innerhalb von Binärdateien
Techniken zur Malware-Analyse und -Dekompilierung
Definition:
Methoden und Werkzeuge zur Untersuchung und Demontage von Schadsoftware, um deren Funktionsweise, Ursprünge und Auswirkungen zu verstehen.
Details:
- Statische Analyse: Untersuchung ohne Ausführung des Codes (Disassembling, Stringextraktion)
- Dynamische Analyse: Untersuchung durch Ausführung des Codes in einer kontrollierten Umgebung (Sandboxing, Monitoring-Tools)
- Reverse Engineering: Rückgewinnung des Quellcodes aus dem Binärcode (Decompiling, Debugging)
- Signaturbasierte Erkennung: Vergleich mit bekannten Malware-Signaturen
- Verhaltensbasierte Erkennung: Analyse des Verhaltens der Software zur Erkennung von Anomalien
Detaillierte Untersuchung gängiger Exploitation-Techniken
Definition:
Analyse und Anwendung von Methoden zur Ausnutzung von Softwareschwachstellen.
Details:
- Pufferüberlauf (Buffer Overflow)
- Format-String-Angriffe
- Return-Oriented Programming (ROP)
- Heap-basierte Überläufe
- Use-After-Free (UAF)
- Code-Injection
- Bypassing DEP & ASLR
ASLR und DEP als fortgeschrittene Schutztechnologien
Definition:
ASLR: Address Space Layout Randomization. DEP: Data Execution Prevention.
Details:
- ASLR: Zufällige Anordnung des Adresse-Bereichs von Prozessen im Speicher
- Erhöht die Komplexität von Buffer Overflow-Angriffen
- DEP: Verhindert Code-Ausführung in bestimmten Speicherbereichen (z.B. Stack, Heap)
- Zusammen erhöhen sie die Sicherheit durch Einschränkung der Ausführbarkeit und Vorhersagbarkeit von Speicheradressen
- Erfordern Betriebssystemunterstützung und können durch bestimmte Techniken (z.B. ROP) umgangen werden