日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

缓冲区溢出漏洞浅析

發布時間:2024/3/26 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 缓冲区溢出漏洞浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

緩沖區是指內存中一段連續的地址空間,用來緩存數據。在大多數開發語言中,把數組和指針分配的空間作為緩沖區。緩沖區溢出是指讀取或寫入的范圍超過數組或指針指向的緩沖區空間,導致程序運行期間發生異常。緩沖區溢出大多數情況下編譯器無法給出錯誤信息,而只有當程序運行期間才會暴露出來,所以緩沖區溢出也歸屬于運行時缺陷。運行期間發生異常是由于緩沖區溢出數據(包括上界和下界),破壞了緩沖區上下邊界外其它變量的數據,導致出現異常,由于在程序運行期間,是否超過邊界、超過邊界時,破壞了邊界外的數據,而邊界外數據是否發生異常,取決于收到污染的變量值,是否合理,當時是否用于其它程序功能等,所以緩沖區溢出缺陷可能會出現程序異常,也可能短期內不會出現程序異常。

?

???? 下面是緩沖區溢出原理示意圖:

?

?

?? 緩沖區溢出在不同的編譯器和操作系統下,溢出數據破壞棧中位置可能不同。與操作系統是否支持DEP(數據執行保護)有關。

?

?? 常見的緩沖區溢出缺陷包括:

  • 寫入污染數據導致的越界
  • 污染數據由于數組下標
  • 污染數據用于內存分配函數
  • 污染數據用于指標操作
  • 污染數據用于拷貝字符串
  • 污染數據用于格式化字符串
  • 給數組賦值字符串越界
  • 數組下標訪問越界
  • 初始化內存越界
  • 指針操作越界
  • 字符串拷貝越界
  • 格式化字符串導致的緩沖區溢出
  • ?

    緩沖區溢出可以使任何一個有黑客技術的人取得機器控制權甚至最高權限。比較著名安全漏洞事件包括2003年8月的沖擊波病毒、2014年4月報出的openssl“Heartbleed”(心臟滴血)漏洞,2015年1月的glibc庫幽靈漏洞。根據CNNVD2018年12月月報顯示,當月采集漏洞1275個,其中緩沖區溢出錯誤排名第一,一共196個,占比15.37%。在CWE收集的緩沖區溢出漏洞相關的編號包括CWE 119、CWE 120、CWE 121、CWE 122、CWE 129、CWE 134、CWE 193、CWE 787、CWE 788和CWE 805等。

    緩沖區溢出導致安全漏洞是主要是由于開發人員在編寫程序中緩沖區使用不當引起的,這種類型有共同的特征,是可以通過源代碼靜態分析手段檢測出來,是完全可以在開發階段檢測出來并進行修復的,這時候修復安全漏洞的成本也是最低的。

    下面我們列舉其中的幾個包含緩沖區溢出錯誤的代碼。

  • 寫入污染數據導致的越界
  • #include <stdio.h>

    #include <stdlib.h>

    ?

    int main(int argc, char *argv[])

    {

    ??

    ?? char cArray[10];

    ?? scanf("%s",cArray);

    ?? printf("%s,Hello, welcome you!\n",cArray);??????

    ?? return 0;

    }

    上面代碼中聲明了數組aArray,大小為10個字符長度。在代碼中通過控制臺輸入字符串,直接存儲到數組,如果輸入長度超過10個,則會導致緩沖區溢出。防止出現這種錯誤可以通過限制輸入數據長度避免該漏洞,例如 scanf("%10s",cArray);

    ? 所謂污染數據主要是指來自于輸入設備、文件或網絡等外部的數據,如果沒有對輸入數據的長度、類型等進行合法性檢測,則會存在著安全漏洞。我們無法不允許用戶輸入數據,但是我們必須保證輸入數據在可控范圍之內。

    ?

  • 污染數據用于數組下標
  • #include <stdio.h>

    #include <stdlib.h>

    ?

    int main(int argc, char *argv[])

    {

    ?? char cArray[10];

    ?? ind? n=0;

    ?? int? i=0;

    ?

    ?? for(i=0 ; i<10 ; i++ )

    ?? {

    ?? ?? scanf("%d",@n);

    ??? cArray[n]=1;

    ?? }

    return 0;

    }

    上面代碼中聲明了字符數組cArray,大小為10,在循環中通過輸入一個數字用于數組的下標。如果用戶輸入0-9之外的數字,則會導致數組越界。防止這種錯誤產生可以通過對讀入的下標值進行判斷,是否在0-9范圍之內。

    CWE 129屬于該類漏洞。我們無法控制用戶輸入我們想要的數據,但是我們可以通過合法性檢驗防止不能接受的輸入。

    今天放假第一天,做了幾道數學題目,感覺現在初中數學題目真很難,還是整理我們的專業技術還簡單一些。由于時間關系,其它類型錯誤例子后續我繼續整理,由淺到深逐漸把緩沖區溢出的各種情況列出來。

    關注互聯網安全,也不要忘記代碼安全。且代碼安全,我們可以通過自動化手段實現。代碼錯誤和安全漏洞檢測是可以像接口測試一樣(趕快摒棄基于GUI的自動化測試吧,為什么大家都搞接口自動化測試),真正能夠在企業生產中通過自動化測試工具落地。

    關注安全,關注作者

    總結

    以上是生活随笔為你收集整理的缓冲区溢出漏洞浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。