特點
攻擊者控制堆疊調用以劫持程式控制流並執行針對性的機器語言指令序列(稱為Gadgets)。 每一段gadget通常結束於return指令,並位於共享庫代碼中的子程式。系列調用這些代碼,攻擊者可以在擁有更簡單攻擊防範的程式內執行任意操作 。
堆疊溢出攻擊
ROP是一種高級的堆疊溢出攻擊。這類攻擊往往利用操作堆疊調用時的程式漏洞,通常是緩衝區溢出。在緩衝區溢出中,在將數據存入記憶體前未能正確檢查適當範圍的函式會收到多於正常承受範圍的數據,如果數據將寫入棧,多餘的數據會溢出為函式變數分配的空間並覆蓋替換返回地址(return address)。在原本用以重定向控制流並返回給調用者的地址被覆蓋替換後,控制流將改寫到新分配的地址。
標準的緩衝區溢出攻擊,攻擊者只需要寫出針對堆疊部分的代碼(有效載荷)。直到1990年代後期,主流作業系統沒有為該類攻擊作出任何防範,微軟直到2004年才提供了緩衝區溢出保護。作業系統最終使用數據執行保護技術來修補這個漏洞,該技術標記記憶體數據不可執行。 啟用數據執行保護,機器將拒絕執行任何記憶體中user級別可寫區域的代碼。該技術的硬體支持不久用以加強該防範 。