Angriffe auf moderne C++-Programme beruhen in vielen Fällen auf Memory Corruption Bugs.
Durch verschiedene Mechanismen können Angreifer beispielsweise Type Confusions erzeugen,
bei der ein Pointer eines Typs unerwarteterweise auf ein Objekt eines anderen Typs zeigt.
Aus einem begrenzten Zugriff auf den Speicher werden üblicherweise schrittweise mächtigere Primitive gebaut,
meist mit dem Ziel, beliebigen Lese- und Schreibzugriff zu bekommen.
Damit ist es für den Angreifer normalerweise möglich, den Kontrollfluss des Programms zu steuern.
Um dies zu verhindern, kann man Verfahren wie "Control Flow Integrity" einsetzen,
deren Ziel ist, den eigentlichen Angriff auf den Kontrollfluss des Programms zu unterbinden.
Ohne Hardware-Unterstützung können diese Verfahren jedoch meist umgangen werden,
weil der Angreifer zu diesem Zeitpunkt schon mächtige Primitive zur Verfügung hat.
Isolated Heaps bieten eine Möglichkeit, initiale Memory Corruption Bugs zu erschweren.
Dabei werden verschiedene Typen in unterschiedliche Bereiche des Heaps allokiert.
Wird ein Objekt in einem solchen Isolated Heap freigegeben, während jedoch noch ein Pointer dorthin zeigt,
kann dort auch nach erneuter Allokation dieses Speicherbereichs nur ein Objekt des gleichen Typs sein.
Trotzdem kann es bei Isolated Heaps immer noch zu Type Confusions kommen,
wenn Pointer nicht überprüft werden.
Aufgabe:
Ziel dieser Arbeit war es, ein möglichst automatisiertes Verfahren zu entwickeln,
mit dem eine solche Überprüfung von Pointern mit relativ wenig Laufzeit- und Speicher-Overhead möglich ist.
Veröffentlichungen
Betreuer
Studenten