UNIX下的緩沖區溢出深度防御體系

發表于:2009-06-09來源:作者:點擊數: 標簽:UnixUNIX防御體系緩沖區深度
------------ 談及防御之前 ------------ 首先簡要回顧一下緩沖區溢出的攻擊大系: ◆棧溢出(stack smashing) 未檢查輸入緩沖區長度,導致數組越界,覆蓋棧中局部變量空間之上的棧楨指針%ebp以及函數返回地址retaddr,當函數返回執行ret指令時, retaddr從
------------
談及防御之前
------------
    首先簡要回顧一下緩沖區溢出的攻擊大系:

    ◆棧溢出(stack smashing)
未檢查輸入緩沖區長度,導致數組越界,覆蓋棧中局部變量空間之上的棧楨指針%ebp以及函數返回地址retaddr,當函數返回執行ret指令時, retaddr從棧中彈出,作為下一條指令的地址賦給%eip寄存器,繼而改變原程序的執行流程指向我們的shellcode。

    ◆堆溢出(malloc/free heap corruption)
一種是和傳統的棧溢出一樣,當輸入超出malloc()預先分配的空間大小,就會覆蓋掉這段空間之后的一段存儲區域,如果該存儲區域有一個重要的變量比如 euid,那么我就可以用它來攻擊。另一種是典型的double-free堆腐敗,在內存回收操作中,合并相鄰空閑塊重新插入雙向鏈表時會有一個寫4字節內存的操作,如果弱點程序由于編程錯誤free()一個不存在的塊,我們就可以精心偽造這個塊,從而覆蓋任何我們想要的值:函數的返回地址、庫函數的. plt地址等

    ◆格式化字符竄漏洞(format string vulnerability)
如果格式竄由用戶定制,攻擊者就可以任意偽造格式竄,利用*printf()系列函數的特性就可以窺探堆??臻g的內容,超常輸入可以引發傳統的緩沖區溢出,或是用”%n”覆蓋指針、返回地址等。

    ◆整形變量溢出(integer variable overflow)
    利用整數的范圍、符號等問題觸發安全漏洞,大多數整形溢出不能直接利用,但如果該整形變量決定內存分配等操作,我們就有可能間接利用該漏洞。
    
    ◆其他的攻擊手法(others)
    只能算是手法,不能算是一種單獨的類別。利用ELF文件格式的特性如:覆蓋.plt(過程連接表)、.dtor(析構函數指針)、.got(全局偏移表)、return-to-libc(返回庫函數)等的方式進行攻擊。

----------------
一、編譯保護技術
----------------
◆Stackguard
    因為緩沖區溢出的通常都會改寫函數返回地址,stackguard是個編譯器補丁,它產生一個"canary"值(一個單字)放到返回地址的前面,如果當函數返回時,發現這個canary的值被改變了,就證明可能有人正在試圖進行緩沖區溢出攻擊,程序會立刻響應,發送一條入侵警告消息給syslogd,然后終止進程。"canary"包含:NULL(0x00), CR (0x0d), LF (0x0a) 和 EOF (0xff)四個字符,它們應該可以阻止大部分的字符串操作,使溢出攻擊無效。一個隨機數canary在程序執行的時候被產生。所以攻擊者不能通過搜索程序的二進制文件得到"canary"值。如果/dev/urandom存在,隨機數就從那里取得。否則,就從通過對當前時間進行編碼得到。其隨機性足以阻止絕大部分的預測攻擊。Immunix系統為采用stackguard編譯的Red Hat Linux,但stackguard所提供的保護并非絕對安全,滿足一些條件就可以突破限制:如覆蓋一個函數指針、可能存在的exit()或_exit ()系統調用地址、GOT等。
Stackguard官方鏈接:
http://immunix.org/

◆Stackshield
    StackShield使用了另外一種不同的技術。它的做法是創建一個特別的堆棧用來儲存函數返回地址的一份拷貝。它在受保護的函數的開頭和結尾分別增加一段代碼,開頭處的代碼用來將函數返回地址拷貝到一個特殊的表中,而結尾處的代碼用來將返回地址從表中拷貝回堆棧。因此函數執行流程不會改變,將總是正確返回到主調函數中。在新的版本中已經增加了一些新的保護措施,當調用一個地址在非文本段內的函數指針時,將終止函數的執行。
    Stackshield無法防御只覆蓋%ebp的單字節溢出,同樣,我們也可以通過覆蓋其他的ELF結構來繞過限制。
    www.angelfire.com/sk/stackshield/download.html

------------------

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97