Stack Pivot

Vorwort

Ein Stackpivot ist eine Technik um den Geltungsbereich des Stack Pointers zu verschieben, in einen Bereich der vom Angreifer kontrolliert wird. Diese Technik dient bei Bufferoverflows Overflows als ausgangs Punkt für Rücksprung Orientierte Attacken. Dies eröffnet einem die Möglichkeit gewisse Schutzmechanismen aus zu hebeln. Unter anderem die DEP (Data Execution Prevention) Mechanismen welche verhindern Sollen das auf dem Stack Code ausgeführt werden kann.

Praktisches Beispiel

Hier wird die Durchführung eines pivots anhand eines SEH Bassierendem Buffer Overflows demonstriert. Der erste Schritt passiert hier wie bei einem gewöhnlichen SEH overflow in dem der SEH Zeiger und der next SEH Zeiger überschrieben werden. Jedoch wird in diesem Fall wird zwar ein 'pop pop ret' im SEH Handler abgelegt (bis hier nichts neues). Wenn jedoch die Code ausführung zurück springt auf den next SEH eintrag. Haben wir dort keinen Opcode hinterlegt der über SEH Springt sondern es liegt dort ein Zeiger welcher auf eine Sequenz zeigt die X (X beschreibt die Distanz vom Aktuellen Punkt der Ausführung bis zum bereich der vom Angreiffer kontrolliert wird, wobei EIP unter unserer Kontrolle bleibt) zum ESP hinzu zählt. Anweisungen die hier in frage kommen sind z.B:

add esp, 0x800
ret

Wenn man es schafft einen Stackpivot durch zu führen verschiebt sich somit der geltungs Bereich des Stack Pointers (ESP) in den vom Angreifer kontrollierten Bereich. Somit kann der Angreifer den Stack nach belieben manipulieren, Zeiger zu anderen Anweisungen ablegen und die Code ausführung in bestimmte Module/Image Bereiche umlenken.

So keine besondere Magie dabei aber man sollte schon wissen wie es geht beim Exploit schreiben :)


exploitation

stack_pivoting (zuletzt geändert am 2016-12-12 16:17:24 durch Dirk)