面向返回編程(英語:Return-Oriented Programming,縮寫:ROP)是計(jì)算機(jī)安全漏洞利用技術(shù),該技術(shù)允許攻擊者在安全防御的情況下執(zhí)行代碼,如不可執(zhí)行的內(nèi)存和代碼簽名。
特點(diǎn)攻擊者控制堆棧調(diào)用以劫持程序控制流并執(zhí)行針對(duì)性的機(jī)器語言指令序列(稱為Gadgets)。 每一段gadget通常結(jié)束于return指令,并位于共享庫代碼中的子程序。系列調(diào)用這些代碼,攻擊者可以在擁有更簡單攻擊防范的程序內(nèi)執(zhí)行任意操作1。
堆棧溢出攻擊ROP是一種高級(jí)的堆棧溢出攻擊。這類攻擊往往利用操作堆棧調(diào)用時(shí)的程序漏洞,通常是緩沖區(qū)溢出。在緩沖區(qū)溢出中,在將數(shù)據(jù)存入內(nèi)存前未能正確檢查適當(dāng)范圍的函數(shù)會(huì)收到多于正常承受范圍的數(shù)據(jù),如果數(shù)據(jù)將寫入棧,多余的數(shù)據(jù)會(huì)溢出為函數(shù)變量分配的空間并覆蓋替換返回地址(return address)。在原本用以重定向控制流并返回給調(diào)用者的地址被覆蓋替換后,控制流將改寫到新分配的地址。
標(biāo)準(zhǔn)的緩沖區(qū)溢出攻擊,攻擊者只需要寫出針對(duì)堆棧部分的代碼(有效載荷)。直到1990年代后期,主流操作系統(tǒng)沒有為該類攻擊作出任何防范,微軟直到2004年才提供了緩沖區(qū)溢出保護(hù)。操作系統(tǒng)最終使用數(shù)據(jù)執(zhí)行保護(hù)技術(shù)來修補(bǔ)這個(gè)漏洞,該技術(shù)標(biāo)記內(nèi)存數(shù)據(jù)不可執(zhí)行。 啟用數(shù)據(jù)執(zhí)行保護(hù),機(jī)器將拒絕執(zhí)行任何內(nèi)存中user級(jí)別可寫區(qū)域的代碼。該技術(shù)的硬件支持不久用以加強(qiáng)該防范2。
本詞條內(nèi)容貢獻(xiàn)者為:
李航 - 副教授 - 西南大學(xué)