Wie wird denn das mit unmodifiziertem Code dann ablaufen?
Irgendeine Abstraktion oder gar simulierter Stack?
Laut dem Artikel soll ein "zweiter"(shadow) Stack (bzw. eine Speicherseite) herhalten, der vom Usermode aus nur indirekt mittels einiger Anweisungen (wie CALL/RET) beschrieben/gelesen werden kann und bei einer RET Anweisung automatisch (also "in der CPU") die aktuelle Rückkehradresse mit der auf dem Shadow-Stack abgelegten vergleicht.
Das soll wohl im Groben so ablaufen (ich habe die etwas umfangreichere PDF von Intel nur überflogen) dass das OS z.B zusätzliche Speicherseite
für den jeweiligen Prozess für diesen Zweck breitstellt und die neuen, zusätzlichen Register wie SSP (die wohl vom Usermode aus nicht gelesen/geschreiben werden können) mit richtigen Werten inititalisiert, so dass bei Programmausführung die Anweisungen wie CALL/RET zusätzlich zu den bisherigen Aktionen die Daten in diesem Speicherbereich ablegen/lesen.Da dieser Speicherbereich vom Programm aus sonst, außer mit diesen Anweisungen, nicht modifiziert werden kann, wird es für den Angreifer schwer, die Rücksprungadresse zu manipulieren.
Nicht, dass so ganz neu wäre:
https://www.usenix.org/legacy/publi...full_papers/frantzen/frantzen_html/index.html (2001(!))
Oder es keine Schutzmöglichkeit gibt (ASLR,
Buffer overflow protection - Wikipedia, the free encyclopedia).
Das Problem bisher ist eher, dass diese Features auch nicht immer von neuer Software benutzt werden (Gruß an Kaspersky
http://joxeankoret.com/download/breaking_av_software_44con.pdf :wink: ), geschweige denn von der alten, da dies zumindest eine Neukompilierung (samt Compilerunterstützung) oder gar eine Anpassung bedarf.
Verschlimmert wird das Problem der Nichtnutzung noch dadurch, dass z.B bei einen DLL automatisch alle Programme betroffen sind, die diese DLL laden.