堆溢出及其利用技術(shù)深入研究課件_第1頁
堆溢出及其利用技術(shù)深入研究課件_第2頁
堆溢出及其利用技術(shù)深入研究課件_第3頁
堆溢出及其利用技術(shù)深入研究課件_第4頁
堆溢出及其利用技術(shù)深入研究課件_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Windows2003堆溢出及其利用技術(shù)深入研究作者:FlashSky日期:2003-12-26Windows2003堆溢出及其利用技術(shù)深入研究作者:F1感謝

安全焦點所有的成員與啟明星辰積極防御實驗室的同事主講目錄

WINDOWS堆結(jié)構(gòu)簡介WINDOWS堆溢出利用WINDOWS2003堆溢出保護WINDOWS2003堆溢出保護的弱點思路的延續(xù):弱點利用深入的討論思路的突變:更廣泛的另類有效利用的手段未來WINDOWS2003堆溢出利用研究的方向Copyright?FlashSky@2003感謝Copyright?FlashSky@xfocus2WINDOWS堆結(jié)構(gòu)簡介(1)前言 WINDOWS2003,系統(tǒng)低層的安全性改進 本文的目的當前關(guān)于WINDOWS堆的研究 WINDOWS堆管理結(jié)構(gòu)與管理特性的研究 WINDOWS堆特性在堆溢出時的利用的研究 WINDOWS2003的堆特性的研究Copyright?FlashSky@2003WINDOWS堆結(jié)構(gòu)簡介(1)Copyright?Fl3WINDOWS堆結(jié)構(gòu)簡介(2)WINDOWS堆結(jié)構(gòu)簡介 堆與堆塊 堆管理結(jié)構(gòu)與堆塊管理結(jié)構(gòu) 堆的整體結(jié)構(gòu)構(gòu)架

Copyright?FlashSky@2003WINDOWS堆結(jié)構(gòu)簡介(2)Copyright?Fl4Copyright?FlashSky@2003堆管理結(jié)構(gòu)塊(SIZE:0X640/0XC50)堆段表塊0(SIZE:0X40)小堆塊分配管理表結(jié)構(gòu)(SIZE:0X1818),可選用戶堆塊數(shù)據(jù)區(qū)堆的基地址一般緊接著堆管理結(jié)構(gòu)塊之后Copyright?FlashSky@xfocus.or5WINDOWS堆結(jié)構(gòu)簡介(3)WINDOWS堆塊分配與釋放的管理

大堆塊對象與小堆塊對象空閑堆塊雙向鏈表頭 空閑大堆對象與空閑小堆對象入鏈算法

Copyright?FlashSky@2003WINDOWS堆結(jié)構(gòu)簡介(3)Copyright?Fl6WINDOWS堆溢出利用(1)基本原理常見的普通利用方式: 引起空閑堆組成的雙向鏈表的脫鏈的操作

Copyright?FlashSky@2003WINDOWS堆溢出利用(1)Copyright?Fl7Copyright?FlashSky@2003NextP2PrevP0NextP3PrevP1NextP4PrevP2NextP3/PrevP3NextP2/PrevP2NextP1/PrevP1NextP3PrevP0NextP3PrevP1NextP4PrevP1一個正常的堆塊脫鏈表過程Copyright?FlashSky@xfocus.or8WINDOWS堆溢出利用(2)雙向鏈表的入鏈利用的可能性 可利用的原理 利用的要求

Copyright?FlashSky@2003WINDOWS堆溢出利用(2)Copyright?Fl9NextP3PrevP0NextP3PrevP1NextP4PrevP1NextP3/PrevP3NextP2/PrevP2NextP1/PrevP1NextP2PrevP0NextP4PrevP1UNKNUNKPNextP3PrevP1NextP2PrevP0NextP4PrevP2一個正常的大堆塊插入入鏈表過程Copyright?FlashSky@2003NextP3PrevP0NextP3PrevP1NextP410WINDOWS堆溢出利用(3)覆蓋空閑大堆可以達到的目的:

我們能將一個當前釋放堆的地址填入到一個由我們指定的內(nèi)存地址中

Copyright?FlashSky@2003WINDOWS堆溢出利用(3)Copyright?Fl11NextP3PrevP0NextP4PrevP1NextP3PrevP0JMPTSEHPTSEHNextP3PrevP0JMPNextP2NextP2NextP3SEHPTOPSEHTOPSEH一個利用大堆塊插入入鏈表的過程NextP3/PrevP3NextP1/PrevP1NextP2/PrevP2Copyright?FlashSky@2003NextP3PrevP0NextP4PrevP1NextP312WINDOWS堆溢出利用(4)入鏈表利用的進一步

問題:當前釋放堆塊地址的前8字節(jié)內(nèi)容是我們無法控制的指針價值。 解決方法:再次分配時候可以將我們可以控制的4字節(jié)寫入

Copyright?FlashSky@2003WINDOWS堆溢出利用(4)Copyright?Fl13Copyright?FlashSky@2003NextP3PrevP0JMPNextP2NextP2JMPSEHPNextP3PrevP0JMPNextP2NextP2JMPSEHPTOPSEHJMPADDR觸發(fā)異常利用分配再次寫入JMP代碼到頭四字節(jié)Copyright?FlashSky@xfocus.or14WINDOWS堆溢出利用(5)WINDOWS堆溢出可以利用的途徑

脫鏈表時 入鏈表時Copyright?FlashSky@2003WINDOWS堆溢出利用(5)Copyright?Fl15WINDOWS2003堆溢出保護(1)基于堆溢出利用原理的檢查 基于覆蓋雙向鏈表的地址導致可寫入任一地址空間 檢查上下鏈表的一致性可以檢查和防止堆溢出的利用

Copyright?FlashSky@2003WINDOWS2003堆溢出保護(1)Copyright16Copyright?FlashSky@2003

leaecx,[esi+8] movedi,[ecx] mov[ebp-0D8h],edi moveax,[esi+0Ch] mov[ebp-94h],eax movedx,[eax]

cmpedx,[edi+4]

jnzloc_77F36DE1

cmpedx,ecx

jnzloc_77F36DE1 mov[eax],edi mov[edi+4],eaxWINDOWS2003的檢查的代碼Copyright?FlashSky@xfocus.or17WINDOWS2003堆溢出保護(2)簡單而言,其要求就是 被處理的當前堆塊的管理結(jié)構(gòu)的雙向鏈表的下一個堆塊指針與上一堆塊指針要滿足如下條件: 1.當前堆塊的下一個堆塊指針指向的堆塊的上一個堆塊指針要等于當前堆塊的地址 2.當前堆塊的上一個堆塊指針指向的堆塊的下一個堆塊指針要等于當前堆塊的地址 Copyright?FlashSky@2003WINDOWS2003堆溢出保護(2)Copyright18WINDOWS2003堆溢出保護(3)普通饒過的困難 需要構(gòu)造這樣的條件需要準確的知道當前堆塊的地址,然而往往當前堆塊的地址我們不可知。

同時我們需要改寫的有效的內(nèi)存地址如SHE,RETADDR,TOPSHE,F(xiàn)UNCHANDLE等周圍的內(nèi)容我們不可控制

Copyright?FlashSky@2003WINDOWS2003堆溢出保護(3)Copyright19WINDOWS2003堆溢出保護的弱點與問題(1)保護的范圍 跟蹤所有的利用途徑,發(fā)現(xiàn): WINDOWS2003只對出鏈表的路徑做了完善檢查,缺乏對入鏈表路徑利用的檢查。 構(gòu)造滿足入鏈表攻擊的條件就能成功修改一個特定內(nèi)存的值為釋放堆塊的地址。MS遺漏檢查的原因?

Copyright?FlashSky@2003WINDOWS2003堆溢出保護的弱點與問題(1)Cop20WINDOWS2003堆溢出保護的弱點與問題(2)檢查的邏輯 邏輯上,并不能真正保證檢查的正確性。 某種含義上,我們還是能欺騙這種保護,如果我們能找到一種有普遍意義的特殊的利用形式,我們也能饒過檢查。

Copyright?FlashSky@2003WINDOWS2003堆溢出保護的弱點與問題(2)Cop21思路的延續(xù):遺漏檢查利用深入的討論(1)新的困難 無法使用分配的過程再次寫入JMPCODE,這樣頭8字節(jié)我們無法控制其內(nèi)容,引起SHELLCODE執(zhí)行的異?;蚴?。 因為分配路徑做了完整的保護檢查 。Copyright?FlashSky@2003思路的延續(xù):遺漏檢查利用深入的討論(1)Copyright22Copyright?FlashSky@2003NextP3PrevP0JMPNextP2NextP2NextP3SEHPTOPSEH無法滿足檢查的條件Copyright?FlashSky@xfocus.or23思路的延續(xù):遺漏檢查利用深入的討論(2)期待于運氣?再次的推導:構(gòu)造的欺騙 如果我們能知道堆塊的準確地址,是否可以構(gòu)造欺騙? 為什么這里能構(gòu)造欺騙而前面不能?演示:一個構(gòu)造欺騙寫入JMP的實現(xiàn)Copyright?FlashSky@2003思路的延續(xù):遺漏檢查利用深入的討論(2)Copyright24思路的延續(xù):遺漏檢查利用深入的討論(3)新的發(fā)現(xiàn)與困境 一個可以滿足檢查的堆塊的脫鏈操作將再次改寫SEHCopyright?FlashSky@2003思路的延續(xù):遺漏檢查利用深入的討論(3)Copyright25Copyright?FlashSky@2003NextP3PrevP0JMPNextP2NextP2NextP3SEHPTOPSEH如果我們能讓這個堆塊進行脫鏈表操作又如何?Copyright?FlashSky@xfocus.or26Copyright?FlashSky@2003NextP2PrevP0JMPSEHPNextP3NextP3SEHPTOPSEH這時異常會有什么結(jié)果?Copyright?FlashSky@xfocus.or27思路的延續(xù):遺漏檢查利用深入的討論(4)雙堆塊釋放的觸發(fā) 一個可以滿足檢查的堆塊的脫鏈操作將再次改寫SHE指向我們原來的被覆蓋的堆塊(而不是當前釋放的堆塊),而這里的頭4字節(jié)是我們可以控制的內(nèi)容。演示:雙堆塊釋放二次重寫TOPSHE的實現(xiàn)利用Copyright?FlashSky@2003思路的延續(xù):遺漏檢查利用深入的討論(4)Copyright28思路的延續(xù):遺漏檢查利用深入的討論(5)更深入一步: 利用次序,在非雙堆塊釋放環(huán)境下構(gòu)造雙堆塊釋放的環(huán)境演示:構(gòu)造雙堆塊釋放的實現(xiàn)限制條件匯總Copyright?FlashSky@2003思路的延續(xù):遺漏檢查利用深入的討論(5)Copyright29思路的突變:更廣泛的另類有效利用手段(1) 不能滿足于覆蓋空閑大堆塊的苛刻條件,我們需要再求新的思路轉(zhuǎn)換一下思路,構(gòu)造欺騙用于新的利用形式:思路的來源

Copyright?FlashSky@2003思路的突變:更廣泛的另類有效利用手段(1)Copyright30思路的突變:更廣泛的另類有效利用手段(2)

一種利用的轉(zhuǎn)換 與堆棧/數(shù)據(jù)區(qū)的結(jié)合 甚至可以用于制造空閑大堆塊覆蓋的條件

Copyright?FlashSky@2003思路的突變:更廣泛的另類有效利用手段(2)Copyright31思路的突變:更廣泛的另類有效利用手段(3)

演示:一個將堆溢出轉(zhuǎn)化為數(shù)據(jù)區(qū)溢出利用的實現(xiàn)限制條件匯總

Copyright?FlashSky@2003思路的突變:更廣泛的另類有效利用手段(3)Copyright32未來WINDOWS2003堆溢出研究的方向

Copyright?FlashSky@2003未來WINDOWS2003堆溢出研究的方向Copyrigh33Thanks!Q/AThanks!Q/A34Windows2003堆溢出及其利用技術(shù)深入研究作者:FlashSky日期:2003-12-26Windows2003堆溢出及其利用技術(shù)深入研究作者:F35感謝

安全焦點所有的成員與啟明星辰積極防御實驗室的同事主講目錄

WINDOWS堆結(jié)構(gòu)簡介WINDOWS堆溢出利用WINDOWS2003堆溢出保護WINDOWS2003堆溢出保護的弱點思路的延續(xù):弱點利用深入的討論思路的突變:更廣泛的另類有效利用的手段未來WINDOWS2003堆溢出利用研究的方向Copyright?FlashSky@2003感謝Copyright?FlashSky@xfocus36WINDOWS堆結(jié)構(gòu)簡介(1)前言 WINDOWS2003,系統(tǒng)低層的安全性改進 本文的目的當前關(guān)于WINDOWS堆的研究 WINDOWS堆管理結(jié)構(gòu)與管理特性的研究 WINDOWS堆特性在堆溢出時的利用的研究 WINDOWS2003的堆特性的研究Copyright?FlashSky@2003WINDOWS堆結(jié)構(gòu)簡介(1)Copyright?Fl37WINDOWS堆結(jié)構(gòu)簡介(2)WINDOWS堆結(jié)構(gòu)簡介 堆與堆塊 堆管理結(jié)構(gòu)與堆塊管理結(jié)構(gòu) 堆的整體結(jié)構(gòu)構(gòu)架

Copyright?FlashSky@2003WINDOWS堆結(jié)構(gòu)簡介(2)Copyright?Fl38Copyright?FlashSky@2003堆管理結(jié)構(gòu)塊(SIZE:0X640/0XC50)堆段表塊0(SIZE:0X40)小堆塊分配管理表結(jié)構(gòu)(SIZE:0X1818),可選用戶堆塊數(shù)據(jù)區(qū)堆的基地址一般緊接著堆管理結(jié)構(gòu)塊之后Copyright?FlashSky@xfocus.or39WINDOWS堆結(jié)構(gòu)簡介(3)WINDOWS堆塊分配與釋放的管理

大堆塊對象與小堆塊對象空閑堆塊雙向鏈表頭 空閑大堆對象與空閑小堆對象入鏈算法

Copyright?FlashSky@2003WINDOWS堆結(jié)構(gòu)簡介(3)Copyright?Fl40WINDOWS堆溢出利用(1)基本原理常見的普通利用方式: 引起空閑堆組成的雙向鏈表的脫鏈的操作

Copyright?FlashSky@2003WINDOWS堆溢出利用(1)Copyright?Fl41Copyright?FlashSky@2003NextP2PrevP0NextP3PrevP1NextP4PrevP2NextP3/PrevP3NextP2/PrevP2NextP1/PrevP1NextP3PrevP0NextP3PrevP1NextP4PrevP1一個正常的堆塊脫鏈表過程Copyright?FlashSky@xfocus.or42WINDOWS堆溢出利用(2)雙向鏈表的入鏈利用的可能性 可利用的原理 利用的要求

Copyright?FlashSky@2003WINDOWS堆溢出利用(2)Copyright?Fl43NextP3PrevP0NextP3PrevP1NextP4PrevP1NextP3/PrevP3NextP2/PrevP2NextP1/PrevP1NextP2PrevP0NextP4PrevP1UNKNUNKPNextP3PrevP1NextP2PrevP0NextP4PrevP2一個正常的大堆塊插入入鏈表過程Copyright?FlashSky@2003NextP3PrevP0NextP3PrevP1NextP444WINDOWS堆溢出利用(3)覆蓋空閑大堆可以達到的目的:

我們能將一個當前釋放堆的地址填入到一個由我們指定的內(nèi)存地址中

Copyright?FlashSky@2003WINDOWS堆溢出利用(3)Copyright?Fl45NextP3PrevP0NextP4PrevP1NextP3PrevP0JMPTSEHPTSEHNextP3PrevP0JMPNextP2NextP2NextP3SEHPTOPSEHTOPSEH一個利用大堆塊插入入鏈表的過程NextP3/PrevP3NextP1/PrevP1NextP2/PrevP2Copyright?FlashSky@2003NextP3PrevP0NextP4PrevP1NextP346WINDOWS堆溢出利用(4)入鏈表利用的進一步

問題:當前釋放堆塊地址的前8字節(jié)內(nèi)容是我們無法控制的指針價值。 解決方法:再次分配時候可以將我們可以控制的4字節(jié)寫入

Copyright?FlashSky@2003WINDOWS堆溢出利用(4)Copyright?Fl47Copyright?FlashSky@2003NextP3PrevP0JMPNextP2NextP2JMPSEHPNextP3PrevP0JMPNextP2NextP2JMPSEHPTOPSEHJMPADDR觸發(fā)異常利用分配再次寫入JMP代碼到頭四字節(jié)Copyright?FlashSky@xfocus.or48WINDOWS堆溢出利用(5)WINDOWS堆溢出可以利用的途徑

脫鏈表時 入鏈表時Copyright?FlashSky@2003WINDOWS堆溢出利用(5)Copyright?Fl49WINDOWS2003堆溢出保護(1)基于堆溢出利用原理的檢查 基于覆蓋雙向鏈表的地址導致可寫入任一地址空間 檢查上下鏈表的一致性可以檢查和防止堆溢出的利用

Copyright?FlashSky@2003WINDOWS2003堆溢出保護(1)Copyright50Copyright?FlashSky@2003

leaecx,[esi+8] movedi,[ecx] mov[ebp-0D8h],edi moveax,[esi+0Ch] mov[ebp-94h],eax movedx,[eax]

cmpedx,[edi+4]

jnzloc_77F36DE1

cmpedx,ecx

jnzloc_77F36DE1 mov[eax],edi mov[edi+4],eaxWINDOWS2003的檢查的代碼Copyright?FlashSky@xfocus.or51WINDOWS2003堆溢出保護(2)簡單而言,其要求就是 被處理的當前堆塊的管理結(jié)構(gòu)的雙向鏈表的下一個堆塊指針與上一堆塊指針要滿足如下條件: 1.當前堆塊的下一個堆塊指針指向的堆塊的上一個堆塊指針要等于當前堆塊的地址 2.當前堆塊的上一個堆塊指針指向的堆塊的下一個堆塊指針要等于當前堆塊的地址 Copyright?FlashSky@2003WINDOWS2003堆溢出保護(2)Copyright52WINDOWS2003堆溢出保護(3)普通饒過的困難 需要構(gòu)造這樣的條件需要準確的知道當前堆塊的地址,然而往往當前堆塊的地址我們不可知。

同時我們需要改寫的有效的內(nèi)存地址如SHE,RETADDR,TOPSHE,F(xiàn)UNCHANDLE等周圍的內(nèi)容我們不可控制

Copyright?FlashSky@2003WINDOWS2003堆溢出保護(3)Copyright53WINDOWS2003堆溢出保護的弱點與問題(1)保護的范圍 跟蹤所有的利用途徑,發(fā)現(xiàn): WINDOWS2003只對出鏈表的路徑做了完善檢查,缺乏對入鏈表路徑利用的檢查。 構(gòu)造滿足入鏈表攻擊的條件就能成功修改一個特定內(nèi)存的值為釋放堆塊的地址。MS遺漏檢查的原因?

Copyright?FlashSky@2003WINDOWS2003堆溢出保護的弱點與問題(1)Cop54WINDOWS2003堆溢出保護的弱點與問題(2)檢查的邏輯 邏輯上,并不能真正保證檢查的正確性。 某種含義上,我們還是能欺騙這種保護,如果我們能找到一種有普遍意義的特殊的利用形式,我們也能饒過檢查。

Copyright?FlashSky@2003WINDOWS2003堆溢出保護的弱點與問題(2)Cop55思路的延續(xù):遺漏檢查利用深入的討論(1)新的困難 無法使用分配的過程再次寫入JMPCODE,這樣頭8字節(jié)我們無法控制其內(nèi)容,引起SHELLCODE執(zhí)行的異常或失敗。 因為分配路徑做了完整的保護檢查 。Copyright?FlashSky@2003思路的延續(xù):遺漏檢查利用深入的討論(1)Copyright56Copyright?FlashSky@2003NextP3PrevP0JMPNextP2NextP2NextP3SEHPTOPSEH無法滿足檢查的條件Copyright?FlashSky@xfocus.or57思路的延續(xù):遺漏檢查利用深入的討論(2)期待于運氣?再次的推導:構(gòu)造的欺騙 如果我們能知道堆塊的準確地址,是否可以構(gòu)造欺騙? 為什么這里能構(gòu)造欺騙而前面不能?演示:一個構(gòu)造欺騙寫入JMP的實現(xiàn)Copyright?FlashSky@2003思路的延續(xù):遺漏檢查利用深入的討論(2)Copyright58思路的延續(xù):遺漏檢查利用深入的討論(3)新的發(fā)現(xiàn)與困境 一個可以滿足檢查的堆塊的脫鏈操作將再次改寫SEHCopyright?FlashSky@2003思路的延續(xù):遺漏檢查利用深入的討論(3)Copyright59Copyri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論