溢出攻擊

緩衝區溢出是指當計算機向緩衝區內填充數據位數時超過了緩衝區本身的容量溢出的數據覆蓋在合法數據上,理想的情況是 程式檢查數據長度並不允許輸入超過緩衝區長度的字元,但是絕大多數程式都會假設數據長度總是與所分配的儲存空間相匹配,這就為緩衝區溢出埋下隱患.作業系統所使用的緩衝區 又被稱為"堆疊". 在各個操作進程之間,指令會被臨時儲存在"堆疊"當中,"堆疊"也會出現緩衝區溢出。

原理

在計算機中有個叫“緩衝區”的地方,他是用來存儲用戶輸入的數據的,緩衝區的長度是被事先設定好的,如果用戶輸入的數據超過了緩衝區的長度,那么就會溢出,而這些溢出的數據就會覆蓋在合法的數據上,這就像杯子裝水的道理,水多了杯子裝不下,當然就會溢出。當緩衝區溢出時,過剩的信息對電腦記憶體中原有內容進行完全替換,如未進行備份,你的內容就永遠丟失了。“溢出攻擊”在對緩衝區中的檔案進行替換的同時,還會執行一些非法程式,從而得到命令行下的管理員許可權,之後攻擊者再通過命令行建立管理員賬號,對電腦進行控制。溢出攻擊的防禦是一門比較冷門的技術。

快取區溢出

概念

緩衝區溢出是指當計算機向緩衝區內填充數據位數時超過了緩衝區本身的容量溢出的數據覆蓋在合法數據上,理想的情況是 程式檢查數據長度並不允許輸入超過緩衝區長度的字元,但是絕大多數程式都會假設數據長度總是與所分配的儲存空間相匹配,這就為緩衝區溢出埋下隱患.作業系統所使用的緩衝區 又被稱為"堆疊". 在各個操作進程之間,指令會被臨時儲存在"堆疊"當中,"堆疊"也會出現緩衝區溢出。

危害

在當前網路與分散式系統安全中,被廣泛利用的50%以上都是緩衝區溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕蟲。而緩衝區溢出中,最為危險的是堆疊溢出,因為入侵者可以利用堆疊溢出,在函式返回時改變返回程式的地址,讓其跳轉到任意地址,帶來的危害一種是程式崩潰導致拒絕服務,另外一種就是跳轉並且執行一段惡意代碼,比如得到shell,然後為所欲為。

緩衝區溢出的原理

通過往程式的緩衝區寫超出其長度的內容,造成緩衝區的溢出,從而破壞程式的堆疊,使程式轉而執行其它指令,以達到攻擊的目的。造成緩衝區溢出的原因是程式中沒有仔細檢查用戶輸入的參數。例如下面程式:

void function(char *str) {

char buffer[16];

strcpy(buffer,str);

}

上面的strcpy()將直接把str中的內容copy到buffer中。這樣只要str的長度大於16,就會造成buffer的溢出,使程式運行出錯。存在象strcpy這樣的問題的標準函式還有strcat(),sprintf(),vsprintf(),gets(),scanf()等。

當然,隨便往緩衝區中填東西造成它溢出一般只會出現“分段錯誤”(Segmentation fault),而不能達到攻擊的目的。最常見的手段是通過製造緩衝區溢出使程式運行一個用戶shell,再通過shell執行其它命令。如果該程式屬於root且有suid(Set User ID,)許可權的話,攻擊者就獲得了一個有root許可權的shell,可以對系統進行任意操作了。

緩衝區溢出攻擊之所以成為一種常見安全攻擊手段其原因在於緩衝區溢出漏洞太普遍了,並且易於實現。而且,緩衝區溢出成為遠程攻擊的主要手段其原因在於緩衝區溢出漏洞給予了攻擊者他所想要的一切:植入並且執行攻擊代碼。被植入的攻擊代碼以一定的許可權運行有緩衝區溢出漏洞的程式,從而得到被攻擊主機的控制權。

在1998年Lincoln實驗室用來評估入侵檢測的的5種遠程攻擊中,有2種是緩衝區溢出。而在1998年CERT的13份建議中,有9份是是與緩衝區溢出有關的,在1999年,至少有半數的建議是和緩衝區溢出有關的。在Bugtraq的調查中,有2/3的被調查者認為緩衝區溢出漏洞是一個很嚴重的安全問題。

緩衝區溢出漏洞和攻擊有很多種形式,會在第二節對他們進行描述和分類。相應地防衛手段也隨者攻擊方法的不同而不同,將在第四節描述,它的內容包括針對每種攻擊類型的有效的防衛手段。

相關詞條

相關搜尋

熱門詞條

聯絡我們