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