Stack Canary

Auch bekannt als:Stack Cookie · Stack Protector

Stack Canary: Zufälliger Wächterwert vor der Rücksprungadresse, dessen Veränderung einen Stack-Überlauf verrät. Der Canary ist eine Erkennungs-, keine Verhinderungsmaßnahme gegen den PufferüberlaufBuffer OverflowSchreiben über die Grenze eines Speicherpuffers hinaus, wodurch benachbarte Daten überschrieben werden..

Funktionsweise und Einordnung

Beim Betreten einer Funktion legt der Compiler einen zufälligen Wert zwischen die lokalen Variablen und die gespeicherte Rücksprungadresse. Vor dem Rücksprung wird geprüft, ob dieser Wert unverändert ist. Ein linearer Überlauf, der die Rücksprungadresse erreichen will, muss den Canary zwangsläufig mit überschreiben — die Prüfung schlägt fehl und der Prozess bricht kontrolliert ab. Der Wert wird pro Prozess erzeugt und enthält üblicherweise ein Null-Byte, damit ihn stringbasierte Kopierfunktionen nicht versehentlich mit ausgeben.

Bedeutung in der Praxis

Der Schutz fällt, sobald der Angreifer den Wert kennt oder ihn gar nicht überschreiben muss. Eine Format-String-SchwachstelleFormat String VulnerabilityFehlerhafte Verarbeitung benutzerkontrollierter Formatstrings mit möglichem Speicherzugriff. liest den Canary direkt vom Stack; danach wird er beim Überlauf unverändert wieder eingesetzt. Auch nicht-lineare Schreibzugriffe, etwa über einen kontrollierten Index, umgehen den Canary vollständig. In der Bewertung gilt deshalb: Ein aktivierter Stack Protector ist ein Härtungsmerkmal, kein Beleg dafür, dass eine Überlauf-Schwachstelle nicht ausnutzbar ist.

Verwandte Begriffe

  • Buffer OverflowBuffer OverflowSchreiben über die Grenze eines Speicherpuffers hinaus, wodurch benachbarte Daten überschrieben werden.: Schreiben über die Grenze eines Speicherpuffers hinaus, wodurch benachbarte Daten überschrieben werden.
  • Memory CorruptionMemory CorruptionUnbeabsichtigte oder gezielte Veränderung von Speicherstrukturen mit Sicherheitsfolgen.: Unbeabsichtigte oder gezielte Veränderung von Speicherstrukturen mit Sicherheitsfolgen.
  • Binary ExploitationBinary ExploitationAusnutzung von Speicher- oder Logikfehlern in kompilierten Anwendungen.: Ausnutzung von Speicher- oder Logikfehlern in kompilierten Anwendungen.
  • HardeningHardeningReduziert die Angriffsfläche durch sichere Konfiguration und Deaktivierung unnötiger Funktionen.: Reduziert die Angriffsfläche durch sichere Konfiguration und Deaktivierung unnötiger Funktionen.