返回導向程式設計

返回導向編程(英語:Return-Oriented Programming,縮寫:ROP)是電腦安全中的一種漏洞利用技術,該技術允許攻擊者在程式啟用了安全保護技術(如堆疊不可執行)的情況下控制程式執行流,執行惡意代碼[1]。其核心思想是通過棧緩衝區溢位等方式控制堆疊呼叫以劫持程式控制流並執行針對性的機器語言指令序列(稱為Gadgets[2]。所謂 gadgets 就是以 ret 結尾的指令序列,通過這些指令序列,我們可以修改某些位址的內容,方便控制程式的執行流程。[3]

「返回導向編程」的各地常用名稱
中國大陸返回導向編程、面向返回程序設計、面向返回編程
臺灣返回導向程式設計
港澳返回導向程式設計、返回導向編程

分類

編輯

依據對於 gadget 利用的形式,返回導向編程主要有以下幾種類型:

  • ret2text
  • ret2shellcode
  • ret2syscall
  • ret2libc
  • ret2dl_resolve
  • ret2VDSO
  • SROP
  • BROP

背景

編輯

堆疊溢位攻擊

編輯

ROP是一種進階的堆疊溢位攻擊。這類攻擊往往利用操作堆疊呼叫時的程式漏洞,通常是緩衝區溢位。在緩衝區溢位中,在將資料存入主記憶體前未能正確檢查適當範圍的函式會收到多於正常承受範圍的資料,如果資料將寫入棧,多餘的資料會溢位為函式變數分配的空間並覆蓋替換返回位址(return address)。在原本用以重新導向控制流並返回給呼叫者的位址被覆蓋替換後,控制流將覆寫到新分配的位址。

標準的緩衝區溢位攻擊,攻擊者只需要寫出針對堆疊部分的代碼(有效載荷)。直到1990年代後期,主流作業系統沒有為該類攻擊作出任何防範,微軟直到2004年才提供了緩衝區溢位保護。作業系統最終使用系統記憶體保護技術來修補這個漏洞,該技術標記主記憶體資料不可執行。 啟用系統記憶體保護,機器將拒絕執行任何主記憶體中user級別可寫區域的代碼。該技術的硬體支援不久用以加強該防範。

相關條目

編輯
  1. ^ Vázquez, Hugo. Check Point Secure Platform Hack (PDF). Pentest. Barcelona, Spain: Pentest Consultores: 219. October 1, 2007 [2021-02-21]. (原始內容存檔 (PDF)於2021-03-07). 簡明摘要 (英語). 
  2. ^ Buchanan, E.; Roemer, R.; Shacham, H.; Savage, S. When Good Instructions Go Bad: Generalizing Return-Oriented Programming to RISC (PDF). Proceedings of the 15th ACM conference on Computer and communications security - CCS '08. October 2008: 27–38 [2021-02-21]. ISBN 978-1-59593-810-7. doi:10.1145/1455770.1455776. (原始內容存檔 (PDF)於2017-08-11). 
  3. ^ 存档副本. [2021-04-19]. (原始內容存檔於2021-04-23).