Return-to-libc攻擊
![本頁使用了標題或全文手工轉換](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
![]() | 此條目翻譯自其他語言維基百科,需要相關領域的編者協助校對翻譯。 |
Return-to-libc攻擊(縮寫:ret2libc),即「返回至C標準庫攻擊」,是一種電腦安全攻擊。這種攻擊方式一般應用於緩衝區溢位中,其堆疊中的返回位址被替換為另一條指令的位址,並且堆疊的一部分被覆蓋以提供其參數。這允許攻擊者呼叫現有函式而無需注入惡意代碼到程式中。
縮寫為libc
的共享庫是C標準函式庫,提供了類UNIX作業系統中的C執行時支援。儘管攻擊者可以讓代碼返回到任意位置,但絕大多數情況下的目標都是libc
。這是因為libc
總是會被連結到程式中,並且它提供了對攻擊者而言一些相當有用的函式(如system()
呼叫可以只附加一個參數即執行外部程式)。這即是儘管返回位址可以指向另一個完全不同的區域,但這種攻擊仍被稱為return-to-libc的原因。
對 return-to-libc 攻擊的防護
一個被標記了不可執行位的堆疊可以阻止一些緩衝區溢位攻擊,但無論如何它無法防止return-to-libc攻擊。因為return-to-libc攻擊只用到了標記為可執行的代碼(libc中的函式均為可執行)。當然,攻擊者也只能夠呼叫已存在的函式。Stack-smashing 防護能夠阻止這種溢位,因為它可以檢測到損壞的堆疊並且有可能移除被攻擊的段(segment)。位址空間布局隨機化 (ASLR)使這種攻擊在64位元平台上變得幾乎不可能成功,因為所有函式的主記憶體位址都是隨機的。在32位元系統中,ASLR能夠提供部分防護,因為只有16位元位址可供用於隨機化,這可以用暴力攻擊在很少的幾分鐘內破解。[1]
相關攻擊
面向返回編程 是這種攻擊使用的精心完成的技術,並且,通過串聯起每次單獨的小型攻擊以執行小數目的指令,可被用於進行更一般的操作。
參見
參考資料
- ^ Shacham, Hovav; Page, Matthew; Pfaff, Ben; Goh, Eu-Jin; Modadugu, Nagendra; and Boneh, Dan. On the Effectiveness of Address-Space Randomization (PDF). Proceedings of Computer and Communications Security (CCS'04), October 25–29, 2004, Washington (DC). [2011-07-22]. (原始內容存檔 (PDF)於2011-09-15).
外部連結
- Bypassing non-executable-stack during exploitation using return-to-libc(頁面存檔備份,存於網際網路檔案館) by c0ntex at InfoSecWriters.com