Memory Corruption: C vs Rust
Rust bietet strenge Compiler-Regeln, um Speicher- und Thread-Sicherheit zu erhöhen. C dagegen bietet einen Standard für eingebettete Systeme und somit die maximale Kontrolle über Speichermanagement, aber eben auch Speicherunsicherheit.
Wie sehen die tatsächlichen Unterschiede im Speichermanagement aus? Was muss ich in C und Rust tun, um Speicherunsicherheiten zu vermeiden? Hier ein praktischer Vergleich von Memory Corruption in C und Rust mit Anwendungsbeispielen, einfach ausführbar im Docker-Container.
Für das Wahlmodul “Practical Systems and Cybersecurity Engineering” habe ich ein kleines Projekt zum Vergleich von Memory Corruption, inklusive Negativ- und Positiv-Beispielen, sowohl in C als auch in Rust, erstellt.
Dieses Projekt enthält eine Markdown-Datei mit einer Einleitung in Memory Corruption als fundamentale Problemstellung, eine Einführung in die Prinzipien und Strukturen von C und Rust, sowie Anwendungsbeispiele von Memory Corruption mit ausführlichen Beschreibungen. Die Anwendungsbeispiele gibt es jeweils für C und Rust, einmal als Problemstellung mit Memory Corruption und einmal eine Lösungsmöglichkeit für diese, immer mit ausführlicher Erklärung. Die Markdown-Datei dient als Begleitung zu einer parallelen Code-Ausführung bzw. dessen Änderung.
Ergänzend zum beschreibenden Text finden sich in einem Unterordner ausführbare C- sowie Rust-Dateien mit Code-Snippets zu den verschiedenen Arten von Memory Corruption. Dabei ist jede Datei ausführlich mit Kommentaren dokumentiert, um die Entstehung der Memory Corruption anhand des Beispiels zu erläutern sowie eine Lösungsmöglichkeit zur Speichersicherung zu präsentieren. Hierfür müssen einzelne Code-Zeilen aus- bzw. einkommentiert werden.
Der Code kann für eine einfache Handhabung in einem Docker-Container ausgeführt werden. Hierfür muss lediglich die docker-compose.yaml bzw. das Dockerfile mit Terminal Access ausgeführt werden. Die Code-Dateien werden automatisch in den Container kopiert und in das entsprechende Verzeichnis navigiert.
Betrachtet werden verschiedene Arten der Memory Corruption: Buffer Overflow, Use-After-Free, Double Free, sowie Memory Leaks.


