Intel Cpu

Die Funktionsweise ist im Artikel erklärt.

"at the processor level" bedeutet, dass es nicht notwendig sein wird, dafür Code neu zu schreiben oder neu zu übersetzen (zumindest nicht in Userprogrammen - möglicherweise im Kernel schon).
Das soll ca so funktionieren wie ein Cache. Caches müssen auch nicht extra programmiert werden (außer eventuell im Kernel) und trotzdem verbessern sie die Arbeit der CPU.

Ich habe allerdings auch meine Bedenken, ob das funktionieren wird.
 
Irgendeine Abstraktion oder gar simulierter Stack?

So wie es dort steht. Eine Kopie des Stacks, die nur Returnadressen enthält. Versucht ein Exploit die Programmroutine zu unterbrechen und mittels einer eingeschleusten Returnadresse auf seinen eigenen Code zu "springen" wird vor diesem "Sprung" die Returnadresse im kopierten Stack abgeglichen bevor er ausgeführt wird. In diesem Fall wird die Ausführung verhindert, da die Adresse verändert wurde und nicht mehr mit der aus dem Shadow-Stack übereinstimmt.

Also du brauchst keinen Code modifizieren, da hier lediglich Adressen kopiert und verifiziert werden.

Soweit ich das verstanden habe ist dieser Stack im RAM abgelegt und könnte über den Kernel manipuliert werden.
 
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(n) 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.
 
Zurück
Oben