พิจารณามาตรการรักษาความปลอดภัยทางสถาปัตยกรรมที่มีไว้เพื่อป้องกันการโจมตีบัฟเฟอร์ล้นของสแต็ก โดยที่แทนที่จะเก็บที่อยู่ผู้ส่งบนสแต็ก CPU จะเก็บความแตกต่างของตัวชี้สแต็กและที่อยู่ผู้ส่ง โดยเฉพาะอย่างยิ่ง คำแนะนำในการโทรและ ret ทำงานดังต่อไปนี้:
- โทร: ให้ n เป็นที่อยู่ของคำสั่งถัดไปแทนที่จะกด n ลงบนสแต็ก คำสั่งการโทรจะผลัก (n â esp) โดยที่ esp คือตัวชี้สแต็กและ n ที่อยู่ของสแต็กถัดไป
คำแนะนำหลังจากคำแนะนำการโทร
- ret: แทนที่จะเปิด n จากสแต็กแล้วกระโดดไปที่ n คำสั่ง ret จะแสดง x และข้ามไปที่ (esp + x)
มาตรการที่เสนอทำให้การใช้ประโยชน์จาก stack buffer overflows ยากขึ้นภายใต้เงื่อนไข 4 ประการต่อไปนี้หรือไม่? ความน่าจะเป็นที่สำเร็จของการพยายามแสวงประโยชน์ครั้งเดียวสำหรับทั้ง 4 รายการนี้คือเท่าใด (เช่น 1, 2^â16 2^-24 2^â40)
- ไม่มี ASLR หรือ DEP/WâX
- ไม่มี ASLR มี DEP/WâX
- ด้วย ASLR โดยไม่มี DEP/WâX
- ด้วย ASLR และ DEP/WâX
เราอาจสันนิษฐานว่าพื้นที่ที่แมปหรือส่วนข้อความมีโปรแกรมเบ็ดเตล็ด ROP เพียงพอที่จะใช้เชลล์โค้ดของคุณ
นอกจากนี้ การนำ ALSR ไปใช้คือ PaX ASLR แบบ 32 บิต โดยที่ฐานสแต็กมีการสุ่ม 24 บิตและจัดแนวบนขอบเขต 16 ไบต์ ที่อยู่ของพื้นที่ที่แมปมีการสุ่ม 16 บิตและจัดแนวบนขอบเขต 4096 ไบต์ และแอดเดรสของขอบเขตที่มีโค้ด ตัวแปรสแตติก และฮีปมี 16 บิตแบบสุ่มและจัดแนวบนขอบเขต 4096 ไบต์ ดังสรุปด้านล่าง