<?xml version="1.0" encoding="utf-8"?>
<export-example>
  <doc>
    <id>7226</id>
    <completedYear>2025</completedYear>
    <publishedYear/>
    <thesisYearAccepted/>
    <language>eng</language>
    <pageFirst/>
    <pageLast/>
    <pageNumber/>
    <edition/>
    <issue/>
    <volume/>
    <type>doctoralthesis</type>
    <publisherName/>
    <publisherPlace/>
    <creatingCorporation/>
    <contributingCorporation/>
    <belongsToBibliography>0</belongsToBibliography>
    <completedDate>2025-11-28</completedDate>
    <publishedDate>--</publishedDate>
    <thesisDateAccepted>2025-11-26</thesisDateAccepted>
    <title language="eng">Stack buffer overflow attacks and countermeasures with register windows on the example of Xtensa LX</title>
    <title language="deu">Stapel-Pufferüberlauf-Angriffe und -Gegenmaßnahmen mit Registerfenstern am Beispiel von Xtensa LX</title>
    <abstract language="eng">Stack buffer overflows are vulnerabilities that occur due to missing bounds checks when writing data into local buffers. These vulnerabilities have been exploited for decades and persist until today due to the usage of popular programming languages like C and C++, which allow arrays to be accessed without any checks. Over the years a wide variety of countermeasures was introduces, ranging from static analysis to various forms of runtime checks.&#13;
Register windows are a hardware architecture feature that was developed for Reduced Instruction Set Computer (RISC) architectures to reduce the overhead for function calls and returns due to the necessary load and store instructions. With register windows, a processor is equipped with a large number of registers, but only a part, the register window, is visible to the program. With a function call, the register window moves to a new set of registers for the function to use. When the function returns, the register window moves back. The physical register set is used like a ring buffer and if it overflows, an exception interrupts the program execution to save the content of the overflown registers to the stack. Underflow exceptions on the other hand are responsible to restore the content when the control flow returns to a function that had its registers overflown.&#13;
With return addresses, stack pointers, and function arguments being held in registers, often being targeted by stack buffer overflow attacks, the register window mechanism has a direct influence on these attacks and their countermeasures. This thesis investigates these influences using the Xtensa Lx architecture as an example, as it is used in the popular ESP32 microcontroller. In a first part, window overflows and underflows are used to craft stack buffer overflow based attacks, with a focus being Return-Oriented Programming (ROP). A second part investigates selected countermeasures, including canaries, XOR cookies, shadow stacks, and encryption. Here the focus is how these countermeasures can or need to be adjusted in order to be used with register windows or how register windows can be used to improve performance or security. A following chapter addresses specific aspects of the implementation of said countermeasures. All countermeasure implementations have been evaluated using Bristol/Embecosm Embedded Benchmark Suite (BEEBS), a collection of 80 benchmarks for embedded devices, to show their performance for a wide variety of use-cases. The presented results show the potential of register windows to implement very performant countermeasures against stack buffer overflow attacks.</abstract>
    <abstract language="deu">Stack Pufferüberläufe sind Schwachstellen die entstehen, wenn lokale Puffer beschrieben werden, ohne deren Größe zu überprüfen. Diese Schwachstellen werden seit Jahrzehnten ausgenutzt und sind durch die Nutzung von populären Sprachen wie C und C++ bis heute anzutreffen. Diese Sprachen erlauben die Nutzung von Arrays ohne jegliche Checks. Über die Jahre wurden verschiedene Gegenmaßnahmen entwickelt, angefangen von statischen Analysen von Programmen bis hin zu verschiedensten Formen von Überprüfungen zur Laufzeit.&#13;
Registerfenster sind ein Hardware-Feature welches dafür entwickelt wurde die Kosten von Funktionsaufrufen und -rücksprüngen zu reduzieren, die durch die benötigten Speicher- und Ladeinstruktionen verursacht werden. Bei der Verwendung von Registerfenstern besitzt ein Prozessor eine sehr große Anzahl von physikalischen Registern, wobei jedoch immer nur ein kleiner Teil davon für das Programm sichtbar ist. Dieser Teil wird das Registerfenster genannt. Mit einem Funktionsaufruf verschiebt sich das Registerfenster zu einem neuen Satz von Registern, der von der neuen Funktion frei genutzt werden kann. Bei einem Rücksprung bewegt sich auch das Registerfenster zurück. Der physikalische Registersatz wird wie ein Ringpuffer genutzt. Falls er überläuft sorgt eine Überlauf-Ausnahme für eine Programmunterbrechung und der Inhalt der betroffenen Register wird im Stack abgelegt.  Dementsprechend sorgen Unterlauf-Ausnahmen dafür, dass die Registerinhalte wieder zurück geladen werden, sobald das Programm zu einer Funktion zurückkehrt, deren Register von einem solchen Überlauf betroffen waren.&#13;
Dadurch dass Daten wie Rücksprungadressen, Stackzeiger und Funktionsparameter in Registern gehalten werden, welche oftmals durch Stack Pufferüberlauf basierte Angriffe überschrieben werden, hat der Registerfenster-Mechanismus einen großen Einfluss auf diese Art von Angriffen und deren Gegenmaßnahmen. Diese Arbeit untersucht diese Einflüsse am Beispiel der Xtensa LX Architektur, welche im populären ESP32 Mikrocontroller genutzt wird. In einem ersten Teil werden die Überläufe und Unterläufe auf mögliche Angriffspunkte untersucht, mit einem Fokus auf Rücksprung-Orientiertes Programmieren (ROP). Ein zweiter Teil untersucht eine Auswahl von Gegenmaßnahmen, die Canaries, XOR Cookies, Schattestack und Verschlüsselung beinhaltet. Hier liegt der Fokus vor allem darauf wie die Methoden angepasst werden müssen, um mit Registerfenstern genutzt werden zu können, oder welche Verbesserungen sich für Ausführungszeit oder Sicherheit erzielen lassen. Ein anschließendes Kapitel adressiert zudem spezifische Aspekte der Implementierung der genannten Gegenmaßnahmen. Alle Gegenmaßnahmen wurden mit der Bristol/Embecosm Embedded Benchmark Suite (BEEBS) evaluiert, einer Sammlung von 80 Benchmarks für eingebettete Systeme, um deren Leistung für eine möglichst große Auswahl von Fällen zu bewerten. Die präsentierten Ergebnisse zeigen das Potenzial von Registerfenstern für die effiziente Implementierung von Gegenmaßnahmen gegen Stack Pufferüberlauf basierte Angriffe.</abstract>
    <identifier type="doi">10.26127/BTUOpen-7226</identifier>
    <identifier type="urn">urn:nbn:de:kobv:co1-opus4-72262</identifier>
    <enrichment key="opus.source">publish</enrichment>
    <licence>Creative Commons - CC BY - Namensnennung 4.0 International</licence>
    <author>Kai Lehniger</author>
    <subject>
      <language>eng</language>
      <type>uncontrolled</type>
      <value>Buffer overflow</value>
    </subject>
    <subject>
      <language>eng</language>
      <type>uncontrolled</type>
      <value>IT-security</value>
    </subject>
    <subject>
      <language>eng</language>
      <type>uncontrolled</type>
      <value>Xtensa</value>
    </subject>
    <subject>
      <language>eng</language>
      <type>uncontrolled</type>
      <value>Register window</value>
    </subject>
    <subject>
      <language>deu</language>
      <type>uncontrolled</type>
      <value>Pufferüberläufe</value>
    </subject>
    <subject>
      <language>deu</language>
      <type>uncontrolled</type>
      <value>Registerfenster</value>
    </subject>
    <subject>
      <language>deu</language>
      <type>uncontrolled</type>
      <value>IT-Sicherheit</value>
    </subject>
    <subject>
      <language>deu</language>
      <type>uncontrolled</type>
      <value>Gegenmaßnahmen</value>
    </subject>
    <subject>
      <language>deu</language>
      <type>uncontrolled</type>
      <value>Angriffe &lt;IT&gt;</value>
    </subject>
    <subject>
      <language>deu</language>
      <type>swd</type>
      <value>Pufferüberlauf</value>
    </subject>
    <subject>
      <language>deu</language>
      <type>swd</type>
      <value>Computersicherheit</value>
    </subject>
    <subject>
      <language>deu</language>
      <type>swd</type>
      <value>Gegenmaßnahme</value>
    </subject>
    <collection role="ddc" number="005">Computerprogrammierung, Programme, Daten</collection>
    <collection role="collections" number="">Wiss. Publikationen</collection>
    <collection role="institutes" number="">FG Drahtlose Systeme</collection>
    <thesisPublisher>BTU  Cottbus - Senftenberg</thesisPublisher>
    <thesisGrantor>BTU Cottbus - Senftenberg</thesisGrantor>
    <file>https://opus4.kobv.de/opus4-btu/files/7226/Dissertation_Lehniger_Kai.pdf</file>
  </doc>
</export-example>
