




已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
(計(jì)算機(jī)應(yīng)用技術(shù)專業(yè)論文)基于靜態(tài)分析的棧緩沖溢出漏洞自動(dòng)發(fā)掘模型研究.pdf.pdf 免費(fèi)下載
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
摘要 緩沖區(qū)溢出漏洞一直是安全漏洞的最常見(jiàn)的一種形式。近年來(lái),在c e r ! i c c ( c o m p u t c re m c r g e n c yr e s p o n s et e a m c 0 0 r d i i i a t i o nc e n t e r ) 發(fā)布的公告中,關(guān)于 緩沖區(qū)溢出漏洞的占5 0 以上。緩沖區(qū)溢出問(wèn)題主要出現(xiàn)在( y c + + 這類老牌的編 程語(yǔ)言中,而在新一代的編程語(yǔ)言,例如j a v a 、c 艫中不存在。一個(gè)最重要的原因 就是c 犯+ + 允許通過(guò)指針進(jìn)行間接內(nèi)存訪問(wèn)但沒(méi)有緩沖區(qū)邊界檢查和提供了大量 對(duì)緩沖區(qū)可能存在不安全操作的庫(kù)函數(shù),在w m d o w s 操作系統(tǒng)中也存在類似的函 數(shù)。因此,如果能采用有效的手段對(duì)緩沖區(qū)溢出漏洞進(jìn)行檢測(cè),將能極大地提高 軟件系統(tǒng)的安全性。 從一個(gè)程序中檢測(cè)出可能的安全漏洞是一件非常困難和耗時(shí)的事情。目前針 對(duì)緩沖區(qū)溢出漏洞的檢測(cè)主要分為兩類:靜態(tài)檢測(cè)的方法和動(dòng)態(tài)檢測(cè)的方法。通 過(guò)使用靜態(tài)和動(dòng)態(tài)分析工具,可以從一定程度上減輕漏洞檢測(cè)的困難。 本文研究分析了與緩沖區(qū)溢出相關(guān)的基本原理并分析了國(guó)內(nèi)外緩沖區(qū)溢出檢 測(cè)的典型技術(shù)和工具。通過(guò)分析目前幾個(gè)開(kāi)源的源代碼掃描工具,以及參與的一 個(gè)源代碼靜態(tài)掃描工具的開(kāi)發(fā),本文提出一種對(duì)二進(jìn)制代碼的靜態(tài)檢測(cè)方法:對(duì) 二進(jìn)制代碼的反匯編代碼進(jìn)行操作語(yǔ)義的分析,提取與緩沖區(qū)溢出相關(guān)的語(yǔ)法成 分,然后以c 庫(kù)和w 如d o w s 操作系統(tǒng)中不安全函數(shù)為出發(fā)點(diǎn)進(jìn)行緩沖區(qū)溢出的分 析,并基于此方法實(shí)現(xiàn)了一個(gè)原型系統(tǒng)。實(shí)驗(yàn)證明,該原型系統(tǒng)能夠檢測(cè)出一些 棧緩沖溢出的情況。但由于完全實(shí)現(xiàn)的工作量太大,因此沒(méi)有考慮復(fù)雜的數(shù)據(jù)結(jié) 構(gòu)和控制流等情況。 本文提出的靜態(tài)檢測(cè)方法是基于對(duì)二進(jìn)制代碼反匯編后的代碼,實(shí)質(zhì)上也可 以認(rèn)為是一種基于源代碼的靜態(tài)檢測(cè)技術(shù)。這方面的研究是對(duì)主流技術(shù)的一種重 要補(bǔ)充,在得不到源代碼的情況下,可以作為一種備用手段使用。 關(guān)鍵詞:緩沖區(qū)溢出,棧溢出,靜態(tài)分析,二進(jìn)制代碼 a b s t 珀c t a b s t r a c t b u 彘fo v e 棚o wh a sb e c nt h em o s c o m m o nf o n no fs e c l l r i y i n e r a b m 夠碭e 肌m b c ro fb u f c ro v e m o w sa c c o u mf o ra b o u t5 0 a b o v eo fa 1 1t h ev u l i l e r a b i l i t i e s a o c o r d i n gt ot h e ( = e r r c c ( c o m p u t e re m e r g e n c yr e s p o n s et c a m c o o r d i n a t i o nc e n t e r ) s t a t i s t i ca tr e c e n ty c a r s n eb u 靦ro v e m o wp r o b l e mi st y p i c a lo fo l dp r o 伊a m m i n g i a n g u a g c s ,s u c ha sc a n dc p + ,w l l i l s ti tc a i l n o ta r i s ei nt h en e wg e n e r 撕o no fl a n g i l a g e s , e 舀j a v aa n dc 氘a(chǎn)m o s ti m p o n a n tr c a s o ni st h a tt h eca i l dc + + l a n g i l a g e sa n o w i n d i 聆c ta c c c s sm 珊o r yl o c a t i o nb yp o i n 泐w i m o u tb o u n d a r yc h e 6 ka n dt h e r ea 聆加a n y u n s a f cf i l n c t i o n si n l i b r a i yw h i c hm a yc a u s eb u 肋ro v e m o w a n dt h ew 缸d d w s o p e r a t i i l gs y s t e ma l s oh a ss o m es j m i l a ru n s a f cf i l n c t i o n s n od o u b t ,i f 啪a d o p t e 艦c t i v em e a n st od e t e c tt h i sk i n do fs e c i l r i t yv u l n e i a b i l i t i e s ,“w i l l 蓼e a t i ye l l h a l l c et h e s c c i l i i t yo ft h es o f 研a r cs y s t e m s d e t e d i n gp o s s i b l eb u 臟ro v e r f l o w si i iap r o 孕鋤i sad i 丘c i l na n dt i n l ec o n s u m i n g t a s k m e t b o d sn l a td e e c b u 由晴o v e 川0 w sa g 如e r a l l yd j v j d c di n f o 柳ok j 】1 d sa p r c s e n t :d y n a m i ca n ds t a t i cm e m o d 1 1 l ed i m c l l l to fd c t e c t i n gc a nb ea l i e v i a t e dac e n a i n e x i e n tb yu s i n gs t a t i c 卸dd y n a m i cs o f 吶a r ea n a i y s i st o o l s t h i st h c s i sp r c s e n t sr c s e a f c hf o c u s e do nt l l ef i l n d a m e m a li s s u e ss u r r o u n d i n gt l l e b u 疵ro v e m o wv u l i l e r a b m t ya n ds o m et y p i c a lm e t h o d sa n dt o o i su s e do nb u 船r o v e m o wd e t e c t i n 昏o nt h eb 弱i so f 吼a l y 婦1 9af e wo fo p e ns o l l r c et o o l so fs o u r c ec o d e b a s e da n d a k i n gp a ni i las o u r c ec o d eb a s e ds c a 肋i n gf o o l ,sd e v c l o p i n 島a 丑e wb u 骯r 0 v e i n o ws t a t i cd e t e c c i i l gm e t h o di sp r o p o s e d t h a ti s ,a n a l y z et h eo p e r a t es e m a m i c s0 f d i s a s s e m b l e db i n a r yc o d e ,p i c ku pt h ei n f d 肌a t i o nt h a tb u :日e e ro v e i 丑o wc o c e m e db y s y l l t a c t j ca n a l y s i s ,a n dt h e np r o c c e do l l ra n a l y s i s 丘o mt h es e to fs o c a l l e d “d 扎g c i o u s f i l n d l o n s ”0 nb 雛i so ft h 政w ei i l l p l e m e n tap r o t o 咖es y s t c mt h a tc a ni o c a t ec e r t a i n t y p e s0 f b u 虢ro v e m o wv l i l n e r a b i l m e sb ye x p e 血e n t s c 0 n s i d e r i n gt h eh e a v yw o r k l o a do f m p j e t ei m p l 伽e 丑t a t i o n ,w et a k en oa c ( d u 丑to f m p l j c a t e dd a t as t n | a l l r e c o n t r 0 1 丑o we t c t h es t a t i cd e t e d i n gm e t h o dp r o p o s e db y l i st h e s i si sb a s eo nt h ed i s a s s e m b l e d b i n a r yc o d e ,s 0i ta l s oc a nb ec o l l s i d e r e dt ob eas o u r c ec o d eb a s e ds t a t i cd e t e c t j n g i i a b s t r a c t m e t h o di nf a c t b u tt h em e t h o dp r o p o s e db yt h i sm e s i si sp e r f o m e do nar e l e a s e d p r o g r a 】m ,ad i 鼢e ma p p r o a c hc o m p a r e dt 0t h em a n yp r e v i o u ss t u d i e s 也a tf b c l l so n s t a t i cs o u r c cc o d ea n a l y s i s ,t h a ti tc a nb eam e a n sj ns u p p o no ft l l em a i nd e t e c t i n g m e t h o d s k e y w o r d s :b u f f e io v e r n o w ,s t a c ko v e m o w ,s t a t i ca n a l y s i s ,b i n a r yc o d e i 圖目錄 圖目錄 圖3 1d a 識(shí)別函數(shù)的例子。1 3 圖3 2 a 識(shí)別參數(shù)的例子 圖3 3 在堆棧分配局部變量的機(jī)制1 7 圖3 4 對(duì)局部變量進(jìn)行尋址1 8 圖3 5 結(jié)構(gòu)體的例子2 0 圖3 m a i l l 的棧幀結(jié)構(gòu)2 2 圖3 7n 欣的工作過(guò)程3 1 圖3 8 虻c 的工作過(guò)程。3 3 圖4 1 系統(tǒng)總體結(jié)構(gòu)3 5 圖4 2 一個(gè)例子程序 3 9 圖4 3 示例程序段4 7 圖4 4 函數(shù)調(diào)用圖 圖4 - 5 靜態(tài)分析算法流程 。5 0 圖4 6s t r c p y r e c i l r s i o n h 鋤d l e r 函數(shù)流程5 2 圖5 1 測(cè)試源代碼 圖5 2 測(cè)試反匯編代碼 圖5 - 3 測(cè)試結(jié)果:函數(shù)調(diào)用關(guān)系 圖5 - 4 測(cè)試掃描結(jié)果。 - 跖卵卯 表目錄 表目錄 表3 1 符號(hào)串a(chǎn) b b c d e 的分析2 6 表3 2 常用l e x 模式定義 v - 獨(dú)創(chuàng)性聲明 本人聲明所呈交的學(xué)位論文是本人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作 及取得的研究成果。據(jù)我所知,除了文中特別加以標(biāo)注和致謝的地方 外,論文中不包含其他人已經(jīng)發(fā)表或撰寫(xiě)過(guò)的研究成果,也不包含為 獲得電子科技大學(xué)或其它教育機(jī)構(gòu)的學(xué)位或證書(shū)而使用過(guò)的材料。與 我一同工作的同志對(duì)本研究所做的任何貢獻(xiàn)均已在論文中作了明確的 說(shuō)明并表示謝意。 簽名: 日期:葛一年厶月必日 關(guān)于論文使用授權(quán)的說(shuō)明 本學(xué)位論文作者完全了解電子科技大學(xué)有關(guān)保留、使用學(xué)位論文 的規(guī)定,有權(quán)保留并向國(guó)家有關(guān)部門(mén)或機(jī)構(gòu)送交論文的復(fù)印件和磁盤(pán), 允許論文被查閱和借閱。本人授權(quán)電子科技大學(xué)可以將學(xué)位論文的全 部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索,可以采用影印、縮印或掃描 等復(fù)制手段保存、匯編學(xué)位論文。 ,( 保密的學(xué)位論文在解密后應(yīng)遵守此規(guī)定) 日期:岬年車月中日 第一章引言 1 1 研究背景 第一章引言 利用漏洞發(fā)起攻擊是互聯(lián)網(wǎng)最大的安全隱患。根據(jù)美國(guó)c e r t ,c c ( c o m p u t e f e m e r g e n c yr e s p o n s et e a n l ,g 0 0 r d i i l a t i o nc e n 蛔) 統(tǒng)計(jì),自1 9 9 5 年到2 0 0 6 年漏洞累 計(jì)達(dá)到3 0 7 8 0 個(gè),2 0 0 6 年共報(bào)告漏洞8 0 6 4 個(gè),平均每天超過(guò)2 2 個(gè)。在過(guò)去的十 年中,以緩沖區(qū)溢出為類型的安全漏洞是最為常見(jiàn)的一種形式【1 1 。更為嚴(yán)重的是, 緩沖區(qū)溢出漏洞占了遠(yuǎn)程網(wǎng)絡(luò)攻擊的絕大多數(shù),這種攻擊可以使得一個(gè)匿名的 i n t e m e t 用戶有機(jī)會(huì)獲得一臺(tái)主機(jī)的部分或全部的控制權(quán)1 由于這類攻擊使任何人 都有可能取得主機(jī)的控制權(quán),所以它代表了一類極其嚴(yán)重的安全威脅。緩沖區(qū)溢 出攻擊之所以成為一種常見(jiàn)安全攻擊手段,其原因在于緩沖區(qū)溢出漏洞太普通了, 并且易于實(shí)現(xiàn)。而且,緩沖區(qū)溢出成為遠(yuǎn)程攻擊的主要手段,其原因在于緩沖區(qū) 溢出漏洞給予了攻擊者他所想要的一切:植入并且執(zhí)行攻擊代碼。被植入的攻擊 代碼以一定的權(quán)限運(yùn)行有緩沖區(qū)溢出漏洞的程序,從而得到被攻擊主機(jī)的控制權(quán)。 在1 9 9 8 年i 血謝n 實(shí)驗(yàn)室用來(lái)評(píng)估入侵檢測(cè)的5 種遠(yuǎn)程攻擊中,有3 種是基 于社會(huì)工程學(xué)的信任關(guān)系,2 種是緩沖區(qū)溢出。而在1 9 9 8 年c e r t 的1 3 份建議中, 有9 份是與緩沖區(qū)溢出有關(guān)的,在1 9 9 9 年,至少有半數(shù)的建議是和緩沖區(qū)溢出有 關(guān)的,在2 0 0 3 年,2 8 份建議中和緩沖區(qū)溢出有關(guān)的有1 2 份【2 】。國(guó)內(nèi)綠盟科技記 錄的1 8 9 5 條有關(guān)漏洞中,緩沖區(qū)溢出漏洞占4 1 0 條,幾乎涉及到所有的操作系統(tǒng) 和應(yīng)用程序。在b u g t r a q 的調(diào)查中,有2 3 的被調(diào)查者認(rèn)為緩沖區(qū)溢出漏洞是一個(gè) 很嚴(yán)重的安全問(wèn)題。 綠盟科技1 3 】根據(jù)安全漏洞的嚴(yán)重程度、影響范圍等因素綜合評(píng)出2 6 年度的 十大安全漏洞,緩沖區(qū)溢出漏洞占4 個(gè),分別包括:m i c r o s o f tw m d o w ss e n r e f 服 務(wù)遠(yuǎn)程緩沖區(qū)溢出漏洞( m s 0 6 0 4 0 ) ,m i c s o f tw i n d o w sm s d t c 堆溢出漏洞 ( m s 0 6 0 1 8 ) ,m i c r o s o f t w 抽d o w s w j d 【s l a t i o n 服務(wù) k t p m a n a g c l o c c 0 衄耐遠(yuǎn)程棧 溢出漏洞( m s 0 6 0 7 0 ) 和a p a c h cm o d j e w r i t c 模塊單字節(jié)緩沖區(qū)溢出漏洞。綠盟 科技在2 0 0 6 年共發(fā)布c 、礓漏洞8 個(gè),而緩沖區(qū)溢出漏洞就占了5 個(gè)。其中, m i c r o s o f tm 6u r l l o n d n 長(zhǎng)u r l 緩沖區(qū)溢出漏洞,源于一個(gè)l s t m c p y a 函數(shù)的錯(cuò)誤 調(diào)用,可能造成一個(gè)堆數(shù)據(jù)結(jié)構(gòu)盼破壞,通過(guò)精心構(gòu)造數(shù)據(jù)可能導(dǎo)致執(zhí)行任意代 電子科技大學(xué)碩士學(xué)位論文 碼。w i n 鋤pm 3 u 列表文件處理緩沖區(qū)溢出漏洞,w i n a m p 可以通過(guò)加載血3 u 列表 文件來(lái)播放其中的文件,當(dāng)某個(gè)文件播放停止時(shí),w i n a m p 會(huì)重新設(shè)置程序標(biāo)題。 這時(shí)w 協(xié)a m p 錯(cuò)誤的使用了s t m c p y 函數(shù),導(dǎo)致一個(gè)靜態(tài)緩沖區(qū)溢出。 因此,如果能采用有效的手段對(duì)緩沖區(qū)溢出漏洞進(jìn)行檢測(cè),對(duì)提高軟件本身 的健壯性和安全性具有十分重要的意義。 1 2 本文主要工作 本文主要工作為:在研究利用緩沖區(qū)溢出進(jìn)行的主要攻擊手段,分析已有緩 沖區(qū)溢出檢測(cè)工具,以及參加和四川省安全廳合作的針對(duì)源代碼的棧緩沖區(qū)溢出 檢測(cè)工具的開(kāi)發(fā)的基礎(chǔ)上,給出了一種針對(duì)二進(jìn)制代碼的棧緩沖溢出靜態(tài)檢測(cè)的 方法并用語(yǔ)法分析和操作語(yǔ)義的方法加以嚴(yán)格描述,并最終實(shí)現(xiàn)一個(gè)針對(duì)二進(jìn)制 代碼的棧緩沖溢出自動(dòng)檢測(cè)原型系統(tǒng)。具體包括; 1 二進(jìn)制代碼靜態(tài)掃描的特征研究 基于二進(jìn)蒂g 代碼的靜態(tài)掃描,相對(duì)較a c + + 的源代碼掃描復(fù)雜。二迸制代碼 文件的精確格式分析、匯編級(jí)的指令還原、匯編指令級(jí)的漏洞語(yǔ)法研究都是基于 二進(jìn)制代碼的靜態(tài)掃描所特有的。研究以下二進(jìn)制代碼相關(guān)特征是開(kāi)發(fā)的基礎(chǔ): 二進(jìn)制代碼文件的格式特征及利用; 編譯器版本特征研究及利用; 敏感數(shù)據(jù)的編譯器優(yōu)化特征研究及利用。 2 緩沖區(qū)溢出漏洞二進(jìn)制代碼級(jí)模式研究 結(jié)合二進(jìn)蒂4 代碼靜態(tài)掃描的特征,發(fā)現(xiàn)漏洞特征碼和漏洞的語(yǔ)法模式,并將 基于c c + + 源碼的靜態(tài)分析技術(shù)向匯編級(jí)的靜態(tài)分析進(jìn)行移植和擴(kuò)展是整個(gè)問(wèn)題 的關(guān)鍵。具體內(nèi)容包括: 特狂碼研究; 控制流提取及數(shù)據(jù)流跟蹤研究; 語(yǔ)法級(jí)模式。 3 漏洞發(fā)現(xiàn)的詞法、語(yǔ)法分析器生成 通過(guò)漏洞模式的構(gòu)建和特征碼的整理,設(shè)計(jì)一個(gè)結(jié)構(gòu)合理、性能良好的語(yǔ)法 分析引擎。具體內(nèi)容包括: 詞法、語(yǔ)法單元的粒度設(shè)計(jì); 控制流的再現(xiàn); 2 第一章引言 漏洞模式的匹配和后繼語(yǔ)義分析。 通過(guò)實(shí)例測(cè)試證明,該原型系統(tǒng)能有效的檢測(cè)出二進(jìn)制代碼中的一些棧緩沖 溢出的情況。 1 3 論文結(jié)構(gòu) 本文第一章為引言,主要介紹課題的一些背景情況和研究?jī)?nèi)容。 第二章介紹緩沖區(qū)溢出的原理,并比較了目前流行的緩沖區(qū)溢出檢測(cè)方法和 工具,提出了本文的棧緩沖區(qū)溢出檢測(cè)方法。 第三章介紹本文的基礎(chǔ)研究,包括靜態(tài)分析基礎(chǔ)和詞法、語(yǔ)法分析的相關(guān)理 論基礎(chǔ)。靜態(tài)分析基礎(chǔ)將介紹如何從反匯編代碼中識(shí)別與緩沖區(qū)溢出檢測(cè)相關(guān)的 語(yǔ)法元素;詞法、語(yǔ)法分析是本文的棧溢出檢測(cè)方法的核心,因此該章將詳細(xì)介 紹與本文相關(guān)的詞法、語(yǔ)法分析理論,并介紹了本課題使用的兩個(gè)開(kāi)發(fā)工具:詞 法分析程序和語(yǔ)法分析程序的自動(dòng)生成器。 第四章詳細(xì)介紹對(duì)二進(jìn)制代碼的靜態(tài)掃描原型系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。 第五章介紹對(duì)實(shí)現(xiàn)的二迸制掃描原型系統(tǒng)進(jìn)行的測(cè)試和分析。 最后是對(duì)本文工作的總結(jié)。 3 電子科技大學(xué)碩士學(xué)位論文 第二章緩沖區(qū)溢出原理及檢測(cè)技術(shù) 緩沖區(qū)溢出是個(gè)眾所周知的安全問(wèn)題。緩沖區(qū)溢出攻擊仍然是現(xiàn)在最有效 的軟件攻擊方法之一,并且在接下來(lái)的許多年里,情況仍然會(huì)是這樣的。緩沖區(qū) 溢出攻擊可導(dǎo)致程序運(yùn)行失敗、系統(tǒng)當(dāng)機(jī)、重新啟動(dòng)等后果。更為嚴(yán)重的是可以 利用它執(zhí)行非授權(quán)的指令,獲得被攻擊主機(jī)的部分或者全部特權(quán),進(jìn)而進(jìn)行各種 非法操作。因此,針對(duì)緩沖區(qū)溢出漏洞檢測(cè)方法的研究具有十分重要的意義。本 章簡(jiǎn)單介紹了緩沖區(qū)溢出的原理,并比較了目前流行的緩沖區(qū)溢出檢測(cè)方法和工 具,然后提出了本文的棧緩沖區(qū)溢出檢測(cè)方法。 2 1 緩沖區(qū)溢出原理簡(jiǎn)介 所謂緩沖區(qū),簡(jiǎn)單說(shuō)來(lái)就是程序運(yùn)行時(shí)內(nèi)存中的一塊連續(xù)的區(qū)域。例如c 語(yǔ) 言中經(jīng)常要用到的數(shù)組,其中最常見(jiàn)的是字符數(shù)組。在一個(gè)程序中,會(huì)聲明各種 變量。靜態(tài)全局變量是位于數(shù)據(jù)段并且在程序開(kāi)始運(yùn)行的時(shí)候被加載。而程序的 動(dòng)態(tài)的局部變量則分配在堆棧里面。如果向一個(gè)緩沖區(qū)復(fù)制數(shù)據(jù),但是復(fù)制的數(shù) 據(jù)量又比緩沖區(qū)大的時(shí)候,就會(huì)發(fā)生緩沖區(qū)溢出例。 緩沖區(qū)溢出主要出現(xiàn)在c 和c + + 語(yǔ)言中,因?yàn)檫@些語(yǔ)言不執(zhí)行數(shù)組邊界檢查 和類型安全檢查。c c + + 開(kāi)發(fā)人員創(chuàng)建非常接近硬件環(huán)境運(yùn)行的程序,允許直接訪 問(wèn)內(nèi)存和寄存器。這樣的程序可以獲得優(yōu)異的性能,但也帶來(lái)了嚴(yán)重的安全問(wèn)題。 標(biāo)準(zhǔn)c 庫(kù)中還存在了像s c p y 、s t r c a t 、s p r i n t f 等不安全的字符串操作函數(shù)。 w i i l d o w s 操作系統(tǒng)中也存在l s t r c p y 、l s t r c a t 等類似的函數(shù)。不正確的使用這些函數(shù) 也是導(dǎo)致緩沖區(qū)溢出的重要原因。 緩沖區(qū)溢出問(wèn)題又常常被歸結(jié)為通道交錯(cuò)問(wèn)題。編譯器將數(shù)據(jù)和控制管理信 息混合存放。例如,函數(shù)的緩沖區(qū)位于堆棧中,同時(shí)該函數(shù)的返回地址就在緩沖 區(qū)后。又如,動(dòng)態(tài)內(nèi)存分配的塊管理信息和數(shù)據(jù)連續(xù)存放。類似的管理信息還包 括異常處理程序地址、函數(shù)指針等等。典型的格式化字符串漏洞也屬于這種情況。 數(shù)據(jù)通道,只被復(fù)制而不被解釋??刂仆ǖ?,具有控制功能,需要系統(tǒng)解釋。如 果程序正常執(zhí)行,這兩種通道可以工作的很好,不會(huì)出現(xiàn)問(wèn)題。但是,如果這兩 個(gè)不同的通道交錯(cuò)在一起時(shí),漏洞就會(huì)暴露出來(lái)。攻擊者利用對(duì)數(shù)據(jù)通道的寫(xiě)權(quán) 4 第二章緩沖區(qū)溢出原理及檢測(cè)技術(shù) 限改寫(xiě)了控制通道的內(nèi)容,那么系統(tǒng)就有可能出現(xiàn)控制上的紊亂,而導(dǎo)致攻擊。 因此,可以歸納出緩沖區(qū)溢出的必要條件有: 1 使用非類型安全的語(yǔ)言,如c 尼+ + ; 2 ,以不安全的方式訪問(wèn)或復(fù)制緩沖區(qū); 3 編譯器將緩沖區(qū)放在內(nèi)存中關(guān)鍵數(shù)據(jù)結(jié)構(gòu)相鄰的位置。 緩沖區(qū)溢出攻擊技術(shù)的種類很多。從攻擊原理分,緩沖區(qū)溢出攻擊可以分為 棧溢出、普通堆溢出、高級(jí)堆溢出和格式化字符串溢出等;從攻擊方式分,又可 以分為本地溢出和遠(yuǎn)程溢出。一個(gè)標(biāo)準(zhǔn)的緩沖區(qū)溢出攻擊大致可以分為三個(gè)步驟: 1 在目標(biāo)系統(tǒng)中注入攻擊代碼; 2 發(fā)現(xiàn)目標(biāo)系統(tǒng)運(yùn)行過(guò)程中可以控制的緩沖區(qū)漏洞及其觸發(fā)條件: 3 精心構(gòu)造滿足溢出條件的超長(zhǎng)字符串,使得溢出發(fā)生時(shí)可以截獲目標(biāo)系統(tǒng) 的控制權(quán),指向攻擊代碼、或者指向更高級(jí)別的系統(tǒng)進(jìn)程配合攻擊代碼完 成惡意的攻擊。 2 2 緩沖區(qū)溢出檢測(cè)技術(shù) 當(dāng)前對(duì)于緩沖區(qū)溢出的檢測(cè)方法總體上分為兩類:靜態(tài)檢測(cè)和動(dòng)態(tài)檢測(cè)的方 法。 靜態(tài)檢測(cè)又可分為基于源代碼的靜態(tài)檢測(cè)和基于二進(jìn)制代碼的靜態(tài)檢測(cè)?;?于源代碼的靜態(tài)檢測(cè)技術(shù)是目前研究相對(duì)較多的一個(gè)分支,其特征是通過(guò)對(duì)源代 碼的掃描和分析,對(duì)緩沖區(qū)溢出發(fā)生的模式進(jìn)行識(shí)別,從而完成溢出漏洞的檢測(cè)。 基于二迸制代碼的靜態(tài)檢測(cè)技術(shù)的研究仍然比較少見(jiàn),目前典型的研究是通過(guò)一 些反匯編工具對(duì)目標(biāo)代碼進(jìn)行處理,然后再依賴一些源代碼靜態(tài)檢測(cè)技術(shù)進(jìn)行處 理。這也正是本文所采用的方法。 動(dòng)態(tài)檢測(cè)技術(shù)也可分為基于源代碼的動(dòng)態(tài)檢測(cè)和基于二迸制代碼的動(dòng)態(tài)檢 測(cè)?;谠创a的動(dòng)態(tài)檢測(cè)通過(guò)在執(zhí)行時(shí)對(duì)程序內(nèi)存中的訪問(wèn)情形加以控制來(lái)完 成溢出漏洞的檢測(cè)。比如通過(guò)對(duì)在源碼中插入一些約束和判斷的模塊,然后在編 譯后的程序運(yùn)行期間對(duì)有關(guān)變量和堆棧區(qū)域的監(jiān)控來(lái)檢測(cè)漏洞。這種檢測(cè)技術(shù)改 變了棧的結(jié)構(gòu),需要重新編譯源代碼?;诙M(jìn)制代碼的動(dòng)態(tài)檢測(cè)通過(guò)自動(dòng)化工 具生成測(cè)試數(shù)據(jù),通過(guò)仿真攻擊狀態(tài)下應(yīng)用程序的執(zhí)行狀態(tài)來(lái)判斷緩沖區(qū)溢出漏 洞位置,又被稱為黑箱分析。這種通過(guò)運(yùn)行發(fā)現(xiàn)緩沖區(qū)溢出的動(dòng)態(tài)檢測(cè)方法非常 準(zhǔn)確,而且不需要源代碼,但是分析的代價(jià)大,效率不高。 5 電子科技大學(xué)碩士學(xué)位論文 2 2 1 靜態(tài)檢測(cè)技術(shù) 最簡(jiǎn)單的靜態(tài)檢測(cè)技術(shù)是使用與u n 平臺(tái)下的擘e p 類似的工具,搜索源代 碼中可能存在的一些不安全的庫(kù)函數(shù)的調(diào)用。 n 忑4 、r t s 和f 】刪f i n d e r 是目前發(fā)展比較成熟的源碼掃描工具,其基本原理 是對(duì)源程序進(jìn)行詞法分析,得到t o k e n 序列,然后與其維護(hù)的漏洞數(shù)據(jù)庫(kù)中的信息 比較,發(fā)現(xiàn)可能的缺陷,給出提示。這類檢測(cè)技術(shù)實(shí)現(xiàn)簡(jiǎn)單,算法效率高,能夠 較全面的覆蓋系統(tǒng)代碼,但是由于沒(méi)有考慮到語(yǔ)法和語(yǔ)義層次的信息,所以這些 檢測(cè)工具能夠檢測(cè)出系統(tǒng)的大量漏洞,但很多是誤報(bào)。而且產(chǎn)生的結(jié)果集很大, 人工審計(jì)仍然很困難【5 】【1 4 】f 1 5 】【垌。 f l a w 矗n d c r i ”l 工具是一個(gè)p v t h o n 程序,可以用來(lái)檢查c 和c + + 程序。f l 齲勘d c i 的速度非常快,在一般的臺(tái)式機(jī)上處理幾千行的c 程序只需要幾秒鐘。在掃描漏 洞的過(guò)程中,h a w f i l l d e r 也具有一定的智能性。例如在對(duì)于一個(gè)特別編寫(xiě)的不安全 的c 程序進(jìn)行掃描的過(guò)程中,f 1 a w f i n d e r 可以區(qū)分出s t r 印y o 對(duì)于固定長(zhǎng)度的字符 處理和變長(zhǎng)的字符處理,從而區(qū)分出真正的漏洞和錯(cuò)誤的報(bào)警。更進(jìn)一步, f 1 a w f m d e r 還能夠識(shí)別字符串在國(guó)際化中的使用。 r a 弼( t h er 0 u g h a u d i 幽g t o o lf o rs e c l l r i t y ) 【1 5 】也是一個(gè)影響比較大的源代碼 掃描工具,目前正處于比較活躍的開(kāi)發(fā)過(guò)程中,可以檢查使用c ,c + + ,p e d ,p h p 和p y t h o n 等語(yǔ)言編寫(xiě)的源程穿。r 舡s 可以輸出x m l 格式的錯(cuò)誤信息,因此在使 用r a t s 之前,還需要安裝x m l 處理工具e x p a t 【1 7 l 。在r 姐_ s 的運(yùn)行過(guò)程中,用 戶可以通過(guò)配置來(lái)改變其輸出的錯(cuò)誤信息級(jí)別,缺省是中級(jí)??蛇x的漏洞知識(shí)庫(kù) 和一致的輸出函數(shù)可以接受用戶的自定義輸入,因此更方便用戶使用自己的專門(mén) 數(shù)據(jù)來(lái)發(fā)現(xiàn)特定的錯(cuò)誤。目前r 蛆s 中已知的缺點(diǎn)包括它所使用的貪婪匹配算法, 使用這種算法,p 血l t f 能夠匹配p r i m ,v s n p r i n t f 以及其它許多類似的函數(shù),這就使 得過(guò)濾錯(cuò)誤的命中變得比較困難。 1 1 葛4 ( t h es o f t w a r es t u p i ds o u r c es c a n i l e r ) 【1 6 j 是基于“n u x 和u n i x 的掃描工 具,可以掃描c 和c + + 語(yǔ)言所編寫(xiě)的程序,用于發(fā)現(xiàn)一些最普遍的安全性相關(guān)的 漏洞。由于許多s 4 的開(kāi)發(fā)人員轉(zhuǎn)向開(kāi)發(fā)r a r s 和f 1 a w f i n d e r ,因此它的開(kāi)發(fā)趨 于平和。但某些吸引人的特點(diǎn)在r a t s 或者f 1 a w f i l l d c r 中得到了發(fā)展,例如行忽略 技術(shù)、跟蹤用戶輸入以及可選的漏洞知識(shí)庫(kù)等。r r s 4 可與u n 下的編輯工具 e m a c s 結(jié)合起來(lái)運(yùn)行,在程序員編碼的過(guò)程中同步完成檢查,可以隨時(shí)的提示程序 員。這也是n s 4 與其它源碼掃描工具相比所獨(dú)有的一個(gè)特點(diǎn)。 6 第二章緩沖區(qū)溢出原理及檢測(cè)技術(shù) d a v i dw j 鱸e i 【n 】將緩沖區(qū)溢出的檢測(cè)問(wèn)題轉(zhuǎn)化為整數(shù)區(qū)間分析的形式迸行處 理。在該方法中,他們提出了兩個(gè)新觀點(diǎn):將c 字符串看作抽象數(shù)據(jù)類型;將緩 沖區(qū)視為整數(shù)范圍對(duì),包括分配范圍和使用范圍。將分配給字符串變量的緩沖區(qū) 長(zhǎng)度定義為a l l o c ( s ) ,字符串變量當(dāng)前使用的緩沖區(qū)長(zhǎng)度定義為i e n ( s ) ,s 為系統(tǒng)中 定義的字符串常量。如果程序當(dāng)前使用的緩沖區(qū)長(zhǎng)度1 e n ( s ) 大于系統(tǒng)為其分配的緩 沖區(qū)長(zhǎng)度a l l 0 0 ( s ) ,那么就有可能存在緩沖區(qū)溢出漏洞。在考慮緩沖區(qū)長(zhǎng)度的同時(shí), 也必須注意到緩沖區(qū)的位置,也就是與變量相關(guān)的緩沖區(qū)范圍的長(zhǎng)度與位置。這 樣,對(duì)緩沖區(qū)溢出漏洞的發(fā)掘也就成為了對(duì)整數(shù)范圍的追蹤問(wèn)題。整個(gè)工作分為 兩部分,其一是對(duì)字符串操作產(chǎn)生相應(yīng)的整數(shù)范圍限制;其二是對(duì)產(chǎn)生的限制進(jìn) 行快速而準(zhǔn)確的分析,得到最后的漏洞報(bào)告信息。為此,他們使用圖論技術(shù)構(gòu)建 了一個(gè)有效的解決整數(shù)范圍限制的算法。由于不精確的范圍分析,該方法最大的 局限性就是過(guò)多的誤報(bào)。 n o dg 弛a p a t h y 【1 8 】等人基于線性規(guī)劃和靜態(tài)分析理論提出了一種輕量級(jí)別的 檢測(cè)算法。該算法首先利用工具軟件生成一些指針相關(guān)的信息和抽象語(yǔ)法樹(shù),然 后基于此生成一些線性約束,然后利用線性規(guī)劃的思想來(lái)完成區(qū)間分析,檢狽4 可 能出現(xiàn)的溢出漏洞。 l i n t 是由a n d vk s t e r 發(fā)布的一個(gè)開(kāi)源工具,能夠檢查可能的空指針、在釋放 內(nèi)存之后使用了該指針、賦值次序闖題以及拼寫(xiě)錯(cuò)誤等。一個(gè)c 妃+ + 編譯器通常 假設(shè)程序是正確的,而“n t 恰恰相反,因此,它優(yōu)于編譯器執(zhí)行的一般性檢查。 l 知t 還可以貫穿多個(gè)文件來(lái)執(zhí)行它的錯(cuò)誤檢查和代碼分析。目前有兩個(gè)流行的u n t 工具:p g l i n t 和s p l i n t ( 原l c i j n t ) 。p c l i n t 是一個(gè)由g i m p e ls o 脅a r e 提供的支 持c 肥+ + 的商用程序,其中的內(nèi)容非常廣泛,只是選項(xiàng)就有3 0 0 多個(gè),涉及到程 序編譯及語(yǔ)法使用中的方方面面。s p l i n t 是在u n t 工具的基礎(chǔ)上改造而成的,專門(mén) 針對(duì)程序的安全問(wèn)題。它要求手工加入注釋,然后根據(jù)這些注釋進(jìn)行語(yǔ)法分析, 利用了語(yǔ)法樹(shù)幽嘲。 靜態(tài)檢測(cè)主要是通過(guò)對(duì)源代碼掃描來(lái)判斷是否存在緩沖區(qū)溢出的漏洞,其優(yōu) 點(diǎn)是在軟件發(fā)布之前就修正所發(fā)現(xiàn)的弱點(diǎn),并且不會(huì)造成程序執(zhí)行的負(fù)擔(dān)。國(guó)內(nèi) 也有許多學(xué)者和研究機(jī)構(gòu)進(jìn)行了這方面的研究,如參考文獻(xiàn)【4 3 】【4 4 】【4 5 】【4 6 】【4 7 】。 2 2 2 動(dòng)態(tài)檢測(cè)技術(shù) 目前,動(dòng)態(tài)檢測(cè)研究的主要方面是數(shù)組邊界檢查和如何保證返回指針的完整 性。典型的方法包括基于編譯器運(yùn)行時(shí)的邊界檢查和基于庫(kù)運(yùn)行時(shí)的邊界檢查。 一7 - 電子科技大學(xué)碩士學(xué)位論文 s t a c k g u a r d 【1 9 】是一種通過(guò)程序指針完整性檢測(cè)來(lái)防范堆棧溢出問(wèn)題的編譯器 技術(shù)。其原理是基于棧的緩沖溢出攻擊時(shí),棧中溢出的緩沖區(qū)和返回地址之間的 值也都被修改。于是在棧緩沖區(qū)和返回地址之間放一個(gè)“c a n a r y ”值,當(dāng)函數(shù)返回 時(shí),若發(fā)現(xiàn)這個(gè)值被修改,那么就檢測(cè)到了溢出攻擊。s t a c k g u a r d 作為邸c 的一個(gè) 補(bǔ)丁,修改了函數(shù)建立和銷毀部分的代碼,由這些代碼來(lái)完成“c a l l a r y ”值的插入 和檢查工作。為了使這種保護(hù)機(jī)制有效,就不能給攻擊者在攻擊字符串中夾雜偽 造“啪a r ) ,”值的機(jī)會(huì),所以這個(gè)值可以在程序執(zhí)行時(shí)隨機(jī)產(chǎn)生,攻擊者就不能通 過(guò)搜索程序的二迸制文件得到“c a n a r y ”值。這種方法的主要缺陷是存在拒絕服務(wù) 攻擊,因?yàn)楫?dāng)檢測(cè)到攻擊時(shí),終止了程序的執(zhí)行。另外,該方法只保護(hù)返回地址, 沒(méi)有保護(hù)基指針,函數(shù)指針。 s t a c k s h i e l d 【冽也是g c c 編譯器的一個(gè)補(bǔ)丁,提供三種保護(hù)方式,其中兩種保護(hù) 返回地址,一種保護(hù)函數(shù)指針。返回地址保護(hù)所采用的方法有:其一是創(chuàng)建另一 個(gè)堆棧用來(lái)存儲(chǔ)函數(shù)返回地址的一份拷貝。在受保護(hù)的函數(shù)的開(kāi)頭和結(jié)尾分別增 加一段代碼,當(dāng)函數(shù)返回地址壓棧時(shí),同時(shí)把它壓入新創(chuàng)建的棧中,當(dāng)函數(shù)返回 時(shí),用這個(gè)棧的棧頂值作為返回地址。這樣,即使函數(shù)返回地址被修改,也能保 證程序能夠繼續(xù)的正確執(zhí)行下去。二是設(shè)一個(gè)全局變量,當(dāng)函數(shù)調(diào)用時(shí),把返回 地址存入這個(gè)值中,當(dāng)函數(shù)返回時(shí),比較這個(gè)值和棧中返回地址的值,如果不同 就檢測(cè)到了攻擊。函數(shù)指針的保護(hù)方法是限制可執(zhí)行代碼只能出現(xiàn)在代碼段中。 堆、棧和b s s 段都不能有函數(shù)指針?biāo)赶虻目蓤?zhí)行的代碼。當(dāng)函數(shù)調(diào)用時(shí),進(jìn)行 邊界檢查,如果所指向的區(qū)域地址不在代碼段之內(nèi),終止程序的執(zhí)行。這種方法 的主要缺陷是拒絕服務(wù)攻擊仍然可能存在,而且代碼都要保存在代碼段。 l t a d ( r e t i l ma d d r e s sd e f c n d e r ) f 8 】與s t a c k s l l i e l d 非常類似,也用一個(gè)額外的 棧,每當(dāng)函數(shù)調(diào)用時(shí)壓棧,當(dāng)函數(shù)返回時(shí),比較返回地址和這個(gè)額外的棧的棧頂 所記錄的值是否相同,如果相同,繼續(xù)執(zhí)行,否則,終止執(zhí)行,給出警告。主要 缺陷是拒絕服務(wù)攻擊仍然可能,而且這個(gè)額外的棧本身也要被保護(hù),增加了開(kāi)銷。 m m 的s t a c k s m a s h i n g 保護(hù)程序s s p ( 又名p r o p 0 1 i c e ) 瞄】是s t a c k g u a r d 的方 法的一種變化形式。像s t a c k g u a r d 一樣,s s p 使用一個(gè)修改過(guò)的編譯器在棧緩沖 區(qū)和返回地址之間插入一個(gè)“c a n a r y ”值以檢測(cè)堆棧溢出。但是,它給這種基本的 思路添加了一些變化:改變棧的分配結(jié)構(gòu),不管源程序中各個(gè)變量的聲明順序, 把它們都放在低端地址,把返回地址和基指針?lè)旁诟叨说刂罚@樣即使溢出也不 會(huì)修改到高端地址處存放的返回地址。默認(rèn)情況下,它不會(huì)檢測(cè)所有的函數(shù),而 只是檢測(cè)確實(shí)需要保護(hù)的函數(shù)。從理論上將,這樣會(huì)稍微削弱保護(hù)能力,但這種 8 第二章緩沖區(qū)溢出原理及檢測(cè)技術(shù) 默認(rèn)行為改進(jìn)了性能,同時(shí)仍然能夠防止大多數(shù)問(wèn)題。 i o y i l n g - s u k 址e e 凹嚕人提出了一種針對(duì)c 的庫(kù)函數(shù)調(diào)用產(chǎn)生的溢出問(wèn)題的動(dòng) 態(tài)檢測(cè)技術(shù)。他們對(duì)g n uc 的編譯器進(jìn)行了擴(kuò)展,使得編譯后的程序在內(nèi)存中維 持有局部變量、函數(shù)參數(shù),全局變量等類型的緩沖區(qū)的類型信息,并對(duì)內(nèi)存堆中 分配的緩沖區(qū)大小進(jìn)行了記錄。依賴這些信息,程序在運(yùn)行期間可以對(duì)某些溢出 情形作出判斷。 此外,還有一些動(dòng)態(tài)檢測(cè)方法,如h b s a f c 、n b v c r i f y 陋l 等對(duì)c 庫(kù)中的不安全函 數(shù)做了重新實(shí)現(xiàn)。這些動(dòng)態(tài)檢測(cè)方法都仔細(xì)研究了編譯中對(duì)變量聲明,函數(shù)調(diào)用 的棧、堆的分配,著眼于保護(hù)已分配的返回地址和函數(shù)指針不被修改。 2 3 本文的棧溢出檢測(cè)方法 目前比較成型的靜態(tài)分析工具所采用的方法有很多缺點(diǎn):都只做到了詞法分 析,然后根據(jù)構(gòu)造的數(shù)據(jù)庫(kù),通過(guò)匹配的方法判斷是否符合溢出模式;不夠準(zhǔn)確, 很多錯(cuò)誤檢測(cè)不到,或者檢測(cè)到的并非錯(cuò)誤;唯一做了語(yǔ)法分析的工具是手工在 源代碼中加入注釋,并不是一個(gè)全自動(dòng)的檢測(cè)工具。 與動(dòng)態(tài)分析技術(shù)相比,靜態(tài)分析技術(shù)無(wú)需龐大的測(cè)試數(shù)據(jù),無(wú)需精心設(shè)計(jì)測(cè) 試用例,無(wú)需過(guò)多的程序運(yùn)行負(fù)擔(dān)是它相對(duì)于動(dòng)態(tài)分析的最大優(yōu)點(diǎn);對(duì)漏洞很少 有漏報(bào)的情況,而且設(shè)計(jì)相對(duì)簡(jiǎn)單,運(yùn)行開(kāi)銷也相對(duì)較小。通過(guò)結(jié)合高級(jí)或低級(jí) 語(yǔ)言自身的語(yǔ)法特征進(jìn)行較高程度的漏洞語(yǔ)法模式定義,做進(jìn)一步較精確的語(yǔ)法 分析,誤報(bào)率將會(huì)大大減小。 對(duì)二進(jìn)制代碼的漏洞發(fā)現(xiàn),同樣可以通過(guò)靜態(tài)分析實(shí)現(xiàn);經(jīng)一定的結(jié)構(gòu)分析 和提取后,轉(zhuǎn)化為匯編級(jí)源碼,然后對(duì)匯編指令流進(jìn)行靜態(tài)分析。目前,針對(duì)匯 編一級(jí)的靜態(tài)掃描研究還很少。匯編級(jí)的程序流相對(duì)a c + + 源程序而言,其語(yǔ)法 分析較困難,特別是對(duì)緩沖溢出相關(guān)的數(shù)組操作,經(jīng)不同的編譯器產(chǎn)生的代碼區(qū) 別很大;另外,匯編指令一級(jí)的語(yǔ)法分析需考慮的問(wèn)題范疇更加廣泛、復(fù)雜。但 是,由于匯編指令流中存在和漏洞相對(duì)應(yīng)的模式,而且相對(duì)c 肥+ + 源碼的分析, 匯編指令一級(jí)的靜態(tài)分析也有其優(yōu)點(diǎn):避免了d c + + 中多線程等導(dǎo)致的程序控制 流程煩雜不易分析的特點(diǎn),從而分析工作較直觀、簡(jiǎn)單。所以,基于靜態(tài)分析的 匯編級(jí)漏洞發(fā)現(xiàn)是可行的。 通過(guò)分析目前幾個(gè)開(kāi)源的源代碼掃描工具,以及參與的一個(gè)源代碼靜態(tài)掃描工 具的開(kāi)發(fā),本文提出一種對(duì)二進(jìn)制代碼的棧緩沖溢出靜態(tài)檢測(cè)方法。該方法借鑒 9 電子科技大學(xué)碩士學(xué)位論文 了參與開(kāi)發(fā)的源代碼靜態(tài)掃描工具中的相關(guān)技術(shù),其技術(shù)路線可描述如下: 1 反匯編二進(jìn)制文件,分析與棧緩沖溢出漏洞相關(guān)的特征和語(yǔ)法模式; 2 將基于甜c + + 源碼的靜態(tài)分析技術(shù)向匯編級(jí)的靜態(tài)分析進(jìn)行移植和擴(kuò)展; 3 設(shè)計(jì)一個(gè)結(jié)構(gòu)合理、性能良好的語(yǔ)法分析引擎進(jìn)行與棧緩沖溢出相關(guān)語(yǔ)法成分 的分析; 4 以可能導(dǎo)致棧緩沖溢出的c 庫(kù)函數(shù)和w i n d o w s 操作系統(tǒng)中類似的函數(shù)為出發(fā) 點(diǎn),進(jìn)行是否可能導(dǎo)致棧緩沖溢出的分析。 我們的分析是基于反匯編后的代碼,實(shí)質(zhì)上也可以認(rèn)為是一種基于源代碼的 靜態(tài)檢測(cè)技術(shù)。這方面的研究也是對(duì)主流技術(shù)的一種重要補(bǔ)充,在得不到源代碼 的情況下,可以作為一種備用手段使用。 2 4 有緩沖區(qū)溢出問(wèn)題的a p i 本文所實(shí)現(xiàn)的棧緩沖溢出檢測(cè)工具的基本出發(fā)點(diǎn)是針對(duì)可能導(dǎo)致緩沖區(qū)溢出 的庫(kù)函數(shù)進(jìn)行檢查的方式來(lái)確定程序中是否存在安全隱患。因此,該小節(jié)列舉出c 運(yùn)行庫(kù)和w i n d o w s 操作系統(tǒng)中可能導(dǎo)致緩沖區(qū)溢出的不安全函數(shù)。 1 s t r c p y 、w c s c p y l s t r 印y 、j c s c p y 和m b s 印y 2 s t r c a t 、w c s c a t 、l s t r c a t 、j c s c a t 和j n b s c a t 這些函數(shù)不檢查目標(biāo)緩沖區(qū)的長(zhǎng)度,也不檢查n u l l 或其它無(wú)效的指針。如果 源緩沖區(qū)不是以n u u 結(jié)尾的,那么結(jié)果是無(wú)法判斷的。 3 s t i n c p y w c s n c p y 、l s t r ( :p y n 、j c s n c p y 和腳b s n b c p y 不能保證這些函數(shù)會(huì)用n u i i 來(lái)結(jié)束目標(biāo)緩沖區(qū),它們也不檢查n u i l 或其它無(wú) 效的指針。 4 s 仃n c a t 、w c s c a t 、- t c s n c a t 和m b s n b c a t 這些函數(shù)檢查被拷貝的字符數(shù)是否與緩沖區(qū)中的字符數(shù)是相同的,而不是檢 查緩沖區(qū)的大小。這些函數(shù)依賴于源緩沖區(qū)和目標(biāo)緩沖區(qū)是否以n u l l 結(jié)尾。 5 m e m c p y 和c o p y m e m o r ) r 目標(biāo)緩沖區(qū)必須足夠大,以便能夠存儲(chǔ)在長(zhǎng)度參數(shù)中指定的字節(jié)數(shù),否則會(huì) 發(fā)生緩沖區(qū)溢出。 6 s p r i n t f 和s w p r i n t f 不能保證這些函數(shù)會(huì)用n u u 結(jié)束目標(biāo)緩沖區(qū)。除非嚴(yán)格的定義了字段的寬度, 否則這些函數(shù)很難安全的使用。 1 0 第二章緩沖區(qū)溢出原理及檢測(cè)技術(shù) 7 g e t s g c t s 函數(shù)是有害的,用這個(gè)函數(shù)就不可能寫(xiě)出安全的應(yīng)用程序,因?yàn)樗粰z查 被拷貝的緩沖區(qū)大小。 8 s c a 】l f ,j s c a n f ,w s c a n f 像g c t s 一樣,s c a n f ,j s c a i l f 和w s c a n f 在使用s 格式化字符的時(shí)候,由于s 是沒(méi)有邊界的,因此都很難正確使用。 9 m u l 皿y t e t o w i d e c h a r 這個(gè)函數(shù)的最后一個(gè)參數(shù)是字符串中寬字符的數(shù)目,而不是字節(jié)數(shù)。如果傳 遞的是字節(jié)數(shù),那么給出的緩沖區(qū)長(zhǎng)度是實(shí)際長(zhǎng)度的兩倍。 2 5 小結(jié) 本章簡(jiǎn)單介紹了緩沖區(qū)溢出的原理,通過(guò)比較目前主流的緩沖區(qū)溢出檢測(cè)技 術(shù),提出了一種對(duì)二進(jìn)制代碼的棧緩沖溢出檢測(cè)方法。該方法通過(guò)對(duì)二進(jìn)制代碼 的反匯編代碼進(jìn)行語(yǔ)法分析,識(shí)別出與棧緩沖溢出相關(guān)的語(yǔ)法成分并進(jìn)行一定程 度的語(yǔ)義分析,在此基礎(chǔ)上實(shí)現(xiàn)一個(gè)棧緩沖溢出漏洞的檢測(cè)工具。下一章將具體 介紹如何從反匯編代碼中識(shí)別與緩沖區(qū)溢出相關(guān)的語(yǔ)法成分,并結(jié)合相關(guān)的詞法、 語(yǔ)法分析理論,詳細(xì)介紹了兩個(gè)詞法、語(yǔ)法分析器的自動(dòng)生成工具:u x ( k x i c a l a n a l y z e fg e n e r a t o r ) 和y a c c ( y c ta n o t h c fc o m p n e r - c o m p i l e r ) ,這也是本課題主 要使用到的開(kāi)發(fā)工具。 電子科技大學(xué)碩士學(xué)位論文 第三章二進(jìn)制代碼的靜態(tài)分析研究 識(shí)別二進(jìn)制代碼中與棧緩沖溢出相關(guān)的語(yǔ)法成分是本文所要實(shí)現(xiàn)的原型系統(tǒng) 的關(guān)鍵。本章將通過(guò)比較源代碼和相應(yīng)二進(jìn)制代碼的反匯編代碼,研究如何從二 進(jìn)制代碼中識(shí)別高級(jí)語(yǔ)言的關(guān)鍵結(jié)構(gòu)和與識(shí)別這些結(jié)構(gòu)相關(guān)的詞法、語(yǔ)法分析的 理論基礎(chǔ)。 3 1 靜態(tài)分析基礎(chǔ) 本文采用的棧緩沖溢出檢測(cè)方法,首先就是對(duì)二進(jìn)制代碼進(jìn)行反匯編。i d a ( k t c r a d i v ed i s a s s e m b l e r ) 是一個(gè)強(qiáng)大的靜態(tài)反匯編工具,本文其余的工作,都是 基于i d a 的反匯編結(jié)果進(jìn)行的。因此,如何從二進(jìn)制代碼和反匯編代碼中發(fā)現(xiàn)我 們感興趣的東西,是本節(jié)將要詳細(xì)介紹的。 3 1 1 識(shí)別函數(shù)和庫(kù)函數(shù) i d a 反匯編器能夠分析c a l l 指令的操作數(shù),這使它可以自動(dòng)將函數(shù)分解成一 系列的函數(shù)。除此之外,i d a 還能夠非常成功地應(yīng)付絕大多數(shù)間接調(diào)用。不過(guò), 它尚不能處理復(fù)雜調(diào)用以及那些使用j m p 指令的手工函數(shù)調(diào)用。 絕大多數(shù)非優(yōu)化編譯器會(huì)在函數(shù)的開(kāi)頭放入稱為起始標(biāo)志( p r o l o g ) 的下列代 碼: p u s he b p m o v e b p ,e s p s u b e s p ,x x 一般而言,可以將起始標(biāo)志的用途歸結(jié)為:如果e b p 寄存器用于對(duì)局部變量 進(jìn)行尋址( 通常情況就是這樣) ,那么在使用變量之前必須將它保存到堆棧中,否 則,被調(diào)用函數(shù)將使父函數(shù)“崩潰”。接著,堆棧指針寄存器e s p 的當(dāng)前值要復(fù)制 到e b p 之中這個(gè)操作稱為打開(kāi)堆棧頁(yè)面,并且e s p 的值會(huì)隨著為局部變量分 配的內(nèi)存塊大小而不斷減少。 p u s he b p m o ve b p ,e s p s u be s p x x 序列可用于找到分析文件中所有函數(shù),包括 那些沒(méi)有對(duì)它們進(jìn)行直接引用的函數(shù),特別是,i d a 采用了這種技術(shù)。不過(guò),優(yōu) 1 2 第三章二進(jìn)制代碼的靜態(tài)分析研究 化編譯器知道如何像使用任何其它通用寄存器一樣,通過(guò)e s p 寄存器對(duì)局部變量 進(jìn)行
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《危險(xiǎn)與可操作性分析基礎(chǔ)》課件
- 汽車沖壓生產(chǎn)線操作工中級(jí)模擬題及答案(附解析)
- 藤編家具行業(yè)人才培養(yǎng)與技術(shù)創(chuàng)新體系建設(shè)研究分析報(bào)告考核試卷
- 植物油加工過(guò)程中的清潔生產(chǎn)考核試卷
- 《super-intuitive音標(biāo)講解》課件
- 職業(yè)中介服務(wù)的移動(dòng)互聯(lián)網(wǎng)應(yīng)用考核試卷
- 營(yíng)銷策略實(shí)施與評(píng)估考核試卷
- 腈綸纖維的激光切割技術(shù)在紡織品的運(yùn)用考核試卷
- 空調(diào)器結(jié)構(gòu)強(qiáng)度分析考核試卷
- 貨運(yùn)火車站項(xiàng)目管理與施工組織考核試卷
- TTJSFB 002-2024 綠色融資租賃項(xiàng)目評(píng)價(jià)指南
- 支局一點(diǎn)一策PPT通用課件
- 國(guó)防科大暗室屏蔽部分標(biāo)書(shū)
- 國(guó)家開(kāi)放大學(xué)《電工電子技術(shù)》章節(jié)自測(cè)題參考答案
- 建筑工程一切險(xiǎn)投保單
- 波峰焊作業(yè)指導(dǎo)書(shū)
- 伍德里奇計(jì)量經(jīng)濟(jì)學(xué)中文答案(共175頁(yè))
- SPC控制圖的系數(shù)和公式表
- 交通行業(yè)職業(yè)安全培訓(xùn)-駕駛員培訓(xùn)
- 企業(yè)所得稅鑒證報(bào)告及說(shuō)明范本(共40頁(yè)).docx
- CountingStars純英文歌詞
評(píng)論
0/150
提交評(píng)論