溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何實(shí)現(xiàn)C++程序釋放后使用導(dǎo)致的漏洞分析

發(fā)布時(shí)間:2022-01-18 15:02:16 來源:億速云 閱讀:186 作者:柒染 欄目:網(wǎng)絡(luò)管理

如何實(shí)現(xiàn)C++程序釋放后使用導(dǎo)致的漏洞分析,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

1、釋放后使用

當(dāng)動(dòng)態(tài)分配的內(nèi)存釋放時(shí),該內(nèi)存的內(nèi)容是不確定的,有可能保持完整并可以被訪問,因?yàn)槭裁磿r(shí)候重新分配或回收釋放的內(nèi)存塊是內(nèi)存管理程序決定的,但是,也可能該內(nèi)存的內(nèi)容已經(jīng)被改變,導(dǎo)致意外的程序行為。因此,當(dāng)內(nèi)存釋放之后,保證不再對(duì)它進(jìn)行寫入或讀取。

2、 釋放后使用的危害

由內(nèi)存管理不當(dāng)導(dǎo)致的問題是 C/C++ 程序中常見的漏洞。釋放后使用會(huì)導(dǎo)致可被利用的潛在風(fēng)險(xiǎn),包括程序異常終止、任意代碼執(zhí)行和拒絕服務(wù)攻擊等。2018年1月至11月,CVE 中共有134條漏洞信息與其相關(guān)。部分漏洞如下:

CVE漏洞概述
CVE-2018-1000051 Artifex Mupdf 版本的 fz_keep_key_storable 中存在一個(gè)釋放后使用漏洞,可導(dǎo)致拒絕服務(wù)或代碼執(zhí)行問題。通過誘騙受害者打開一個(gè)特殊構(gòu)造的 PDF 文件,該漏洞即可遭利用。
CVE-2018-17474谷歌 Chrome 瀏覽器70.0.3538.67 之前版本 Blink 引擎的 HTMLImportsController 中存在一個(gè)釋放后使用漏洞,很有可能導(dǎo)致遠(yuǎn)程攻擊者通過一個(gè)特殊構(gòu)造的 HTML 頁(yè)面利用堆損壞問題。
CVE-2018-15924Adobe Acrobat 和 Reader 2018.011.20063及之前版本、2017.011.30102 及之前版本、2015.006.30452 及之前版本中存在釋放后使用漏洞。遠(yuǎn)程攻擊者可利用該漏洞執(zhí)行任意代碼。

3、示例代碼

示例源于 Samate Juliet TestSuite for C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE416_Use_After_Free__malloc_free_char_01.c。

3.1缺陷代碼

如何實(shí)現(xiàn)C++程序釋放后使用導(dǎo)致的漏洞分析

使用360代碼衛(wèi)士對(duì)上述示例代碼進(jìn)行檢測(cè),可以檢出“釋放后使用”缺陷,顯示等級(jí)為高。如圖1所示:

如何實(shí)現(xiàn)C++程序釋放后使用導(dǎo)致的漏洞分析

圖1:釋放后使用檢測(cè)示例

3.2 修復(fù)代碼

如何實(shí)現(xiàn)C++程序釋放后使用導(dǎo)致的漏洞分析

在上述修復(fù)代碼中,Samate 給出的修復(fù)方式為:在第30行使用 malloc()進(jìn)行內(nèi)存分配,并在第36行處使用 free() 進(jìn)行釋放,釋放后不在對(duì)該內(nèi)存進(jìn)行其他操作。

使用360代碼衛(wèi)士對(duì)修復(fù)后的代碼進(jìn)行檢測(cè),可以看到已不存在“釋放后使用”缺陷。如圖2:

如何實(shí)現(xiàn)C++程序釋放后使用導(dǎo)致的漏洞分析

圖2:修復(fù)后檢測(cè)結(jié)果

4 、如何避免釋放后使用

要避免釋放后使用,需要注意以下幾點(diǎn):

(1) 釋放內(nèi)存時(shí)請(qǐng)務(wù)必置空指針,雖然這種方法針對(duì)多重或復(fù)雜數(shù)據(jù)結(jié)構(gòu)利用的有效性有限,但可以從一定程度上規(guī)避一部分問題。

(2) 在循環(huán)語(yǔ)句中進(jìn)行內(nèi)存分配或釋放時(shí),需謹(jǐn)慎確認(rèn)是否存在問題。

(3) 使用源代碼靜態(tài)分析工具進(jìn)行自動(dòng)化的檢測(cè),可以有效的發(fā)現(xiàn)源代碼中的釋放后使用問題。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI