談談著名的緩衝區溢出

2020-12-23 聊聊密碼學

緩衝區溢出也是大家耳熟能詳的一種軟體漏洞了,我們經常會看到「某某軟體系統存在緩衝區溢出漏洞,攻擊者可能依據此漏洞獲得系統權限,請儘快下載安裝最新版本……」這樣的新聞。

其實,緩衝區溢出的基本原理並不複雜。緩衝區就是作業系統為函數執行專門劃分出的一段內存,包括棧(自動變量)、堆(動態內存)和靜態數據區(全局或靜態)。其中緩衝區溢出發生在棧裡,棧存放了函數的參數、返回地址、EBP(EBP是當前函數的存取指針,即存儲或者讀取數時的指針基地址,可以看成一個標準的函數起始代碼)和局部變量。結構如下:

當函數中對局部變量的賦值超過了為其分配的存儲空間,超出的部分就會覆蓋棧裡其他部分的數據,也就是發生了緩衝區溢出。如下圖所示:

在上圖中,原來函數的返回地址數據被其他數據覆蓋了,函數無法找到正確的返回地址,就會發生分段錯誤(Segmentation fault)。舉個簡單的代碼例子:

#include "stdafx.h"

#include <string.h>

char name[] = "This is a buffer overflow test.";

int _tmain(int argc, _TCHAR* argv[])

{

char buffer[8];

strcpy(buffer, name);

printf("%s\n",buffer);

return 0;

}

代碼裡只給buffer數組分配了8個字節的長度,但拷貝到buffer裡的name長度超過了8個字節,執行這段代碼,就會發生緩衝區溢出。雖然name的值輸出了,但程序結束時會崩潰。

如果用VS調試,會直接提示發生了緩衝區溢出的錯誤。

如果緩衝區溢出只是導致程序執行出錯,那麼看起來危害還不是那麼大。但如果溢出到返回地址的數據是另一段函數或代碼的入口地址,那麼這段函數或代碼就會被執行,這就是緩衝區溢出漏洞真正的危害所在。如下圖。

緩衝區溢出攻擊就是利用了上述原理,通過精心構造溢出數據,將函數返回地址修改為其他函數或代碼的地址,從而達到運行的目的。而且被攻擊的程序如果有管理員權限,那麼新指向的函數或代碼也會繼承其權限,這就是緩衝區溢出攻擊容易獲得系統最高權限的原因。在實際應用中,攻擊者一般將是返回地址指向一個shell程序,這樣通過shell就可以執行任意的操作了

但實際上攻擊者是沒辦法確定新指向函數或代碼地址的,因為作業系統每次加載程序到進程空間的位置都是無法預測的,棧的位置實際是不固定的,因此通過直接修改函數返回地址的方法是不可行。攻擊者需要其他方法來確保程序能執行到正確的地址,這裡面最常用的就是藉助跳板。大體方法是這樣:通過構造溢出數據,將棧裡的函數參數修改成要執行的程序代碼(如shell),返回地址修改為系統特殊的指令jmpesp的地址,而jmpesp就是跳轉到棧寄存器。被攻擊程序執行後,首先將執行jmpesp命令,而jmpesp命令會使程序跳轉回esp所在位置,而這時esp位置就是函數參數位置(具體原因請參閱堆棧及寄存器相關知識),而函數參數已經被shell代碼所覆蓋,這樣shell就被執行了。如下圖:

緩衝區溢出的根本原因是運行的程序的代碼和數據在計算機內存中是一樣的,系統無法分別兩者,這就使通過數據修改代碼成為可能。而緩衝區溢出的直接原因是程序中沒有仔細檢查用戶輸入的參數的值,造成了數據的溢出。因此,對於別人的系統和程序,防範緩衝區溢出的方法就是勤打補丁和升級,堵塞漏洞。而對於自己開發的系統,有編譯器的邊界檢查、指針完整性檢查等方法。但我認為最好的方法是在代碼層次實施完善的參數數據檢查,以及良好的編寫規範(凸顯了程序代碼編寫規範上一篇的重要性),這些都可以有效地防範緩衝區溢出攻擊。

相關焦點

  • 精繡十叢鳶尾,收穫一城碧水——海安聚焦生態安全緩衝區建設,為...
    問針尋線提水質全面推進生態安全緩衝區建設是江蘇的創新之舉。生態安全緩衝區有涵養水源、維護生物多樣性、穩定生態等功能。目前江蘇省以被稱為「地球之腎」的溼地作為生態安全緩衝區建設第一站。人工溼地建設也是海安市推動生態文明建設富有前瞻性的重要舉措,走在江蘇省生態安全緩衝區示範項目前列。
  • 輸入緩衝區究竟有啥秘密?
    老張:產生這個問題的原因並不是源自於代碼,而是和輸入緩衝區有關。小豆丁:啥是輸入緩衝區啊?老張:我們在程序中通過scanf函數,對變量進行賦值,數據的傳遞過程你還記得吧?小豆丁:記得啊,通過標準輸入設備也就是鍵盤進行數據的輸入,然後傳遞到我們程序中的變量進行存儲。
  • 如何使用ArcMap進行簡單的緩衝區分析
    概述緩衝區分析是指以點、線、面實體為基礎,自動建立其周圍一定寬度範圍內的緩衝區多邊形圖層,然後用該圖層與目標圖層疊加,進行分析而得到所需結果。緩衝區分析可以用於分析城市交通網絡不同時段、不同交通方式居民出行的時間結構,也可用於城市不同條件下住房的選擇。這裡,我們以某段道路兩側加油站數量的確定為例,介紹一下緩衝區分析。
  • 緩衝區的輸入與輸出
    BufferedReader因為需要緩存字符,需要一個字符緩衝區。當通過構造方法BufferedReader(Reader in, int sz)sz指定該字符緩衝區大小,一般保持默認。newLine():表示換行,從一個新行開始寫入BufferedWriter對象因為要實現高效寫入,需要一個字符緩衝區,所以在構造方法BufferedWriter(Writer out, int sz) 中sz用於指定字符緩存區大小,一般可以不指定,默認足夠大。其實它的實現方法和輸入流相差不大。我們照貓畫虎都能做出來。
  • 南斯拉夫軍隊開始進駐科索沃緩衝區
    新網北京5月24日消息:星期四,南斯拉夫軍隊開始進入科索沃緩衝區的最後區域,這一行動旨在結束阿爾巴尼亞非法武裝長達16個月的叛亂。  當地時間上午8點,塞爾維亞南部的南斯拉夫軍隊司令科裡斯迪奇發出命令,開始代號為Bravo的行動。由4000人組成的第一支先遣部隊和警察開始重新進入這片代號為「B區」的5公裡寬闊地帶。
  • 江蘇率先探路生態安全緩衝區:為環境增容
    生態安全緩衝區建設,是江蘇在環保領域的重大政策創新。去年,我省將建設生態安全緩衝區寫入政府工作報告,納入省政府十大主要任務百項重點工作。出於「為環境增容、為企業減負」的考量,一年來,全省推出一批試點項目,為緩衝區建設探路。
  • 我在緩衝區等你出來……
    我在緩衝區等你出來「加油,安全出來,我在外面等你!」這句話,你每天不知多少次重複每一次重複也是你為自己再一次敲響出徵的戰鼓你給進入病區的戰友穿上防護服一層層防護用品反覆檢查再親自把他們送入緩衝區
  • 江蘇召開全省生態安全緩衝區推進視頻會
    為進一步加大生態安全緩衝區工作推進力度,12月10日,江蘇省生態環境廳組織召開全省生態安全緩衝區推進視頻會,省生態環境廳黨組成員、副廳長於紅霞出席會議並講話。會上,南京市、常州市、太倉市、南通市、海安市、泰州市、泗洪縣等地介紹了生態安全緩衝區項目建設進展情況,省環科院副院長張磊、省住建廳城市建設處副處長何伶俊分別對生態安全緩衝區建設做技術講評。於紅霞對全省生態安全緩衝區工作取得的成效表示肯定。
  • 居家消毒應設「緩衝區」
    設置緩衝區對於我們大多數沒有接觸過患者的普通人來說家是乾淨的,也許最需要消毒的應該是外出回來的我們的手和衣物,還有我們戴過的口罩。建議大家在玄關附近安排一個小的「隔離緩衝區」。所謂「隔離緩衝區」,就是一個在家外面的「汙染區域」和家裡面「乾淨區域」之間的準備區域。
  • 探訪賽普勒斯軍事緩衝區,繁榮市鎮因戰爭成鬼城
    賽普勒斯聯合國緩衝區(又稱「綠線」)。攝影師走進這個全長約187英裡的軍事緩衝地帶,拍攝下了由戰爭造成的賽普勒斯鮮為人知的「鬼城」。該軍事緩衝區建於1964年,旨在防止土耳其和希臘軍隊之間的血腥衝突。1974年,土耳其軍隊入侵以報復希臘支持的軍事政變後,正式在其所佔領的區域外圍劃出「綠線」。
  • JVM中十種內存溢出的解決方法
    導言:對於java程式設計師來說,在虛擬機自動內存管理機制的幫助下,不需要自己實現釋放內存,不容易出現內存洩漏和內存溢出的問題,由虛擬機管理內存這一切看起來非常美好,但是一旦出現內存溢出或者內存洩漏的問題,對於不熟悉jvm虛擬機是怎麼使用內存的話,那麼排查錯誤將會是一項非常艱巨的任務。所以在了解內存溢出之前先要搞明白JVM的內存模型。
  • 通訊:中國駐賽普勒斯維和警察守護緩衝區的和平與安寧
    新華社尼科西亞1月11日電 通訊:中國駐賽普勒斯維和警察守護緩衝區的和平與安寧新華社記者張保平在賽普勒斯北部,一條180多公裡長的聯合國緩衝區橫貫全島,將賽普勒斯一分為二。6名來自中國的維和警察與來自其他15個國家的警察一起日夜守護著緩衝區的和平與安寧。
  • 曹妃甸溼地、保護區的核心、緩衝區將全面禁止商業性種養
    保護區規劃總面積10081.4公頃(實測總面積9613.74公頃),按功能劃分,核心區面積3214.27公頃、緩衝區面積1517.21公頃、實驗區面積4882.26公頃;按屬地劃分,四農場涉及面積1502.94公頃(全在實驗區)、七農場涉及面積4719.99公頃、十一農場涉及面積3390.81公頃。
  • F1賽事總監:儘管大家都喜歡礫石緩衝區,但不可能成為常態
    國際汽聯賽事總監麥可·馬西表示,儘管受到眾多車手們的青睞,但在穆傑羅賽道上使用的礫石緩衝區方案並不適用於所有賽道與許多現代化賽道不同的是,老派的穆傑羅賽道很多地方都有礫石緩衝區,像是3、5、9、11和15號彎道,這也是為什麼國際汽聯不在這幾個彎設置賽道限制的原因。在今年的F1車手賽前會議上,緩衝區和賽道限制的話題經常成為會上討論的熱門話題。
  • 俄羅斯大獎賽多起狀況再度掀起緩衝區熱議
    賽道上的緩衝區共有砂石、草皮、泥土,或是近年來現代賽道上的柏油路面緩衝區,為了讓衝進緩衝區的車手們不影響賽道上的狀況以及確保安全的情況下,FIA國際汽聯近年在部分賽道的柏油路面緩衝區設置了路線指示牌引導車手按照規定的路線返回賽道。
  • 三國志幻想大陸怒氣值溢出怎麼辦 怒氣值溢出效果介紹
    18183首頁 三國志幻想大陸 三國志幻想大陸怒氣值溢出怎麼辦 怒氣值溢出效果介紹 三國志幻想大陸怒氣值溢出怎麼辦 怒氣值溢出效果介紹
  • 江蘇省生態環境廳領導調研江寧都市型生態安全緩衝區智慧溼地項目
    6月29日,江蘇省生態環境廳副廳長於紅霞率隊調研江寧都市型生態安全緩衝區智慧溼地項目,聽取了江寧區水環境治理和智慧溼地項目建設情況匯報。 「該項目採用了生態芯溼地+表面流溼地方式,深度處理汙水處理廠的尾水,最大程度發揮生態安全緩衝區對改善環境質量的積極作用。」江寧生態環境局負責人介紹,同時此項目內容還包括對科學園汙水處理廠排水口河段實施生態修復,進一步提高方山溝水體自淨能力,削減入河汙染負荷。
  • 廣州海珠溼地擬與周邊社區共建生態緩衝區
    廣州海珠溼地擬與周邊社區共建生態緩衝區金羊網  作者:李煥坤  2020-07-24 文/羊城晚報全媒體記者李煥坤圖/海珠溼地提供7月24日,羊城晚報全媒體記者從廣州海珠國家溼地公園處獲悉,海珠溼地周邊或將迎來一片生態緩衝區。
  • 武漢戰疫家庭模擬醫院在家建起「緩衝區」
    愛國衛生月,武漢人這樣做清潔戰疫家庭模擬醫院在家建起「緩衝區」4月1日,專業消殺人員對江岸區百大鮮生丹水池市場的電梯等區域進行消殺長江日報記者劉斌 攝武漢一個戰疫家庭模擬醫院做法,在家裡也建起了「緩衝區」。
  • 在YouTube上顯示緩衝區速度 大小和視頻總大小
    在視頻播放時顯示緩衝區速度是一個Beta腳本,您可以將其安裝在Firefox或Google Chrome等瀏覽器中,以在視頻頁面上直接顯示與緩衝區相關的信息。判決雖然不是必需的,但「在播放視頻時顯示緩衝區速度」可以為您提供在YouTube上觀看視頻時可能有用的信息,尤其是當您有時遇到緩慢的緩衝或根本沒有緩衝時。