如果把一加侖的水注入容量為一品脫的容量中,水會四處冒出,這時你就會充分理解溢位的含義。同樣的道理,在計算機內部,如果你向一個容量有限的記憶體空間裡儲存過量資料,這時資料也會溢位儲存空間。輸入資料通常被存放在一個臨時空間內,這個臨時存放空間被稱為緩衝區,緩衝區的長度事先已經被程式或者*作系統定義好了。
何為緩衝區溢位
緩衝區溢位是指當計算機程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。
*作系統所使用的緩衝區又被稱為堆疊,在各個*作程序之間,指令被臨時儲存在堆疊當中,堆疊也會出現緩衝區溢位。
當一個超長的資料進入到緩衝區時,超出部分就會被寫入其他緩衝區,其他緩衝區存放的可能是資料、下一條指令的指標,或者是其他程式的輸出內容,這些內容都被覆蓋或者破壞掉。
可見一小部分資料或者一套指令的溢位就可能導致一個程式或者*作系統崩潰。
溢位根源在於程式設計
緩衝區溢位是由程式設計錯誤引起的。如果緩衝區被寫滿,而程式沒有去檢查緩衝區邊界,也沒有停止接收資料,這時緩衝區溢位就會發生。
緩衝區邊界檢查被認為是不會有收益的管理支出,計算機資源不夠或者記憶體不足是程式設計者不編寫緩衝區邊界檢查語句的理由,然而摩爾定律已經使這一理由失去了存在的基礎,但是多數使用者仍然在主要應用中執行十年甚至二十年前的程式程式碼。
緩衝區溢位之所以氾濫,是由於開放原始碼程式的本質決定的。
一些程式語言對於緩衝區溢位是具有免疫力的,例如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,再到日前爆發的“衝擊波”,都是利用緩衝區溢位漏洞的典型。
緩衝區溢位是一個程式設計問題,防止利用緩衝區溢位發起的攻擊,關鍵在於程式開發者在開發程式時仔細檢查溢位情況,不允許資料溢位緩衝區。此外,使用者需要經常登入*作系統和應用程式提供商的網站,跟蹤公佈的系統漏洞,及時下載補丁程式,彌補系統漏洞。
如果把一加侖的水注入容量為一品脫的容量中,水會四處冒出,這時你就會充分理解溢位的含義。同樣的道理,在計算機內部,如果你向一個容量有限的記憶體空間裡儲存過量資料,這時資料也會溢位儲存空間。輸入資料通常被存放在一個臨時空間內,這個臨時存放空間被稱為緩衝區,緩衝區的長度事先已經被程式或者*作系統定義好了。
何為緩衝區溢位
緩衝區溢位是指當計算機程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。
*作系統所使用的緩衝區又被稱為堆疊,在各個*作程序之間,指令被臨時儲存在堆疊當中,堆疊也會出現緩衝區溢位。
當一個超長的資料進入到緩衝區時,超出部分就會被寫入其他緩衝區,其他緩衝區存放的可能是資料、下一條指令的指標,或者是其他程式的輸出內容,這些內容都被覆蓋或者破壞掉。
可見一小部分資料或者一套指令的溢位就可能導致一個程式或者*作系統崩潰。
溢位根源在於程式設計
緩衝區溢位是由程式設計錯誤引起的。如果緩衝區被寫滿,而程式沒有去檢查緩衝區邊界,也沒有停止接收資料,這時緩衝區溢位就會發生。
緩衝區邊界檢查被認為是不會有收益的管理支出,計算機資源不夠或者記憶體不足是程式設計者不編寫緩衝區邊界檢查語句的理由,然而摩爾定律已經使這一理由失去了存在的基礎,但是多數使用者仍然在主要應用中執行十年甚至二十年前的程式程式碼。
緩衝區溢位之所以氾濫,是由於開放原始碼程式的本質決定的。
一些程式語言對於緩衝區溢位是具有免疫力的,例如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,再到日前爆發的“衝擊波”,都是利用緩衝區溢位漏洞的典型。
緩衝區溢位是一個程式設計問題,防止利用緩衝區溢位發起的攻擊,關鍵在於程式開發者在開發程式時仔細檢查溢位情況,不允許資料溢位緩衝區。此外,使用者需要經常登入*作系統和應用程式提供商的網站,跟蹤公佈的系統漏洞,及時下載補丁程式,彌補系統漏洞。