今天就跟大家聊聊有關C/C++ 程序中的緩沖區下溢指的是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
創新互聯專注于寧明企業網站建設,響應式網站,商城系統網站開發。寧明網站建設公司,為寧明等地區提供建站服務。全流程按需網站制作,專業設計,全程項目跟蹤,創新互聯專業和態度為您提供的服務
在前續專題中對緩沖區上溢進行了分析(見第7期),本文對緩沖區溢出的另一種情況——緩沖區下溢進行描述。緩沖區上溢專題中介紹的造成緩沖區溢出的原因同樣適用于緩沖區下溢,因此在本文中就不再贅述。簡單的說,緩沖區下溢是指當填充數據溢出時,溢出部分覆蓋的是下級緩沖區。本文主要從緩沖區下溢的危害、在源代碼中的表現以及如何修復等方面對該問題進行描述。
緩沖區下溢是 C/C++ 程序中非常嚴重的漏洞類型,可能會導致程序崩潰、執行惡意代碼等后果。2018年1月至10月,CVE中共有494條漏洞信息與其相關。部分漏洞如下:
CVE | 漏洞概述 |
---|---|
CVE-2018-1000001 | Libc Realpath 緩沖區下溢漏洞,漏洞的產生是由于 GNU C 庫沒有正確處理 getcwd() 系統調用返回的相對路徑,其他庫也很可能受此影響。在受影響的系統中,通過 SUID binary 可以獲得 root 權限。 |
CVE-2018-1000637 | zutils 是一款壓縮文件處理實用程序包。該程序支持壓縮/解壓縮、壓縮文件比較和壓縮文件完整性校驗等功能。zcat 是其中的一個解壓縮實用程序。zutils 1.8-pre2 之前版本中的 zcat 存在緩沖區溢出漏洞。攻擊者可借助特制的壓縮文件利用該漏洞造成拒絕服務或執行任意代碼。 |
CVE-2018-5388 | strongSwan 5.6.3 之前版本在實現上存在緩沖區下溢漏洞,攻擊者利用此漏洞可耗盡資源,導致拒絕服務。 |
示例源于 Samate Juliet Test Suite for C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE121_Stack_Based_Buffer_Overflow__CWE193_char_alloca_cpy_01.c。
在上述示例代碼中,在第36行對指針 data
進行賦值,通過賦值操作可以看出指針 data
指向 dataBadBuffer
,當第41行使用 strcpy()
進行內存拷貝時,源緩沖區長度大于目的緩沖區長度從而產生溢出,溢出部分超出了 dataBadBuffer
的下邊界,導致緩沖區下溢問題。
使用360代碼衛士對上述示例代碼進行檢測,可以檢出“緩沖區下溢”缺陷,顯示等級為高。如圖1所示:
圖1:緩沖區下溢檢測示例
在上述修復代碼中,Samate 給出的修復方式為:在第37行對指針 data
進行賦值,將 data
指向 dataGoodBuffer
,此時 data
的長度與 source
一致,當第42行使用 strcpy()
進行拷貝操作時,源緩沖區與目的緩沖區長度相同,從而避免了緩沖區下溢的問題。該問題也可以通過對邊界進行檢查等其他方法來進行避免。
使用360代碼衛士對修復后的代碼進行檢測,可以看到已不存在“緩沖區下溢”缺陷。如圖2:
圖2:修復后檢測結果
要避免緩沖區下溢,需要注意以下幾點:
(1)盡量避免使用不安全的內存操作函數。
(2)對返回值有明確指示意義的內存操作函數,應對函數返回值進行有效判斷,從而判斷操作是否成功。
(3)在向緩沖區中填充數據時必須進行邊界檢查。
看完上述內容,你們對C/C++ 程序中的緩沖區下溢指的是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創新互聯行業資訊頻道,感謝大家的支持。
本文題目:C/C++程序中的緩沖區下溢指的是什么
本文URL:http://vcdvsql.cn/article42/pegihc.html
成都網站建設公司_創新互聯,為您提供標簽優化、網站營銷、企業網站制作、App開發、網站設計公司、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯