❶ 緩沖區溢出的基本原理是什麼
緩沖區溢出的原理:
通過往程序的緩沖區寫超出其長度的內容,造成緩沖區的溢出,從而破壞程序的堆棧,使程序轉而執行其它指令,以達到攻擊的目的。造成緩沖區溢出的原因是程序中沒有仔細檢查用戶輸入的參數。例如下面程序:
void function(char *str) {
char buffer[16];
strcpy(buffer,str);
}
上面的strcpy()將直接吧str中的內容到buffer中。這樣只要str的長度大於16,就會造成buffer的溢出,使程序運行出錯。存在象strcpy這樣的問題的標准函數還有strcat(),sprintf(),vsprintf(),gets(),scanf()等。
漏洞:
緩沖區溢出攻擊的目的在於擾亂具有某些特權運行的程序的功能,這樣可以使得攻擊者取得程序的控制權,如果該程序具有足夠的許可權,那麼整個主機就被控制了。一般而言,攻擊者攻擊root程序,然後執行類似「exec(sh)」的執行代碼來獲得root許可權的shell。為了達到這個目的,攻擊者必須達到如下的兩個目標:
在程序的地址空間里安排適當的代碼。
通過適當的初始化寄存器和內存,讓程序跳轉到入侵者安排的地址空間執行。
可以根據這兩個目標來對緩沖區溢出攻擊進行分類。
以上內容參考:網路-緩沖區溢出
❷ 怎麼進行緩沖區溢出攻擊
緩沖區溢出(又稱堆棧溢出)攻擊是最常用的黑客技術之一。這種攻擊之所以泛濫,是由於開放源代碼程序的本質決定的。Unix本身以及其上的許多應用程序都是用C語言編寫的,而C語言不檢查緩沖區的邊界。在某些情況下,如果用戶輸入的數據長度超過應用程序給定的緩沖區,就會覆蓋其他數據區,這就稱作"緩沖區溢出"。 一般情況下,覆蓋其他數據區的數據是沒有意義的,最多造成應用程序錯誤;但是,如果輸入的數據是經過"黑客"精心設計的,覆蓋緩沖區的數據恰恰是黑客的入侵程序代碼,黑客就獲取了程序的控制權。盡管這項攻擊的技術要求非常高,而一旦執行這項攻擊的程序被設計出來卻是非常簡單的。由於緩沖區溢出是一個編程問題,所以他們只能通過修復被破壞的程序代碼來解決問題。從"緩沖區溢出攻擊"的原理可以看出,要防止此類攻擊,我們可以在開放程序時仔細檢查溢出情況,不允許數據溢出緩沖區。經常檢查操作系統和應用程序提供商的站點,一旦發現補丁程序就馬上下載是最好的方法。
❸ 怎麼解決緩沖區溢出的問題啊``各位大俠請指點!謝了!!
緩沖區溢出是指當計算機程序向緩沖區內填充的數據位數超過了緩沖區本身的容量。溢出的數據覆蓋在合法數據上。理想情況是,程序檢查數據長度並且不允許輸入超過緩沖區長度的字元串。但是絕大多數程序都會假設數據長度總是與所分配的存儲空間相匹配,這就為緩沖區溢出埋下隱患。操作系統所使用的緩沖區又被稱為堆棧,在各個操作進程之間,指令被臨時存儲在堆棧當中,堆棧也會出現緩沖區溢出。
當一個超長的數據進入到緩沖區時,超出部分就會被寫入其他緩沖區,其他緩沖區存放的可能是數據、下一條指令的指針,或者是其他程序的輸出內容,這些內容都被覆蓋或者破壞掉。可見一小部分數據或者一套指令的溢出就可能導致一個程序或者操作系統崩潰。
緩沖區溢出是由編程錯誤引起的。如果緩沖區被寫滿,而程序沒有去檢查緩沖區邊界,也沒有停止接收數據,這時緩沖區溢出就會發生。緩沖區邊界檢查被認為是不會有收益的管理支出,計算機資源不夠或者內存不足是編程者不編寫緩沖區邊界檢查語句的理由,然而摩爾定律已經使這一理由失去了存在的基礎,但是多數用戶仍然在主要應用中運行十年甚至二十年前的程序代碼。
緩沖區溢出之所以泛濫,是由於開放源代碼程序的本質決定的。一些編程語言對於緩沖區溢出是具有免疫力的,例如Perl能夠自動調節位元組排列的大小,Ada95能夠檢查和阻止緩沖區溢出。但是被廣泛使用的C語言卻沒有建立檢測機制。標准C語言具有許多復制和添加字元串的函數,這使得標准C語言很難進行邊界檢查。C++略微好一些,但是仍然存在緩沖區溢出。一般情況下,覆蓋其他數據區的數據是沒有意義的,最多造成應用程序錯誤,但是,如果輸入的數據是經過「黑客」或者病毒精心設計的,覆蓋緩沖區的數據恰恰是「黑客」或者病毒的入侵程序代碼,一旦多餘位元組被編譯執行,「黑客」或者病毒就有可能為所欲為,獲取系統的控制權。
使用一組或多組附加驅動器存儲數據的副本,這就叫數據冗餘技術。比如鏡像就是一種數據冗餘技術。