《緩沖區(qū)溢出分析》這1系列的內(nèi)容是我為“i年齡”所錄制的同名視頻課程的講稿匯總。每次我都是在寫完課程的文檔后,再根據(jù)文檔內(nèi)容進(jìn)行課程的講授。而本系列的內(nèi)容也是從零開(kāi)始,來(lái)給大家由淺入深地進(jìn)行緩沖區(qū)溢出漏洞的講授。全部課程是理論與實(shí)踐相結(jié)合,每講完幾個(gè)基礎(chǔ)理論后,都會(huì)配以實(shí)際的軟件中的漏洞進(jìn)行分析,以幫助大家更好地理解漏洞的原理。
漏洞指的是在硬件、軟件、協(xié)議的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在的缺點(diǎn),通常是由程序的編寫者在編寫時(shí)的忽視釀成的。漏洞的存在使攻擊者能夠在未經(jīng)允許的情況下訪問(wèn)或破壞目標(biāo)系統(tǒng),這在無(wú)形中給用戶系統(tǒng)的安全帶來(lái)了很大的要挾。
1般來(lái)講,軟件漏洞其實(shí)不影響程序的正常功能,但是如果被攻擊者成功利用,就有可能使得軟件去履行額外的歹意代碼。漏洞發(fā)掘和利用是1門非常精深的技術(shù),乃至是1門藝術(shù),這些都是頂級(jí)黑客才華得了的活兒。
大多數(shù)程序漏洞發(fā)掘與內(nèi)存破壞有關(guān),比如最為常見(jiàn)的緩沖區(qū)溢出那樣的漏洞發(fā)掘技術(shù)。使用這類技術(shù)的終究目標(biāo)是控制目標(biāo)程序的履行流程,以欺騙程序使其運(yùn)行1段偷偷植入內(nèi)存的歹意代碼,這樣黑客就能夠使程序做他想要做的幾近任何事情。
說(shuō)到溢出,可能在我們的頭腦中首先顯現(xiàn)出來(lái)的是水的溢出:
圖1 水的溢出
水杯的大小是固定的,如果杯子沒(méi)有裝滿,那末就不會(huì)有甚么問(wèn)題。可是1旦裝滿了,還繼續(xù)裝的話,那末這個(gè)時(shí)候,水就會(huì)不斷地溢出。
在計(jì)算機(jī)內(nèi)部,輸入數(shù)據(jù)通常被寄存在1個(gè)臨時(shí)空間內(nèi),這個(gè)臨時(shí)寄存的空間就被稱為緩沖區(qū),緩沖區(qū)的長(zhǎng)度事前已被程序或操作系統(tǒng)定義好了。向緩沖區(qū)內(nèi)填充數(shù)據(jù),如果數(shù)據(jù)的長(zhǎng)度很長(zhǎng),超過(guò)了緩沖區(qū)本身的容量,那末數(shù)據(jù)就會(huì)溢出存儲(chǔ)空間,而這些溢出的數(shù)據(jù)還會(huì)覆蓋在合法的數(shù)據(jù)上,這就是緩沖區(qū)和緩沖區(qū)溢出的道理。
固然在理想的情況下,程序會(huì)檢查每一個(gè)數(shù)據(jù)的長(zhǎng)度,并且不允許超過(guò)緩沖區(qū)的長(zhǎng)度大小,但有些程序會(huì)假定數(shù)據(jù)長(zhǎng)度總是與所分配的存儲(chǔ)空間相匹配,而不做檢查,從而為緩沖區(qū)溢出埋下隱患。
那末我們應(yīng)當(dāng)如何利用緩沖區(qū)溢出呢?1般情況下,溢出的數(shù)據(jù)會(huì)覆蓋掉相鄰區(qū)域的內(nèi)容。我們可以利用溢出的數(shù)據(jù),使計(jì)算機(jī)履行我們想要的命令。這就是很多漏洞公告上說(shuō)的:“黑客可以用精心構(gòu)造的數(shù)據(jù)……”道理就是這樣。
作為初學(xué)者,如果還不熟習(xí)這個(gè)概念,可先把緩沖區(qū)溢出利用理解為允許攻擊者往某個(gè)程序變量中放1個(gè)比預(yù)期長(zhǎng)度要長(zhǎng)的值,由此以當(dāng)前運(yùn)行該程序的用戶的特權(quán)履行任意命令。
第1個(gè)緩沖區(qū)溢出攻擊――Morris蠕蟲(chóng),產(chǎn)生在1988年,由羅伯特莫里斯(Robert Morris)制造,它曾造玉成世界6000多臺(tái)網(wǎng)絡(luò)服務(wù)器癱瘓。時(shí)至本日,溢出攻擊照舊是安全領(lǐng)域的熱門話題,比如烏云網(wǎng)(WooYun.org)總會(huì)有關(guān)于緩沖區(qū)溢出類漏洞的報(bào)告:
圖2 某軟件的緩沖區(qū)漏洞概要
這是關(guān)于興業(yè)銀行的,提交于2014年9月22日的,關(guān)于“緩沖區(qū)溢出”的漏洞報(bào)告。下面是宜信平臺(tái)的溢出報(bào)告:
圖3 某平臺(tái)的堆棧溢出漏洞概要
可見(jiàn)緩沖區(qū)溢出漏洞確切是普遍存在的。
最后再講1下我們這個(gè)系列的課程安排,首先會(huì)給大家分析基礎(chǔ)的緩沖區(qū)溢出漏洞的原理和利用方法,和基礎(chǔ) ShellCode的編寫方法,隨著課程的不斷深入,我會(huì)不斷地完善我們的 ShellCode,并且結(jié)合真實(shí)的漏洞案例進(jìn)行分析。以后還會(huì)給大家介紹更多種類的緩沖區(qū)溢出方法,還有緩沖區(qū)溢出漏洞的高級(jí)防范措施等。我希望本系列的課程能夠培養(yǎng)大家的安全意識(shí),擴(kuò)大大家的思惟,使得大家在學(xué)習(xí)完這1系列的課程以后,都能打下堅(jiān)實(shí)的基礎(chǔ),令每位朋友都能夠成為安全領(lǐng)域的專家。