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