




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、緩沖區(qū)溢出漏洞發(fā)掘模型緩沖區(qū)溢出漏洞發(fā)掘模型funnywei日期:2019.12 內容摘要 簡介Introduction) 相關工作Related Work) 我們的模型Our Model) 總結Conclusion)Copyright funnywei 2019 簡介 研究的必要性 C和C+語言仍然是開發(fā)的主要工具 緩沖區(qū)溢出攻擊已成為主要攻擊手段Copyright funnywei 2019 相關工作Related Work) 靜態(tài)檢測Static Detection) 動態(tài)檢測Dynamic Detection) 主要分為動態(tài)和靜態(tài)檢測兩種方法,其中靜態(tài)檢 測工具主要針對源碼做相應檢測,
2、而動態(tài)檢測工 具主要從對二進制程序運行時保護的角度出發(fā)。Copyright funnywei 2019 靜態(tài)檢測工具 第一代:lint 第二代:Splint和LClint 第三代:Flowfinder,RATS,ITS4 Copyright funnywei 2019 動態(tài)檢測工具 FISTFault Injection Security Tool) Libsafe和Libverify Stack ShieldCopyright funnywei 2019 我們的檢測模型 靜態(tài)分析 動態(tài)分析和測試Copyright funnywei 2019 靜態(tài)分析 目的:得到子過程調用的關系圖,以便后續(xù)的
3、分析。每一個子過程作為圖中的一個節(jié)點,同時不安全的函數也作為一個節(jié)點存在。 方法: call和ret指令搜索 編譯器優(yōu)化和特征碼匹配 緩沖區(qū)邊界的定位 輔助:基于污點傳播的雙向數據流分析 Copyright funnywei 2019有向圖舉例:有向圖舉例: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 2019 有向圖節(jié)點記錄有向圖節(jié)點記
4、錄 子函數的起始位置子函數的起始位置 函數所分配的堆棧大小函數所分配的堆棧大小 函數局部變量的使用情況函數局部變量的使用情況 調用者傳遞給函數的參數調用者傳遞給函數的參數 調用者調用本函數的地址即函數調用的調用者調用本函數的地址即函數調用的返回地址)返回地址)Copyright funnywei 2019 call和ret指令搜索 采用深度優(yōu)先或者廣度優(yōu)先的搜索算法。 Copyright funnywei 2019 編譯器優(yōu)化和特征碼匹配編譯器優(yōu)化和特征碼匹配 編譯器對程序進行了優(yōu)化以提高執(zhí)行速度,有些函數如編譯器對程序進行了優(yōu)化以提高執(zhí)行速度,有些函數如strcpy,strcat被硬編碼到程
5、序中。被硬編碼到程序中。 如:如:strcpy()() main()() char dest100;char src100;getssrc););strcpydest,src););return; Copyright funnywei 2019 VC 6.0編譯器編譯器 思想:只要在程序中以思想:只要在程序中以ECX為核心對指令進行匹為核心對指令進行匹配,同時配合這三條字符串操作指令,就可以定配,同時配合這三條字符串操作指令,就可以定位位strcat和和strcpy。 repne scas byte ptr edi ;掃描源字符串,;掃描源字符串,長度存放在長度存放在ecx中中 not ecx
6、 . mov EnX, ECX . shr ecx, 2 rep movs dword ptr edi,dword ptr esi movecx, Enx and ecx, 3 . rep movs byte ptr edi,byte ptr esi Copyright funnywei 2019 VC 7.0編譯器編譯器 strcpy函數也會被硬編碼到程序中去,但是它產函數也會被硬編碼到程序中去,但是它產生的二進制碼卻和生的二進制碼卻和VC6.0產生的二進制碼有很大產生的二進制碼有很大的區(qū)別。的區(qū)別。 strcpy硬編碼如下:硬編碼如下: 00401041 mov cl,byte ptr e
7、sp+eax 00401045 mov byte ptr esp+eax+14h,cl 00401049 inc eax 0040104A test cl,cl 0040104C jne 00401041因為在這些硬編碼的代碼中使用了相對基址因為在這些硬編碼的代碼中使用了相對基址變址尋址方式,所以在變址尋址方式,所以在VC7.0下簡單提取下簡單提取strcpy的固定二進制特征碼比較難,但是我們可以結合的固定二進制特征碼比較難,但是我們可以結合指令的語義進行分析,來構建指令的語義進行分析,來構建strcpy函數的特征函數的特征碼。碼。Copyright funnywei 2019 緩沖區(qū)邊界的定
8、位緩沖區(qū)邊界的定位 Libsafe對緩沖區(qū)估算采用最大化到棧幀的方法。對緩沖區(qū)估算采用最大化到棧幀的方法。 本文思想:根據指令對內存單元訪問情況來界定本文思想:根據指令對內存單元訪問情況來界定緩沖區(qū)緩沖區(qū) 邊境。邊境。 方法:方法: (1通過分析未直接訪問的堆棧單元來確定目通過分析未直接訪問的堆棧單元來確定目標緩沖區(qū)長度標緩沖區(qū)長度 (2根據局部變量的訪問方式來確定目標緩沖根據局部變量的訪問方式來確定目標緩沖區(qū)的長度區(qū)的長度 (3通過其他方法判斷緩沖區(qū)長度通過其他方法判斷緩沖區(qū)長度 Copyright funnywei 2019 通過分析未直接訪問的堆棧單元來確定目標緩沖區(qū)長度通過分析未直接訪
9、問的堆棧單元來確定目標緩沖區(qū)長度 對于普通的變量,如果沒有在程序中被使用,那么程序將對于普通的變量,如果沒有在程序中被使用,那么程序將不會為其在堆棧中保留地址空間。但是對于數組字符數組不會為其在堆棧中保留地址空間。但是對于數組字符數組來說,只要數組中有一個成員被訪問,程序就會在堆棧中來說,只要數組中有一個成員被訪問,程序就會在堆棧中為整個數組保留地址空間。然而在編譯后的程序中沒有任為整個數組保留地址空間。然而在編譯后的程序中沒有任何一條指令對其余的地址空間進行訪問。何一條指令對其余的地址空間進行訪問。 int main(int argc, char* argv)char dest100 = “
10、this is me”;printf(%s, dest);strcpy(dest, this is a test);return 0;Copyright funnywei 2019首先, sub esp,64h 在堆棧中保留0 x64個字節(jié)的空間。其次,根據特征碼匹配和非安全函數調用匹配找到字符緩沖區(qū)的起始位置: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,dw
11、ord ptr esi由此,我們可以認為字符緩沖區(qū)的起始位置為esp+8。由于有壓棧的操作,ESP的值不固定,我們用base來代表程序開始時sub esp,64h所指向的位置。esp+8所指向的位置其實就是base。Copyright funnywei 2019然后可以分析以ESP,EBP為基址寄存器的指令: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、 12 mov byte ptr esp+12h,al00401033 66 89 54 24 10 mov word ptr esp+10h,dx由上可以看出在程序保留的變量中,有很大一部分都沒有被指令所訪問,只是通過rep stos dword ptr edi將其設為0,而通過前面的分析已經知道對于普通變量來說,如果沒有被指令直接訪問就不會為其在堆棧中保留地址空間,所以,我們就可以認為,這些地址空間都在字符數組中。Copyright funnywei 2019 根據局部變量的訪問方式來確定目標緩沖區(qū)的長度根據局部變量的訪問方式來確定目標緩沖區(qū)的長度 main()() char dest36
13、 = “this is a test”;int a = 1;printf(“%s,%d”,dest, &a);); 對于普通變量來說,如果只是作為目的操作數而從來沒有對于普通變量來說,如果只是作為目的操作數而從來沒有作為源操作為源操 作數使用,那么它將肯定被編譯器優(yōu)化掉。但是對于數組作數使用,那么它將肯定被編譯器優(yōu)化掉。但是對于數組來說,即來說,即 使其某個成員從頭到尾都作為目的操作數而存在,它也不使其某個成員從頭到尾都作為目的操作數而存在,它也不會被編譯會被編譯 器優(yōu)化掉。通過這個特性,我們就可以確定緩沖區(qū)的邊界。器優(yōu)化掉。通過這個特性,我們就可以確定緩沖區(qū)的邊界。Copyright
14、 funnywei 2019在這個程序的匯編代碼中沒有出現rep stos指令,字符數組的初始化都是通過mov指令來完成的,所以,我們不能通過查找沒有直接使用的地址來判斷緩沖區(qū)的長度。在這個程序中,只有兩條指令用堆棧中的變量作為源操作數,0040103B 8D 54 24 00 lea edx,esp ;取變量a地址.00401043 8D 44 24 04 lea eax,esp+4 ;取字符串首址對于堆棧中其他的地址空間來說,它們都沒有被用作源操作數,所以根據我們對編譯器優(yōu)化局部變量原則的分析,我們可以認為這些地址所指向的存儲單元都位于字符緩沖區(qū)中。Copyright funnywei 2
15、019 通過其他方法判斷緩沖區(qū)長度通過其他方法判斷緩沖區(qū)長度 有些程序來說,在分配了緩沖區(qū)后首先調用函有些程序來說,在分配了緩沖區(qū)后首先調用函數對其進行初始化數對其進行初始化 。只要找到相應的。只要找到相應的API函數調函數調用就很容易判斷出目標緩沖區(qū)的大小和起始位置。用就很容易判斷出目標緩沖區(qū)的大小和起始位置。 char dest100; . ZeroMemorydest, 100);); . memset()函數在函數在Release版本的程序中會被版本的程序中會被編譯成一條匯編語句編譯成一條匯編語句 rep stos 。Copyright funnywei 2019 基于污點傳播的雙向數
16、據流分析基于污點傳播的雙向數據流分析 思想思想 :來源于:來源于Perl中稱為中稱為“tainting的機制。監(jiān)的機制。監(jiān)控所謂的控所謂的“不可信數據不可信數據”,通常是由用戶輸入的,通常是由用戶輸入的,將這些輸入標記為將這些輸入標記為“tainted”。污點數據通過程序。污點數據通過程序語句進行傳播。語句進行傳播。 污點來源:環(huán)境變量,參數,文件,網絡輸入污點來源:環(huán)境變量,參數,文件,網絡輸入 污點傳播在源碼檢測中的運用污點傳播在源碼檢測中的運用 在二進制代碼中的應用在二進制代碼中的應用雙向數據流分析方法雙向數據流分析方法 Copyright funnywei 2019 污點傳播在源碼檢測
17、中的運用污點傳播在源碼檢測中的運用 在數據類型前,加一個在數據類型前,加一個tainted類型限定詞表示該類型限定詞表示該數據來源于一個不可信數據源。例如:數據來源于一個不可信數據源。例如: int main(int argc, tainted char *argv); 例:例:wuftpd 2.6.0的格式化字符串漏洞。的格式化字符串漏洞。 |-site_exec|-lreply|-vreplyCopyright funnywei 2019簡化看作:簡化看作:while(fgets(buf, sizeof buf, f)lreply(200, buf);void lreply(int n,
18、char *fmt, )vsnprintf(buf, sizeof buf, fmt, ap);現實中現實中format string的例子并不太可能是顯式的例子并不太可能是顯式的使用的使用prinft(buf)這么容易檢測。而且多數情這么容易檢測。而且多數情況下,真正出錯的地方很有可能與最終調用況下,真正出錯的地方很有可能與最終調用vsnprinft,prinft的函數并不在一個源文件中。的函數并不在一個源文件中。例如,上面所舉的例如,上面所舉的wuftp“site exec例子,例子,其分別在其分別在ftpcmd.y文件中文件中ftpd.c文件中。文件中。 Copyright funnyw
19、ei 2019 偏序關系偏序關系 考慮例子:考慮例子:void f(tainted int);untainted int a;f(a)f期望的是期望的是tainted數據,而傳入的是數據,而傳入的是untainted的參數。允許!的參數。允許! 考慮第二個例子:考慮第二個例子: void g(untainted int); tainted int b; g(b); 在這種情況下,在這種情況下,g期望期望untainted 而得到而得到tainted的數據,不允許!的數據,不允許! 把兩個例子結合起來,我們得到下面的偏序關系:把兩個例子結合起來,我們得到下面的偏序關系:untainted int
20、 tainted intCopyright funnywei 2019 在二進制代碼中的應用在二進制代碼中的應用雙向數據流分析方法雙向數據流分析方法 一是從污點數據流開始分析,自上而下形成一棵一是從污點數據流開始分析,自上而下形成一棵傳播樹傳播樹Propagation Tree)。二是從)。二是從strcpy等等可能出錯的函數開始,向上回溯。找到兩者相交可能出錯的函數開始,向上回溯。找到兩者相交的位置,從而產生污染流路徑的位置,從而產生污染流路徑Tainted Flow Path)。當然相交的位置可能不止一處,那么將)。當然相交的位置可能不止一處,那么將產生多條污染流路徑。產生多條污染流路徑。
21、Copyright funnywei 2019 動態(tài)分析及測試過程動態(tài)分析及測試過程 思想:動態(tài)攔截所有可疑思想:動態(tài)攔截所有可疑的函數,在攔截時創(chuàng)建當的函數,在攔截時創(chuàng)建當前調用的虛擬棧列表。在前調用的虛擬棧列表。在棧列表中,記錄所有函數棧列表中,記錄所有函數緩沖區(qū)的情況。對于可疑緩沖區(qū)的情況。對于可疑函數所使用的緩沖區(qū),先函數所使用的緩沖區(qū),先分析它是位于堆中還是在分析它是位于堆中還是在棧中。接著,獲得相應的棧中。接著,獲得相應的數值化描述信息,最后與數值化描述信息,最后與限制條件相比,得到分析限制條件相比,得到分析結果。結果。Copyright funnywei 2019 虛擬棧虛擬棧
22、虛擬棧用來記錄棧虛擬棧用來記錄棧的調用情況。同樣,的調用情況。同樣,在分析的過程中還在分析的過程中還可以很方便的定位可以很方便的定位出所分析的字符緩出所分析的字符緩沖區(qū)在堆棧中的位沖區(qū)在堆棧中的位置,生存周期等。置,生存周期等。 Copyright funnywei 2019 緩沖區(qū)數值化技術及限制條件的產生緩沖區(qū)數值化技術及限制條件的產生 David Wagner等人在參考文獻等人在參考文獻1中將緩沖區(qū)溢中將緩沖區(qū)溢出的檢測問題規(guī)范化為整數限制的問題,并定義出的檢測問題規(guī)范化為整數限制的問題,并定義了限制語言了限制語言Constraint Language)。)。 Copyright fun
23、nywei 2019 限制條件的產生限制條件的產生 符號符號len(s)表示當前使用的長度包含結束字表示當前使用的長度包含結束字符符0),范圍屬性為),范圍屬性為a, b。Alloc(s)表示表示buffer實際分配的大小實際分配的大小,范圍屬性為范圍屬性為c, d。 在對所有的變量進行了范圍推斷之后,再進行安在對所有的變量進行了范圍推斷之后,再進行安全屬性檢查:全屬性檢查: 如果如果bd,那么肯定發(fā)生。,那么肯定發(fā)生。 如果如果dbca, 那么溢出有可能發(fā)生。那么溢出有可能發(fā)生。Copyright funnywei 2019 堆指針檢測的紅黑樹結構及魔數定位法堆指針檢測的紅黑樹結構及魔數定位
24、法 思想:攔截堆內存的分配函數例如,思想:攔截堆內存的分配函數例如,Windows下攔截下攔截RtlHeapAlloc,Linux下攔截下攔截malloc)。)。在每次成功分配堆內存的時候,采用紅黑樹記錄在每次成功分配堆內存的時候,采用紅黑樹記錄堆指針,或者在剛分配的堆內存的起始位置記錄堆指針,或者在剛分配的堆內存的起始位置記錄Meta Data信息。信息。 Copyright funnywei 2019 紅黑樹紅黑樹Red/Black Tree檢測檢測 樹中的每個節(jié)點對應于一個已分配內存,其關鍵樹中的每個節(jié)點對應于一個已分配內存,其關鍵字包含字包含block的起始和結束地址。其插入和刪除的起
25、始和結束地址。其插入和刪除的時間復雜度為的時間復雜度為O(logn),采用紅黑樹而不采用二,采用紅黑樹而不采用二叉樹主要是為了避免最壞情況的產生。導致時間叉樹主要是為了避免最壞情況的產生。導致時間復雜度為復雜度為O(n)。 例子:例子:addr(A1)addr(A2)addr(A5)Copyright funnywei 2019 魔數定位法魔數定位法Magic Number Location) 思想:使用一個特殊的數據結構記錄在動態(tài)內存的開始地思想:使用一個特殊的數據結構記錄在動態(tài)內存的開始地址,叫做址,叫做 Meta Data。采用魔術定位法可以減少插入和。采用魔術定位法可以減少插入和刪除的
26、復雜度。其搜索時間為刪除的復雜度。其搜索時間為O(1),即線性時間。,即線性時間。Copyright funnywei 2019 在每個分配的動態(tài)內存塊的開始部分插入一個頭部,來存儲特定的元數據。元數據包含兩個部分,一個是魔數,一個是表的索引值。魔數是元數據的第一部分,它是精心選擇的一個數,在正常的用戶程序里不太可能出現。表的每條記錄包含了已分配塊的地址和大小。 對于指針p,搜索其前面的內存來匹配魔數。如果沒有匹配,就不可能是一個內存塊的起始位置。反之,如果匹配,那么就有可能是我們找到了起始點。當然,很有可能魔數在用戶區(qū)域里巧合。在魔數相匹配后,再根據index查找表中的相應位置存儲的Start值來比較起始地址是不是和分配塊的地址一致。Copyright funnywei 2019 進程跟蹤與調試進程跟蹤與調試 捕獲函數調用異常對于捕獲函數調用異常對于Windows而言)而言) DebugActiveProcess attach到一個活動進程。到一個活動進程。終止調試使用終止調試使用DebugActiveProcess
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 影響化學反應速率的因素教案 (一)
- 企業(yè)培訓課件pop海報
- Photoshop平面設計基礎 課件 任務6.2 珠寶雜志封面
- 英語 九年級全冊
- 餐飲店品牌形象保護與侵權糾紛處理合同范本
- 海鮮餐廳經營權轉讓協議
- 環(huán)保產業(yè)現場安全評估咨詢服務協議
- 成都離婚協議書起草與共同財產分割及債務分擔策略
- 企事業(yè)單位內部停車場租賃與員工福利合同
- 勞務派遣考勤考核方案
- JJG 597-2025交流電能表檢定裝置檢定規(guī)程
- 2025年廣州市中考物理試題(含答案)
- 2024年漳州市常山開發(fā)區(qū)招聘筆試真題
- 2024年09月年中國農業(yè)發(fā)展銀行江蘇省分行秋季校園招聘(86人)筆試歷年參考題庫附帶答案詳解
- 2025-2026年中國臺球產業(yè)消費趨勢報告
- 2025年第十屆“學憲法、講憲法”網絡知識競賽題庫(含答案)
- 定額〔2025〕1號文-關于發(fā)布2018版電力建設工程概預算定額2024年度價格水平調整的通知
- hs編碼對照表.xls
- 最新四川水利工程質量備案表格填寫范例
- 臨海市括蒼鎮(zhèn)鎮(zhèn)區(qū)控制性詳細規(guī)劃
- 工程更改控制程序DFCPQEOMS-06
評論
0/150
提交評論