|
-
首頁 > 知識庫 >
溢位攻擊
-
溢位攻擊
之前美國銀行因?yàn)轳斂腿肭謱?dǎo)致大量客戶資料外流,而二月十九日CERT網(wǎng)站又公布最新的Oracle9i Application Server、Oracle9i Database及Oracle8i Database發(fā)現(xiàn)有緩衝區(qū)溢位的問題存在。其實(shí)網(wǎng)路攻擊是有模式可循的,一般常見的攻擊模式包含下面幾點(diǎn)特質(zhì):
(A)幾乎所有的攻擊都可以被某種特殊模式所描述。
(B)在攻擊前會有「前條件(preconditions)」限制。
(C)攻擊都有其步驟。
(D)設(shè)定「後條件(postconditions)」,如果條件成立表示攻擊成功。
所謂的「前條件」,就是包含我們要攻擊目標(biāo)的相關(guān)資料收集、攻擊者相關(guān)背景或目標(biāo)現(xiàn)在狀態(tài)…等條件。這些條件可能包含有攻擊者的技巧、可用資源、存取方式或是其他發(fā)動攻擊所需要的相關(guān)知識,這些前條件的設(shè)定主要是依據(jù)攻擊者當(dāng)時可以承受的風(fēng)險與使用的資源所決定。
相對於前條件,「後條件」強(qiáng)調(diào)的是結(jié)果驗(yàn)證。所謂的攻擊成功可能只是單純的相關(guān)知識取得、改變目標(biāo)機(jī)器狀態(tài)或是其他前條件裡面設(shè)定要取得的「戰(zhàn)利品」(例如:某個檔案)。
根據(jù)Cowan的報告看來,在過去二十年常見的網(wǎng)路攻擊方法裡面,以「緩衝區(qū)溢位(buffer overflow)」攻擊最為常見。這種攻擊方法是利用一個包含「致能紀(jì)錄(activation records)」的使用者程式被系統(tǒng)載入記憶體排入「執(zhí)行堆疊(execution stack)」後,利用致能記錄會在程式結(jié)束時傳回一個包含記憶體位置、局部變數(shù)或是緩衝區(qū)的指標(biāo)特性以取得系統(tǒng)相關(guān)資訊。
在某些程式裡面,該程式可能會因?yàn)槭褂谜咻斎氲淖执L而造成溢位問題的發(fā)生。就以一個記錄型態(tài)來說,在物件巴斯卡(object Pascal)語言的紀(jì)錄型態(tài)裡面,它還包含記錄「可變區(qū)域(variable record)」,此紀(jì)錄變異區(qū)域允許程式在相同記憶體內(nèi)載入不同資料型態(tài)。但如果我們在記錄的可變區(qū)域內(nèi)使用系統(tǒng)可執(zhí)行「垃圾回收機(jī)制」的資料型態(tài)(例如:AnsiString字串型態(tài)),那便可以造成該記錄在記憶體內(nèi)發(fā)生例外情況出現(xiàn)。
緩衝區(qū)溢位之所以可怕,在於它會覆蓋掉鄰近的局部變數(shù)、回傳指標(biāo)甚至是鄰近的記憶體資料。藉由這種方式,攻擊者可以建構(gòu)某種特殊的使用者輸入字串或是長度來將回傳指標(biāo)指到他的惡意程式碼部分,然後攻擊者的惡意程式就可在原本被覆蓋程式的「特權(quán)區(qū)域(privilege region)」執(zhí)行。如果原本的特權(quán)區(qū)域是屬於管理員區(qū)域,那在一般情況下,攻擊者將可以完全控制該電腦。在CERT網(wǎng)站裡面,我們可以看見最近的網(wǎng)路安全漏洞大多來自於這種溢位攻擊問題,例如:MS-SQL、CVS…等等的安全漏洞都是(請參閱http://www.cert.org/)。
在此在溢位攻擊模式裡面,其攻擊目的在於「使利用溢位的特性讓攻擊者的惡意程式碼可以在別的系統(tǒng)特權(quán)區(qū)域執(zhí)行」。在溢位攻擊裡面,其前條件一般是「攻擊者需在目標(biāo)電腦有可以執(zhí)行一些程式的能力」。
其溢位攻擊步驟可以分成四點(diǎn),首先需要「識別可執(zhí)行目標(biāo)程式的電腦,並進(jìn)行策劃其緩衝區(qū)溢位的可能方法」;其次,要想辦法「將回傳指標(biāo)指向原本含有惡意程式碼的致能記錄區(qū)域」;第三、建構(gòu)一個「輸入數(shù)值使其程式碼可以寫入程式記憶體空間」;第四、執(zhí)行原本程式將其「執(zhí)行指標(biāo)指向我們的惡意程式碼區(qū)域」。
在這些攻擊步驟完成後,他需要一個評估攻擊是否成功的方法(也就是「後條件」)。在後條件設(shè)定方面,一個基本要求就是「目標(biāo)系統(tǒng)要能執(zhí)行攻擊者的惡意程式碼」。惡意程式碼不一定是要在管理員特區(qū)執(zhí)行,但如果可以執(zhí)行那表示攻擊者使用溢位攻擊成功。
在緩衝區(qū)溢位的運(yùn)作原理上,其原則是以「程式相信使用者輸入都是合法的字元(包含長度)」為前提,在這種以輸入造成溢位攻擊的範(fàn)例裡面,他還有一個更貼切的名稱,稱為「輸入確認(rèn)攻擊(input validation attacks)」。這種攻擊方式基本上比較難以杜絕,因?yàn)椤篙斎?input)」本身就是資訊傳遞的一個基本過程,只要繼續(xù)有這種功能存在,就會持續(xù)有這方面的攻擊事件
|