解析Unix下的緩沖區(qū)溢出防御體系 續(xù)
Unix下的緩沖區(qū)溢出防御分析如下:
一、數(shù)據(jù)段不可執(zhí)行
kNoX
Linux內(nèi)核補(bǔ)丁,功能:數(shù)據(jù)段的頁(yè)不可執(zhí)行,撤銷共享內(nèi)存,加強(qiáng)對(duì)execve系統(tǒng)調(diào)用的限制,對(duì)文件描述符0、1、2的特殊處理,/proc目錄的限制,F(xiàn)IFO限制,符號(hào)鏈接限制,該補(bǔ)丁只支2.2內(nèi)核。
RSX
Linux內(nèi)核模塊,數(shù)據(jù)段(stack、heap)不可執(zhí)行。
Exec shield
Exec-shield從內(nèi)核態(tài)顯示的跟蹤一個(gè)應(yīng)用程序所包含的可執(zhí)行映像的最大虛擬地址,動(dòng)態(tài)的維護(hù)這個(gè)“可執(zhí)行虛擬地址的最大值”稱為“可執(zhí)行限界”,每次發(fā)生進(jìn)程切換的時(shí)候調(diào)度進(jìn)程就會(huì)用這個(gè)值更新代碼段描述符寫入GDT,exec-shield動(dòng)態(tài)的跟蹤每個(gè)應(yīng)用程序,所以每個(gè)程序運(yùn)行時(shí)都有不同的“可執(zhí)行限界”,因?yàn)榭蓤?zhí)行限界通常是個(gè)很低的虛擬地址,所以除了stack以外mmap()映射的區(qū)域以及malloc()分配的空間都處在可執(zhí)行限界之上,因此都是不可執(zhí)行的。當(dāng)然Exec-shield無(wú)法防御跳轉(zhuǎn)到低16M地址空間和return-to-libc的攻擊,不過(guò)還是能阻止絕大多數(shù)把shellcode安置在數(shù)據(jù)段的攻擊。
二、增強(qiáng)的緩沖區(qū)溢出保護(hù)及內(nèi)核MAC
OpenBSD security feature
OpenBSD和Hardened Gentoo、Adamantix、SELinux都是屬于默認(rèn)安全等級(jí)非常高的操作系統(tǒng)。OpenBSD經(jīng)過(guò)代碼審計(jì),
漏洞非常少。同樣他具有很多安全特性:
使用strlcpy()和strlcat()函數(shù)替換原有的危險(xiǎn)函數(shù)
內(nèi)存保護(hù):W^X、只讀數(shù)據(jù)段、頁(yè)保護(hù)、mmap()隨機(jī)映射、malloc()隨機(jī)映射、atexit()及stdio保護(hù)、
特權(quán)分離
特權(quán)回收
BSD chroot jail
其他的很多特性
其中W^X有不少內(nèi)容:stack、mmap隨機(jī)映射,只讀GOT/PLT/.ctor/.dtor等。雖然理論上OpenBSD無(wú)法阻止所有類型的攻擊,
但已經(jīng)阻斷了不少攻擊手法。
PaX
PaX是個(gè)非常BT的東西,好像天生就是緩沖區(qū)溢出的死對(duì)頭,他嚴(yán)厲的審視每一種攻擊方式,予以阻斷。
基于x86段式內(nèi)存管理的數(shù)據(jù)段不可執(zhí)行
基于頁(yè)式內(nèi)存管理的數(shù)據(jù)段的頁(yè)不可執(zhí)行
內(nèi)核頁(yè)只讀{
-Const結(jié)構(gòu)只讀
-系統(tǒng)調(diào)用表只讀
-局部段描述符表(IDT)只讀
-全局段描述符表(GDT)只讀
-數(shù)據(jù)頁(yè)只讀
-該特性不能與正常的LKM功能共存 }
完全的地址空間隨機(jī)映射{
-每個(gè)系統(tǒng)調(diào)用的內(nèi)核棧隨機(jī)映射
-用戶棧隨機(jī)映射
-ELF可執(zhí)行映像隨機(jī)映射
-Brk()分配的heap隨機(jī)映射
-Mmap()管理的heap隨機(jī)映射
-動(dòng)態(tài)鏈接庫(kù)隨機(jī)映射 }
還有諸如把動(dòng)態(tài)鏈接庫(kù)映射到0x00開(kāi)始的低地址的其他特性
這里順便提一下Phrack58上Nergal寫過(guò)的<>,這篇大作里提到用偽造棧楨(Fakeframe)和dl-resolve()技術(shù)突破PaX若干保護(hù)的方法,這極有可能*nix應(yīng)用層exploit技術(shù)中最高級(jí)的技術(shù),Nergal解決了幾個(gè)問(wèn)題:Stack/Heap/BSS不可執(zhí)行、mmap隨機(jī)映射,顯然這種高級(jí)的技術(shù)仍然無(wú)法無(wú)條件的突破PaX,所以在一個(gè)運(yùn)行完全版PaX的Linux上,你想發(fā)動(dòng)緩沖區(qū)溢出可能是沒(méi)有機(jī)會(huì)的!!!
Grsecurity
Grsec內(nèi)含PaX和Lids一樣grsec支持內(nèi)核MAC(Madatory Access Control,強(qiáng)制訪問(wèn)控制)
Unix下的緩沖區(qū)溢出防御體系的解析就向大家介紹完了,希望大家已經(jīng)掌握。
【編輯推薦】