Thema 2: Ein konfigurierbarer Speicherallokator für verflochtene parallele Shadow Stacks

Beschreibung

Dieses Thema kann so erweitert werden, dass es als Thema für eine Masterarbeit bearbeitet werden kann.

Shadow Stacks sind ein modernes Mittel zur Erkennung von korrumpierten Rücksprungadressen. Von jeder Rücksprungadresse wird eine Kopie in einem separaten Shadow Stack abgelegt. Bevor eine Funktion zurückkehrt, wird die Rücksprungadresse mit ihrer Kopie verglichen, um sicherzustellen, dass sie nicht verändert wurde. Parallele Shadow Stacks sind eine Variante, bei der kein spezieller Shadow Stack Pointer verwendet wird. Stattdessen wird das Layout des normalen Stacks beibehalten und der reguläre Stack Pointer sowie ein fester Offset verwendet, um den Shadow Stack zu adressieren. Dies führt zwar zu einer schnellen und einfachen Implementierung, ist aber nicht sehr speichereffizient. Einige Architekturen, in diesem speziellen Fall die Xtensa-Architektur, haben eine bestimmte Ausrichtung für ihre Stack-Frames, die mögliche Positionen für Rücksprungadressen vorhersehbar macht. Durch eine sorgfältige Anpassung der Startpositionen solcher Shadow Stacks ist es möglich, die Speichernutzung zu erhöhen, indem man sie im selben Speicherbereich platziert.

Dies bringt neue Herausforderungen für einen Speicherallokator für solche verflochtenen parallelen Shadow Stacks mit sich, da ein Stück Speicher möglicherweise nur teilweise von einem Shadow Stack verwendet wird und noch für einen anderen frei sein kann. Normalerweise wird dynamischer Speicher mit Hilfe einer Liste freier Chunks verwaltet. Der Studierende muss dieses Konzept anpassen, um der besonderen Speicherstruktur von miteinander verflochtenen parallelen Shadow Stacks Rechnung zu tragen. Außerdem sollte es möglich sein, den Speicherallokator so zu konfigurieren, dass er in verschiedenen Szenarien verwendet werden kann, z. B. in einem Shadow Stack, der nur Rücksprungadressen speichert, oder solchen, die zusätzlich noch Stack Pointer beherbergen und daher weniger Überlagerungen erlaubt.

Betreuer: Kai Lehniger M.Sc. (lehniger@ihp-microelectronics.com)