Xem xét một biện pháp bảo mật kiến trúc nhằm ngăn chặn các cuộc tấn công tràn bộ đệm ngăn xếp, thay vì lưu trữ địa chỉ trả về trên ngăn xếp, CPU lưu trữ sự khác biệt của con trỏ ngăn xếp và địa chỉ trả về. Cụ thể, lệnh call và ret bây giờ hoạt động như sau:
- gọi: Gọi n là địa chỉ của lệnh tiếp theo.Thay vì đẩy n vào ngăn xếp, lệnh gọi đẩy (n â esp), trong đó esp là con trỏ ngăn xếp và n là địa chỉ của ngăn tiếp theo
lệnh sau lệnh gọi.
- ret: Thay vì bật n từ ngăn xếp và nhảy tới n, lệnh ret bật x và nhảy tới (esp + x).
Biện pháp được đề xuất có làm cho việc khai thác lỗi tràn bộ đệm ngăn xếp khó khăn hơn trong 4 điều kiện sau không? Xác suất thành công của một nỗ lực khai thác duy nhất cho 4 điều này là gì? (ví dụ: 1, 2^â16 2^-24 2^â40)
- Không có ASLR hoặc DEP/WâX
- Không có ASLR, có DEP/WâX
- Với ASLR, không có DEP/WâX
- Với ASLR và DEP/WâX
Chúng tôi có thể cho rằng khu vực được ánh xạ hoặc đoạn văn bản chứa đủ tiện ích ROP để triển khai shellcode của bạn.
Ngoài ra, việc triển khai ALSR là PaX ASLR 32 bit, trong đó cơ sở ngăn xếp có 24 bit được sắp xếp ngẫu nhiên và được căn chỉnh trên ranh giới 16 byte, địa chỉ của khu vực được ánh xạ có 16 bit được sắp xếp ngẫu nhiên và được căn chỉnh trên ranh giới 4096 byte, và địa chỉ của vùng chứa mã, biến tĩnh và heap có 16 bit được sắp xếp ngẫu nhiên và được căn chỉnh trên ranh giới 4096 byte, như được tóm tắt bên dưới.