古詩詞大全網 - 成語故事 - 緩沖區溢出攻擊原理是?

緩沖區溢出攻擊原理是?

分類: 電腦/網絡 >> 電腦常識

解析:

如果把壹加侖的水註入容量為壹品脫的容量中,水會四處冒出,這時妳就會充分理解溢出的含義。同樣的道理,在計算機內部,如果妳向壹個容量有限的內存空間裏存儲過量數據,這時數據也會溢出存儲空間。輸入數據通常被存放在壹個臨時空間內,這個臨時存放空間被稱為緩沖區,緩沖區的長度事先已經被程序或者*作系統定義好了。

何為緩沖區溢出

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

當壹個超長的數據進入到緩沖區時,超出部分就會被寫入其他緩沖區,其他緩沖區存放的可能是數據、下壹條指令的指針,或者是其他程序的輸出內容,這些內容都被覆蓋或者破壞掉。可見壹小部分數據或者壹套指令的溢出就可能導致壹個程序或者*作系統崩潰。

溢出根源在於編程

緩沖區溢出是由編程錯誤引起的。如果緩沖區被寫滿,而程序沒有去檢查緩沖區邊界,也沒有停止接收數據,這時緩沖區溢出就會發生。緩沖區邊界檢查被認為是不會有收益的管理支出,計算機資源不夠或者內存不足是編程者不編寫緩沖區邊界檢查語句的理由,然而摩爾定律已經使這壹理由失去了存在的基礎,但是多數用戶仍然在主要應用中運行十年甚至二十年前的程序代碼。

緩沖區溢出之所以泛濫,是由於開放源代碼程序的本質決定的。壹些編程語言對於緩沖區溢出是具有免疫力的,例如Perl能夠自動調節字節排列的大小,Ada95能夠檢查和阻止緩沖區溢出。但是被廣泛使用的C語言卻沒有建立檢測機制。標準C語言具有許多復制和添加字符串的函數,這使得標準C語言很難進行邊界檢查。C++略微好壹些,但是仍然存在緩沖區溢出。壹般情況下,覆蓋其他數據區的數據是沒有意義的,最多造成應用程序錯誤,但是,如果輸入的數據是經過“黑客”或者病毒精心設計的,覆蓋緩沖區的數據恰恰是“黑客”或者病毒的入侵程序代碼,壹旦多余字節被編譯執行,“黑客”或者病毒就有可能為所欲為,獲取系統的控制權。

溢出導致“黑客”病毒橫行

緩沖區溢出是病毒編寫者和特洛伊木馬編寫者偏愛使用的壹種攻擊方法。攻擊者或者病毒善於在系統當中發現容易產生緩沖區溢出之處,運行特別程序,獲得優先級,指示計算機破壞文件,改變數據,泄露敏感信息,產生後門訪問點,感染或者攻擊其他計算機。

2000年7月,微軟Outlook以及Outlook Express被發現存在漏洞能夠使攻擊者僅通過發送郵件就能危及目標主機安全,只要郵件頭部程序被運行,就會產生緩沖區溢出,並且觸發惡意代碼。2001年8月,“紅色代碼”利用微軟IIS漏洞產生緩沖區存溢出,成為攻擊企業網絡的“罪魁禍首”。2003年1月,Slammer蠕蟲利用微軟SQL漏洞產生緩沖區溢出對全球互聯網產生沖擊。而在近幾天,壹種名為“沖擊波”的蠕蟲病毒利用微軟RPC遠程調用存在的緩沖區漏洞對Windows 2000/XP、Windows Server 2003進行攻擊,波及全球網絡系統。據CERT安全小組稱,*作系統中超過50%的安全漏洞都是由內存溢出引起的,其中大多數與微軟技術有關,這些與內存溢出相關的安全漏洞正在被越來越多的蠕蟲病毒所利用。

緩沖區溢出是目前導致“黑客”型病毒橫行的主要原因。從紅色代碼到Slammer,再到日前爆發的“沖擊波”,都是利用緩沖區溢出漏洞的典型。緩沖區溢出是壹個編程問題,防止利用緩沖區溢出發起的攻擊,關鍵在於程序開發者在開發程序時仔細檢查溢出情況,不允許數據溢出緩沖區。此外,用戶需要經常登錄*作系統和應用程序提供商的網站,跟蹤公布的系統漏洞,及時下載補丁程序,彌補系統漏洞。