搜尋
首頁運維安全C語言源碼二次釋放的危害是什麼

1、二次釋放

二次釋放簡單理解就是對同一個指標指向的記憶體釋放了兩次,針對C語言原始碼,對同一個指標進行兩次 free() 操作,可能導致二次釋放,本文3.1章節的缺陷代碼就是這類情況的描述。在C 語言中,淺拷貝操作不當是導致二次釋放常見原因之一。如:呼叫一次賦值運算子或拷貝建構子將會導致兩個物件的資料成員指向相同的動態記憶體。此時引用計數機制變得非常重要,當引用計數不當時,一個物件超出作用域時,析構函數將會釋放這兩個物件共享的記憶體。另一個物件中對應的資料成員將會指向已經釋放的記憶體位址,而當這個物件也超出作用域時,它的析構函數試圖再次釋放這塊內存,導致二次釋放問題。詳細請參閱CWE ID 415: Double Free。

2、二次釋放的危害

二次釋放記憶體可能導致應用程式崩潰、拒絕服務攻擊等問題,是C/C 中常見的漏洞之一。 2018年1月至11月,CVE中共有38個漏洞資訊與其相關。部分漏洞如下:

#CVE-2018-16425OpenSC 0.19.0-rc1 先前版本中的libopensc/pkcs15-sc-hsm.c 檔案的'scpkcs15emuschsminit' 函數存在二二次釋放漏洞。攻擊者可藉助特製的智慧卡利用漏洞造成拒絕服務(應用程式崩潰)。 CVE-2018-16402elfutils 0.173 版本中的libelf/elf_end.c 檔案有安全性問題,遠端攻擊者可利用漏洞造成拒絕服務(二次釋放和應用程式崩潰)。
#CVE 編號
CVE-2018-18751 GNU gettext 0.19.8 版本中的read-catalog.c 檔案的'defaultaddmessage' 函數存在二次釋放漏洞。
CVE-2018-17097 Olli Parviainen SoundTouch 2.0 版本中的WavFile.cpp 檔案的WavFileBase 類別存在安全漏洞,遠端攻擊者可利用該漏洞造成拒絕服務(二次釋放)。
CVE-2018-16425

3、範例程式碼

範例源自於Samate Juliet Test Suite for C/C v1.3 (https:// samate.nist.gov/SARD/testsuite.php),原始檔名:CWE415_Double_Free__malloc_free_char_17.c。

3.1缺陷程式碼
C語言源碼二次釋放的危害是什麼

#在上述範例程式碼中,第32行使用  malloc()  進行記憶體分配,並在第36行使用 free() 對分配的記憶體進行了釋放,在第38行for

循環語句中,又對已經釋放的記憶體

data

進行了一次釋放,導致二次釋放問題。

C語言源碼二次釋放的危害是什麼使用360程式碼衛兵對上述範例程式碼進行偵測,可以檢出「二次釋放」缺陷,顯示等級為中。如圖1所示:

圖1:二次釋放偵測範例

3.2 修正程式碼
C語言源碼二次釋放的危害是什麼

#在上述修復程式碼中,Samate 給出的修復方式為: 在第32行使用malloc()

進行記憶體分配,並在第36行處使用

free()

進行釋放,釋放後不在對該記憶體進行釋放操作。


使用360程式碼衛兵對修復後的程式碼進行偵測,可以看到已不存在「二次釋放」缺陷。如圖2:C語言源碼二次釋放的危害是什麼

圖2:修正後偵測結果

4 、如何避免二次釋放

要避免二次釋放,需要注意以下幾點:

(1)野指標是導致二次釋放和釋放後使用的重要原因之一,消除野指標的有效方式是在釋放指標之後立即把它設為 

NULL

或設定為指向另一個合法的物件。

(2)針對 C 淺拷貝導致的二次釋放問題,始終執行深拷貝是不錯的解決方案。
###(3)使用原始碼靜態分析工具,可以自動化的發現程式中可能存在的二次釋放問題。 ######

以上是C語言源碼二次釋放的危害是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器