版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1緩沖區(qū)溢出漏洞發(fā)掘模型緩沖區(qū)溢出漏洞發(fā)掘模型日期:2003.122 內(nèi)容摘要 簡(jiǎn)介(Introduction) 相關(guān)工作(Related Work) 我們的模型(Our Model) 總結(jié)(Conclusion)Copyright funnywei 20033 簡(jiǎn)介 研究的必要性 C和C+語(yǔ)言仍然是開發(fā)的主要工具 緩沖區(qū)溢出攻擊已成為主要攻擊手段Copyright funnywei 20034 相關(guān)工作(Related Work)靜態(tài)檢測(cè)(Static Detection)動(dòng)態(tài)檢測(cè)(Dynamic Detection)主要分為動(dòng)態(tài)和靜態(tài)檢測(cè)兩種方法,其中靜態(tài)檢測(cè)工具主要針對(duì)源碼做相應(yīng)檢測(cè),而
2、動(dòng)態(tài)檢測(cè)工具主要從對(duì)二進(jìn)制程序運(yùn)行時(shí)保護(hù)的角度出發(fā)。Copyright funnywei 20035 靜態(tài)檢測(cè)工具 第一代:lint 第二代:Splint和LClint第三代:Flowfinder,RATS,ITS4 Copyright funnywei 20036 動(dòng)態(tài)檢測(cè)工具FIST(Fault Injection Security Tool)Libsafe和LibverifyStack ShieldCopyright funnywei 20037 我們的檢測(cè)模型 靜態(tài)分析 動(dòng)態(tài)分析和測(cè)試Copyright funnywei 20038 靜態(tài)分析 目的:得到子過(guò)程調(diào)用的關(guān)系圖,以便后續(xù)的分
3、析。每一個(gè)子過(guò)程作為圖中的一個(gè)節(jié)點(diǎn),同時(shí)不安全的函數(shù)也作為一個(gè)節(jié)點(diǎn)存在。 方法: call和ret指令搜索 編譯器優(yōu)化和特征碼匹配 緩沖區(qū)邊界的定位 輔助:基于污點(diǎn)傳播的雙向數(shù)據(jù)流分析 Copyright funnywei 20039有向圖舉例:有向圖舉例:fun(char * arg)char src100 = “This is a test”;strcpy(arg, src);printf(“%s n”, arg);main()char dest100;fun(dest);printf(“%sn”, dest);Copyright funnywei 200310 有向圖節(jié)點(diǎn)記錄有向圖節(jié)點(diǎn)記
4、錄 子函數(shù)的起始位置 函數(shù)所分配的堆棧大小 函數(shù)局部變量的使用情況 調(diào)用者傳遞給函數(shù)的參數(shù) 調(diào)用者調(diào)用本函數(shù)的地址(即函數(shù)調(diào)用的返回地址)Copyright funnywei 200311 call和ret指令搜索 采用深度優(yōu)先或者廣度優(yōu)先的搜索算法。 Copyright funnywei 200312 編譯器優(yōu)化和特征碼匹配編譯器優(yōu)化和特征碼匹配 編譯器對(duì)程序進(jìn)行了優(yōu)化以提高執(zhí)行速度,有些函數(shù)(如strcpy,strcat)被硬編碼到程序中。 如:strcpy()main()char dest100;char src100;gets(src);strcpy(dest,src);return;
5、Copyright funnywei 200313 VC 6.0編譯器編譯器 思想:只要在程序中以思想:只要在程序中以ECX為核心對(duì)指令進(jìn)行匹配,同時(shí)為核心對(duì)指令進(jìn)行匹配,同時(shí)配合這三條字符串操作指令,就可以定位配合這三條字符串操作指令,就可以定位strcat和和strcpy。 repne scas byte ptr edi ;掃描源字符串,長(zhǎng)度存放在ecx中 not ecx . mov EnX, ECX . shr ecx, 2 rep movs dword ptr edi,dword ptr esi mov ecx,Enx and ecx, 3 . rep movs byte ptr ed
6、i,byte ptr esi Copyright funnywei 200314 VC 7.0編譯器編譯器 strcpy函數(shù)也會(huì)被硬編碼到程序中去,但是它產(chǎn)生的二進(jìn)制碼卻和VC6.0產(chǎn)生的二進(jìn)制碼有很大的區(qū)別。strcpy硬編碼如下:00401041 mov cl,byte ptr esp+eax 00401045 mov byte ptr esp+eax+14h,cl 00401049 inc eax 0040104A test cl,cl 0040104C jne 00401041因?yàn)樵谶@些硬編碼的代碼中使用了相對(duì)基址變址尋址方式,所以在VC7.0下簡(jiǎn)單提取strcpy的固定二進(jìn)制特征碼比
7、較難,但是我們可以結(jié)合指令的語(yǔ)義進(jìn)行分析,來(lái)構(gòu)建strcpy函數(shù)的特征碼。Copyright funnywei 200315 緩沖區(qū)邊界的定位緩沖區(qū)邊界的定位Libsafe對(duì)緩沖區(qū)估算采用最大化到棧幀的方法。本文思想:根據(jù)指令對(duì)內(nèi)存單元訪問(wèn)情況來(lái)界定緩沖區(qū)邊界。方法:(1)通過(guò)分析未直接訪問(wèn)的堆棧單元來(lái)確定目標(biāo)緩沖區(qū)長(zhǎng)度 (2)根據(jù)局部變量的訪問(wèn)方式來(lái)確定目標(biāo)緩沖區(qū)的長(zhǎng)度 (3)通過(guò)其他方法判斷緩沖區(qū)長(zhǎng)度 Copyright funnywei 200316 通過(guò)分析未直接訪問(wèn)的堆棧單元來(lái)確定目標(biāo)緩沖區(qū)長(zhǎng)度通過(guò)分析未直接訪問(wèn)的堆棧單元來(lái)確定目標(biāo)緩沖區(qū)長(zhǎng)度 對(duì)于普通的變量,如果沒(méi)有在程序中被使用,
8、那么程序?qū)⒉粫?huì)為其在堆棧中保留地址空間。但是對(duì)于數(shù)組字符數(shù)組來(lái)說(shuō),只要數(shù)組中有一個(gè)成員被訪問(wèn),程序就會(huì)在堆棧中為整個(gè)數(shù)組保留地址空間。然而在編譯后的程序中沒(méi)有任何一條指令對(duì)其余的地址空間進(jìn)行訪問(wèn)。 int main(int argc, char* argv)char dest100 = “this is me”;printf(%s, dest);strcpy(dest, this is a test);return 0;Copyright funnywei 200317首先, sub esp,64h 在堆棧中保留0 x64個(gè)字節(jié)的空間。其次,根據(jù)特征碼匹配和非安全函數(shù)調(diào)用匹配找到字符緩沖區(qū)的起
9、始位置:0040101E 56 push esi0040101F 57 push edi.0040105D 8D 54 24 08 lea edx,esp+8.00401065 8B FA mov edi,edx.0040106A F3 A5 rep movs dword ptr edi,dword ptr esi由此,我們可以認(rèn)為字符緩沖區(qū)的起始位置為esp+8。由于有壓棧的操作,ESP的值不固定,我們用base來(lái)代表程序開始時(shí)sub esp,64h所指向的位置。esp+8所指向的位置其實(shí)就是base。Copyright funnywei 200318然后可以分析以ESP,EBP為基址寄存器
10、的指令:00401015 89 44 24 00 mov dword ptr esp,eax0040101E 56 push esi0040101F 57 push edi00401020 89 4C 24 0C mov dword ptr esp+0Ch,ecx00401024 88 44 24 12 mov byte ptr esp+12h,al00401033 66 89 54 24 10 mov word ptr esp+10h,dx由上可以看出在程序保留的變量中,有很大一部分都沒(méi)有被指令所訪問(wèn),只是通過(guò)rep stos dword ptr edi將其設(shè)為0,而通過(guò)前面的分析已經(jīng)知道對(duì)
11、于普通變量來(lái)說(shuō),如果沒(méi)有被指令直接訪問(wèn)就不會(huì)為其在堆棧中保留地址空間,所以,我們就可以認(rèn)為,這些地址空間都在字符數(shù)組中。Copyright funnywei 200319 根據(jù)局部變量的訪問(wèn)方式來(lái)確定目標(biāo)緩沖區(qū)的長(zhǎng)度根據(jù)局部變量的訪問(wèn)方式來(lái)確定目標(biāo)緩沖區(qū)的長(zhǎng)度 main()char dest36 = “this is a test”;int a = 1;printf(“%s,%d”,dest, &a);對(duì)于普通變量來(lái)說(shuō),如果只是作為目的操作數(shù)而從來(lái)沒(méi)有作為源操作數(shù)使用,那么它將肯定被編譯器優(yōu)化掉。但是對(duì)于數(shù)組來(lái)說(shuō),即使其某個(gè)成員從頭到尾都作為目的操作數(shù)而存在,它也不會(huì)被編譯器優(yōu)化掉。通
12、過(guò)這個(gè)特性,我們就可以確定緩沖區(qū)的邊界。Copyright funnywei 200320在這個(gè)程序的匯編代碼中沒(méi)有出現(xiàn)rep stos指令,字符數(shù)組的初始化都是通過(guò)mov指令來(lái)完成的,所以,我們不能通過(guò)查找沒(méi)有直接使用的地址來(lái)判斷緩沖區(qū)的長(zhǎng)度。在這個(gè)程序中,只有兩條指令用堆棧中的變量作為源操作數(shù),0040103B 8D 54 24 00 lea edx,esp ;取變量a地址.00401043 8D 44 24 04 lea eax,esp+4 ;取字符串首址對(duì)于堆棧中其他的地址空間來(lái)說(shuō),它們都沒(méi)有被用作源操作數(shù),所以根據(jù)我們對(duì)編譯器優(yōu)化局部變量原則的分析,我們可以認(rèn)為這些地址所指向的存儲(chǔ)單
13、元都位于字符緩沖區(qū)中。Copyright funnywei 200321 通過(guò)其他方法判斷緩沖區(qū)長(zhǎng)度通過(guò)其他方法判斷緩沖區(qū)長(zhǎng)度 有些程序來(lái)說(shuō),在分配了緩沖區(qū)后首先調(diào)用函數(shù)對(duì)其進(jìn)行初始化 。只要找到相應(yīng)的API函數(shù)調(diào)用就很容易判斷出目標(biāo)緩沖區(qū)的大小和起始位置。char dest100;.ZeroMemory(dest, 100);. memset()函數(shù)在Release版本的程序中會(huì)被編譯成一條匯編語(yǔ)句 rep stos 。Copyright funnywei 200322 基于污點(diǎn)傳播的雙向數(shù)據(jù)流分析基于污點(diǎn)傳播的雙向數(shù)據(jù)流分析 思想思想 :來(lái)源于Perl中稱為“tainting”的機(jī)制。監(jiān)控
14、所謂的“不可信數(shù)據(jù)”,通常是由用戶輸入的,將這些輸入標(biāo)記為“tainted”。污點(diǎn)數(shù)據(jù)通過(guò)程序語(yǔ)句進(jìn)行傳播。 污點(diǎn)來(lái)源:污點(diǎn)來(lái)源:環(huán)境變量,參數(shù),文件,網(wǎng)絡(luò)輸入 污點(diǎn)傳播在源碼檢測(cè)中的運(yùn)用污點(diǎn)傳播在源碼檢測(cè)中的運(yùn)用 在二進(jìn)制代碼中的應(yīng)用在二進(jìn)制代碼中的應(yīng)用雙向數(shù)據(jù)流分析方法雙向數(shù)據(jù)流分析方法 Copyright funnywei 200323 污點(diǎn)傳播在源碼檢測(cè)中的運(yùn)用污點(diǎn)傳播在源碼檢測(cè)中的運(yùn)用 在數(shù)據(jù)類型前,加一個(gè)tainted類型限定詞表示該數(shù)據(jù)來(lái)源于一個(gè)不可信數(shù)據(jù)源。例如: int main(int argc, tainted char *argv);例:wuftpd 2.6.0的格式化
15、字符串漏洞。|-site_exec|-lreply|-vreplyCopyright funnywei 200324簡(jiǎn)化看作:簡(jiǎn)化看作:while(fgets(buf, sizeof buf, f)lreply(200, buf);void lreply(int n, char *fmt, )vsnprintf(buf, sizeof buf, fmt, ap);現(xiàn)實(shí)中format string的例子并不太可能是顯式的使用prinft(buf)這么容易檢測(cè)。而且多數(shù)情況下,真正出錯(cuò)的地方很有可能與最終調(diào)用vsnprinft,prinft的函數(shù)并不在一個(gè)源文件中。例如,上面所舉的wu exec”
16、例子,其分別在文件中文件中。 Copyright funnywei 200325 偏序關(guān)系偏序關(guān)系考慮例子:void f(tainted int);untainted int a;f(a)f期望的是tainted數(shù)據(jù),而傳入的是untainted的參數(shù)。允許!考慮第二個(gè)例子:void g(untainted int);tainted int b;g(b);在這種情況下,g期望untainted 而得到tainted的數(shù)據(jù),不允許!把兩個(gè)例子結(jié)合起來(lái),我們得到下面的偏序關(guān)系:untainted int tainted intCopyright funnywei 200326 在二進(jìn)制代碼中的應(yīng)用
17、在二進(jìn)制代碼中的應(yīng)用雙向數(shù)據(jù)流分析方法雙向數(shù)據(jù)流分析方法 一是從污點(diǎn)數(shù)據(jù)流開始分析,自上而下形成一棵傳播樹(Propagation Tree)。二是從strcpy等可能出錯(cuò)的函數(shù)開始,向上回溯。找到兩者相交的位置,從而產(chǎn)生污染流路徑(Tainted Flow Path)。當(dāng)然相交的位置可能不止一處,那么將產(chǎn)生多條污染流路徑。Copyright funnywei 200327 動(dòng)態(tài)分析及測(cè)試過(guò)程動(dòng)態(tài)分析及測(cè)試過(guò)程 思想:思想:動(dòng)態(tài)攔截所有可疑的函數(shù),在攔截時(shí)創(chuàng)建當(dāng)前調(diào)用的虛擬棧列表。在棧列表中,記錄所有函數(shù)緩沖區(qū)的情況。對(duì)于可疑函數(shù)所使用的緩沖區(qū),先分析它是位于堆中還是在棧中。接著,獲得相應(yīng)的數(shù)
18、值化描述信息,最后與限制條件相比,得到分析結(jié)果。Copyright funnywei 200328 虛擬棧虛擬棧 虛擬棧用來(lái)記錄棧的調(diào)用情況。同樣,在分析的過(guò)程中還可以很方便的定位出所分析的字符緩沖區(qū)在堆棧中的位置,生存周期等。 Copyright funnywei 200329 緩沖區(qū)數(shù)值化技術(shù)及限制條件的產(chǎn)生緩沖區(qū)數(shù)值化技術(shù)及限制條件的產(chǎn)生 David Wagner等人在參考文獻(xiàn)1中將緩沖區(qū)溢出的檢測(cè)問(wèn)題規(guī)范化為整數(shù)限制的問(wèn)題,并定義了限制語(yǔ)言(Constraint Language)。 Copyright funnywei 200330 限制條件的產(chǎn)生限制條件的產(chǎn)生 符號(hào)len(s)表示
19、當(dāng)前使用的長(zhǎng)度(包含結(jié)束字符0),范圍屬性為a, b。Alloc(s)表示buffer實(shí)際分配的大小,范圍屬性為c, d。 在對(duì)所有的變量進(jìn)行了范圍推斷之后,再進(jìn)行安全屬性檢查: 如果bd,那么肯定發(fā)生。 如果dbca, 那么溢出有可能發(fā)生。Copyright funnywei 200331 堆指針檢測(cè)的紅黑樹結(jié)構(gòu)及魔數(shù)定位法堆指針檢測(cè)的紅黑樹結(jié)構(gòu)及魔數(shù)定位法 思想:攔截堆內(nèi)存的分配函數(shù)(例如,Windows下攔截RtlHeapAlloc,Linux下攔截malloc)。在每次成功分配堆內(nèi)存的時(shí)候,采用紅黑樹記錄堆指針,或者在剛分配的堆內(nèi)存的起始位置記錄Meta Data信息。 Copyrig
20、ht funnywei 200332 紅黑樹(紅黑樹(Red/Black Tree)檢測(cè))檢測(cè) 樹中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)于一個(gè)已分配內(nèi)存,其關(guān)鍵字包含block的起始和結(jié)束地址。其插入和刪除的時(shí)間復(fù)雜度為O(logn),采用紅黑樹而不采用二叉樹主要是為了避免最壞情況的產(chǎn)生。導(dǎo)致時(shí)間復(fù)雜度為O(n)。 例子:addr(A1)addr(A2)addr(A5)Copyright funnywei 200333 魔數(shù)定位法(魔數(shù)定位法(Magic Number Location) 思想:使用一個(gè)特殊的數(shù)據(jù)結(jié)構(gòu)記錄在動(dòng)態(tài)內(nèi)存的開始地址,叫做 Meta Data。采用魔術(shù)定位法可以減少插入和刪除的復(fù)雜度。其搜索
21、時(shí)間為O(1),即線性時(shí)間。Copyright funnywei 200334 在每個(gè)分配的動(dòng)態(tài)內(nèi)存塊的開始部分插入一個(gè)頭部,來(lái)存儲(chǔ)特定的元數(shù)據(jù)。元數(shù)據(jù)包含兩個(gè)部分,一個(gè)是魔數(shù),一個(gè)是表的索引值。魔數(shù)是元數(shù)據(jù)的第一部分,它是精心選擇的一個(gè)數(shù),在正常的用戶程序里不太可能出現(xiàn)。表的每條記錄包含了已分配塊的地址和大小。 對(duì)于指針p,搜索其前面的內(nèi)存來(lái)匹配魔數(shù)。如果沒(méi)有匹配,就不可能是一個(gè)內(nèi)存塊的起始位置。反之,如果匹配,那么就有可能是我們找到了起始點(diǎn)。當(dāng)然,很有可能魔數(shù)在用戶區(qū)域里巧合。在魔數(shù)相匹配后,再根據(jù)index查找表中的相應(yīng)位置存儲(chǔ)的Start值來(lái)比較起始地址是不是和分配塊的地址一致。Copyright funny
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度專業(yè)自駕旅游包車代駕服務(wù)合同
- 2025年度棚改項(xiàng)目回遷房買賣合同范本
- 2025年桉樹種植基地環(huán)保設(shè)施建設(shè)與運(yùn)營(yíng)合同3篇
- 2025版智能城市基礎(chǔ)設(shè)施建設(shè)招投標(biāo)與合同管理指導(dǎo)文件2篇
- 萬(wàn)科旅游房產(chǎn)買賣合同(2024年專用)3篇
- 二零二五年度專業(yè)配音演員獨(dú)家聘用合同范本4篇
- 二零二五年度太陽(yáng)能熱水系統(tǒng)施工合同規(guī)范文本4篇
- 二零二五年度創(chuàng)業(yè)公司股權(quán)激勵(lì)及期權(quán)授予合同3篇
- 二零二五年度團(tuán)隊(duì)旅游數(shù)據(jù)共享合同
- 2025年度寫字樓退租合同(含辦公家具設(shè)備退還明細(xì))4篇
- 企業(yè)文化融入中華傳統(tǒng)文化的實(shí)施方案
- 9.1增強(qiáng)安全意識(shí) 教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 《化工設(shè)備機(jī)械基礎(chǔ)(第8版)》全套教學(xué)課件
- 人教版八年級(jí)數(shù)學(xué)下冊(cè)舉一反三專題17.6勾股定理章末八大題型總結(jié)(培優(yōu)篇)(學(xué)生版+解析)
- 2024屆上海高考語(yǔ)文課內(nèi)古詩(shī)文背誦默寫篇目(精校版)
- DL-T5024-2020電力工程地基處理技術(shù)規(guī)程
- 初中數(shù)學(xué)要背誦記憶知識(shí)點(diǎn)(概念+公式)
- 駕照體檢表完整版本
- 農(nóng)產(chǎn)品農(nóng)藥殘留檢測(cè)及風(fēng)險(xiǎn)評(píng)估
- 農(nóng)村高中思想政治課時(shí)政教育研究的中期報(bào)告
- 20100927-宣化上人《愣嚴(yán)咒句偈疏解》(簡(jiǎn)體全)
評(píng)論
0/150
提交評(píng)論