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