本章示範的漏洞利用技術已存在多年。程式設計師想出一些聰明的防護方法只是時間問題——這些是防護型(protect)對策,試圖保護弱點本身。
漏洞利用的三步驟#
一個漏洞利用可以概括成三個步驟:
- 某種記憶體毀損(memory corruption)
- 控制流程的改變(change in control flow)
- shellcode 的執行(execution of shellcode)
強化型對策各自針對其中一或多個步驟下手——接下來兩節的「不可執行堆疊」瞄準第三步,「隨機化堆疊空間」則瞄準第二步。