Luați în considerare o măsură de securitate arhitecturală menită să prevină atacurile de depășire a buffer-ului stivei în care, în loc să stocheze adresa de retur pe stivă, CPU stochează diferența dintre pointerul stivei și adresa de retur. Mai exact, instrucțiunile de apel și retragere se comportă acum după cum urmează:
- apel: Fie n adresa instrucțiunii următoare.În loc să împingă n pe stivă, instrucțiunea de apel împinge (n â esp), unde esp este indicatorul stivei și n adresa următorului
instrucțiune după instrucțiunea de apel.
- ret: În loc să scoată n din stivă și să sară la n, instrucțiunea ret apare x și sare la (esp + x).
Măsura propusă îngreunează exploatarea depășirilor de buffer de stivă în următoarele 4 condiții? Care este probabilitatea de succes a unei singure încercări de exploatare pentru aceste 4? (de ex. 1, 2^â16 2^-24 2^â40)
- Fără ASLR sau DEP/WâX
- Fără ASLR, cu DEP/WâX
- Cu ASLR, fără DEP/WâX
- Cu ASLR și DEP/WâX
Putem presupune că fie regiunea mapată, fie segmentul de text conține suficiente gadgeturi ROP pentru a implementa codul shell.
De asemenea, implementarea ALSR este PaX ASLR pe 32 de biți, unde baza stivei are 24 de biți randomizați și este aliniată pe o graniță de 16 octeți, adresa zonei mapate are 16 biți randomizat și este aliniată pe o graniță de 4096 de biți, și adresa regiunii care conține codul, variabilele statice și heap-ul are 16 biți randomizați și este aliniată la o limită de 4096 de octeți, așa cum este rezumat mai jos.