返回導向程式設計
外觀
「返回導向編程」的各地常用名稱 | |
---|---|
中國大陸 | 面向返回程序設計、面向返回編程 |
臺灣 | 返回導向程式設計 |
港澳 | 返回導向程式設計、返回導向編程 |
此條目需要擴充。 (2013年9月21日) |
此條目沒有列出任何參考或來源。 (2013年9月21日) |
面向返回編程(英語:Return-Oriented Programming,縮寫:ROP)是電腦安全漏洞利用技術,該技術允許攻擊者在安全防禦的情況下執行代碼,如不可執行的主記憶體和代碼簽章。攻擊者控制堆疊呼叫以劫持程式控制流並執行針對性的機器語言指令序列(稱為Gadgets)。 每一段gadget通常結束於return指令,並位於共用庫代碼中的子程式。系列呼叫這些代碼,攻擊者可以在擁有更簡單攻擊防範的程式內執行任意操作。
背景
堆疊溢位攻擊
ROP 是一種進階的堆疊溢位攻擊。這類攻擊往往利用操作堆疊呼叫時的程式漏洞,通常是緩衝區溢位。在緩衝區溢位中,在將數據存入主記憶體前未能正確檢查適當範圍的函數會收到多於正常承受範圍的數據,如果數據將寫入棧,多餘的數據會溢位為函數變數分配的空間並覆蓋替換返回地址(return address)。在原本用以重新導向控制流並返回給呼叫者的地址被覆蓋替換後,控制流將覆寫到新分配的地址。
標準的緩衝區溢位攻擊,攻擊者只需要寫出針對堆疊部分的代碼(有效載荷) 。直到 1990 年代後期,主流作業系統沒有為該類攻擊作出任何防範,微軟直到 2004 年才提供了緩衝區溢位保護。 作業系統最終使用數據執行保護技術來修補這個漏洞,該技術標記主記憶體數據不可執行。 啟用數據執行保護,機器將拒絕執行任何主記憶體中 user 級別可寫區域的代碼。該技術的硬件支援不久用以加強該防範。