Stack Canary
Was ist Stack Canary?
Stack CanaryEin Stack Canary ist ein geheimer Wert zwischen lokalen Puffern und der gespeicherten Rueckkehradresse einer Funktion, um Stack-Overflows zu erkennen, bevor sie den Kontrollfluss kapern.
Stack Canaries wurden 1998 von Crispin Cowan und dem StackGuard-Team eingefuehrt. Es handelt sich um zufaellige Werte, die im Stackframe zwischen den lokalen Variablen und der gespeicherten Rueckkehradresse abgelegt werden. Der Compiler erzeugt Code beim Funktionseinsprung, um den Canary zu setzen, und beim Austritt, um ihn zu pruefen; Abweichungen brechen das Programm ab, bevor die ueberschriebene Rueckkehradresse genutzt wird. Moderne Toolchains aktivieren das via -fstack-protector oder /GS, mit prozess-spezifischem Zufallswert und Terminator-Byte (meist 0x00) gegen Payloads, die den Canary einschliessen. Canaries ergaenzen ASLR, DEP, CFI und memory-safe Sprachen, ersetzen sie aber nicht.
● Beispiele
- 01
GCC -fstack-protector-strong fuegt Funktionen mit Arrays einen Canary hinzu.
- 02
MSVC /GS erkennt einen strcpy-basierten Stack-Overflow.
● Häufige Fragen
Was ist Stack Canary?
Ein Stack Canary ist ein geheimer Wert zwischen lokalen Puffern und der gespeicherten Rueckkehradresse einer Funktion, um Stack-Overflows zu erkennen, bevor sie den Kontrollfluss kapern. Es gehört zur Kategorie Anwendungssicherheit der Cybersicherheit.
Was bedeutet Stack Canary?
Ein Stack Canary ist ein geheimer Wert zwischen lokalen Puffern und der gespeicherten Rueckkehradresse einer Funktion, um Stack-Overflows zu erkennen, bevor sie den Kontrollfluss kapern.
Wie funktioniert Stack Canary?
Stack Canaries wurden 1998 von Crispin Cowan und dem StackGuard-Team eingefuehrt. Es handelt sich um zufaellige Werte, die im Stackframe zwischen den lokalen Variablen und der gespeicherten Rueckkehradresse abgelegt werden. Der Compiler erzeugt Code beim Funktionseinsprung, um den Canary zu setzen, und beim Austritt, um ihn zu pruefen; Abweichungen brechen das Programm ab, bevor die ueberschriebene Rueckkehradresse genutzt wird. Moderne Toolchains aktivieren das via -fstack-protector oder /GS, mit prozess-spezifischem Zufallswert und Terminator-Byte (meist 0x00) gegen Payloads, die den Canary einschliessen. Canaries ergaenzen ASLR, DEP, CFI und memory-safe Sprachen, ersetzen sie aber nicht.
Wie schützt man sich gegen Stack Canary?
Schutzmaßnahmen gegen Stack Canary kombinieren typischerweise technische Kontrollen und operative Praktiken, wie in der Definition oben beschrieben.
Welche anderen Bezeichnungen gibt es für Stack Canary?
Übliche alternative Bezeichnungen: StackGuard, Stack Cookie, GS Cookie.
● Verwandte Begriffe
- appsec№ 064
ASLR
Address Space Layout Randomization platziert Code, Stacks, Heaps und Bibliotheken bei jedem Programmstart zufaellig im Speicher, sodass Angreifer Zieladressen nicht vorhersagen koennen.
- appsec№ 303
DEP
Data Execution Prevention (auch NX oder W^X) markiert Speicherseiten als nicht ausfuehrbar, sodass Angreifer keinen in Stack oder Heap eingeschleusten Shellcode starten koennen.
- appsec№ 217
Control-Flow Integrity
Control-Flow Integrity (CFI) beschraenkt indirekte Aufrufe und Returns auf einen vorab berechneten Satz legitimer Ziele und blockiert ROP- bzw. JOP-Angriffe.
- appsec№ 1028
Shadow Stack
Ein Shadow Stack ist ein separater, geschuetzter Stack mit Kopien der Rueckkehradressen, sodass die CPU Manipulationen am normalen Stack erkennt und ROP-Angriffe stoppt.
- appsec№ 925
Return-Oriented Programming
Return-Oriented Programming (ROP) ist eine Exploit-Technik des Code-Reuse, die kurze, mit RET endende Instruktionsfolgen verkettet, um beliebige Berechnungen ohne neuen Code auszufuehren.
- appsec№ 670
Speichersicherheit
Speichersicherheit (Memory Safety) ist die Eigenschaft, dass ein Programm niemals Speicher liest, schreibt oder ausfuehrt, den es nicht legitim allokiert hat, und schaltet damit ganze Schwachstellenklassen aus.
● Siehe auch
- № 545Intel CET