-
1 # 可阿星
-
2 # 使用者3296806220335
緩衝區溢位好比是將十磅的糖放進一個只能裝五磅的容器裡……
堆疊溢位(又稱緩衝區溢位)攻擊是最常用的駭客技術之一。我們知道,UNIX本身以及其上的許多應用程式都是用C語言編寫的,C語言不檢查緩衝區的邊界。在某些情況下,如果使用者輸入的資料長度超過應用程式給定的緩衝區,就會覆蓋其他資料區。這稱作“堆疊溢位或緩衝溢位”。
一般情況下,覆蓋其他資料區的資料是沒有意義的,最多造成應用程式錯誤。但是,如果輸入的資料是經過“駭客”精心設計的,覆蓋堆疊的資料恰恰是駭客的入侵程式程式碼,駭客就獲取了程式的控制權。如果該程式恰好是以root執行的,駭客就獲得了root許可權,然後他就可以編譯駭客程式、留下入侵後門等,實施進一步地攻擊。按照這種原理進行的駭客入侵就叫做“堆疊溢位攻擊”。
為了便於理解,我們不妨打個比方。緩衝區溢位好比是將十磅的糖放進一個只能裝五磅的容器裡。一旦該容器放滿了,餘下的部分就溢位在櫃檯和地板上,弄得一團糟。由於計算機程式的編寫者寫了一些編碼,但是這些編碼沒有對目的區域或緩衝區——五磅的容器——做適當的檢查,看它們是否夠大,能否完全裝入新的內容——十磅的糖,結果可能造成緩衝區溢位的產生。如果打算被放進新地方的資料不適合,溢得到處都是,該資料也會製造很多麻煩。但是,如果緩衝區僅僅溢位,這只是一個問題。到此時為止,它還沒有破壞性。當糖溢位時,櫃檯被蓋住。可以把糖擦掉或用吸塵器吸走,還櫃檯本來面貌。與之相對的是,當緩衝區溢位時,過剩的資訊覆蓋的是計算機記憶體中以前的內容。除非這些被覆蓋的內容被儲存或能夠恢復,否則就會永遠丟失。
在丟失的資訊裡有能夠被程式呼叫的子程式的列表資訊,直到緩衝區溢位發生。另外,給那些子程式的資訊——引數——也丟失了。這意味著程式不能得到足夠的資訊從子程式返回,以完成它的任務。就像一個人步行穿過沙漠。如果他依賴於他的足跡走回頭路,當沙暴來襲抹去了這些痕跡時,他將迷失在沙漠中。這個問題比程式僅僅迷失方向嚴重多了。入侵者用精心編寫的入侵程式碼(一種惡意程式)使緩衝區溢位,然後告訴程式依據預設的方法處理緩衝區,並且執行。此時的程式已經完全被入侵者操縱了。
入侵者經常改編現有的應用程式執行不同的程式。例如,一個入侵者能啟動一個新的程式,傳送秘密檔案(支票本記錄,口令檔案,或財產清單)給入侵者的電子郵件。這就好像不僅僅是沙暴吹了腳印,而且後來者也會踩出新的腳印,將我們的迷路者領向不同的地方,他自己一無所知的地方。
緩衝區溢位的處理
你屋子裡的門和窗戶越少,入侵者進入的方式就越少……
由於緩衝區溢位是一個程式設計問題,所以只能透過修復被破壞的程式的程式碼而解決問題。如果你沒有原始碼,從上面“堆疊溢位攻擊”的原理可以看出,要防止此類攻擊,我們可以:
1、開放程式時仔細檢查溢位情況,不允許資料溢位緩衝區。由於程式設計和程式語言的原因,這非常困難,而且不適合大量已經在使用的程式;
2、使用檢查堆疊溢位的編譯器或者在程式中加入某些記號,以便程式執行時確認禁止駭客有意造成的溢位。問題是無法針對已有程式,對新程式來講,需要修改編譯器;
3、經常檢查你的作業系統和應用程式提供商的站點,一旦發現他們提供的補丁程式,就馬上下載並且應用在系統上,這是最好的方法。但是系統管理員總要比攻擊者慢一步,如果這個有問題的軟體是可選的,甚至是臨時的,把它從你的系統中刪除。舉另外一個例子,你屋子裡的門和窗戶越少,入侵者進入的方式就越少。
回覆列表
指由多個以不同速度或優先順序執行的硬體或程式程序共享的資料儲存區,在其中暫時儲存資料。緩衝區使程序之間的相互等待變少了。先結束的程序可以把結果放入緩衝區內,進行下面的工作,而後做完的程序可以從緩衝區內取出原來的資料繼續工作。緩衝區的作用是:在高速和低速裝置之間起一個速度平滑作用;暫時儲存資料;經常訪問的資料可以放進緩衝區,減少對慢速裝置的訪問以提高系統的效率。