基于多級指針的釋放后重用漏洞防御機制研究
發(fā)布時間:2021-06-02 21:53
C/C++這類高效率語言有著對內(nèi)存低層級的控制能力,從而提高程序運行效率。但是C/C++缺乏對指針合法性的檢測,當程序開發(fā)者調(diào)用顯式釋放函數(shù)時,無法保證所有相關(guān)指針都處于無效狀態(tài),故這些不合法的指針可能導(dǎo)致一些內(nèi)存安全相關(guān)的漏洞。懸空指針是不指向任何合法對象的指針,其本身不會導(dǎo)致任何內(nèi)存安全問題,但通過懸空指針訪問內(nèi)存是造成釋放后重用漏洞的主要原因。釋放后重用漏洞會引發(fā)信息泄漏或任意代碼執(zhí)行,故這類漏洞大多屬于高危漏洞,并且近年來其數(shù)量明顯增加,其威脅也因此變得越來越嚴重;诙嗉壷羔樀尼尫藕笾赜寐┒捶烙到y(tǒng)MPChecker(Multi-level Pointer Checker)針對釋放后重用漏洞的特點,動態(tài)防御釋放后重用漏洞的利用和攻擊。首先,通過向堆對象和相關(guān)指針之間插入中間指針,形成包含多級指針的新關(guān)系。其次,所有通過相關(guān)指針對該對象的內(nèi)存訪問,只能經(jīng)過這些中間指針來實現(xiàn)。最后,為了防止懸空指針被解引用從而訪問該對象內(nèi)存,在對象釋放后,與該對象相關(guān)的所有中間指針都被置為無效,由于無效的中間指針的存在,可防止已釋放的對象被訪問。測試結(jié)果表明,MPChecker可以防御C/C++...
【文章來源】:華中科技大學(xué)湖北省 211工程院校 985工程院校 教育部直屬院校
【文章頁數(shù)】:63 頁
【學(xué)位級別】:碩士
【部分圖文】:
基于多級指針的釋放后重用漏洞防御系統(tǒng)架構(gòu)
從而節(jié)省一部分開銷。2.5 系統(tǒng)功能模塊圖2-2 基于多級指針的釋放后重用漏洞防御系統(tǒng)功能模塊MPChecker 系統(tǒng)的各個功能模塊如圖 2-2 所示,基于多級指針的釋放后重用漏洞防御系統(tǒng)主要包含:靜態(tài)編譯插樁子系統(tǒng)、堆對象管理子系統(tǒng)、指針跟蹤子系統(tǒng)、基指針鏈表。靜態(tài)編譯插樁子系統(tǒng)包括指令分析模塊、指令插樁替換模塊、自實現(xiàn)安全庫。堆對象管理子系統(tǒng)包括堆對象分配管理模塊、堆對象釋放管理模塊、指針檢查器模塊。指針跟蹤子系統(tǒng)包括指針運算傳播跟蹤模塊;羔樻湵戆ɑ羔樻湵砘灸K、基指針多線支持程模塊。接下來介紹每個模塊以及模塊之間的關(guān)系,并討論為這些組件所做的優(yōu)化。
LLVM IR 文件會跟程序 LLVM IR 文件鏈接到一起,最終編譯成最終的安全程序二進制文件。圖3-1 靜態(tài)編譯插樁子系統(tǒng)的實現(xiàn)框架3.1.1 指令分析模塊指令分析模塊會對程序的 LLVM IR 指令做遍歷分析處理,如圖 3-2 所示,首先判斷所有指令是否分析完畢,若完畢則結(jié)束分析流程,否則判斷函數(shù)調(diào)用名稱是否為 malloc/free,如果是則標記指令為堆分配/釋放操作,否則繼續(xù)判斷該函數(shù)名是否為非本地函數(shù);如果是則標記指令為外部函數(shù)調(diào)用,否則繼續(xù)判斷 load 指令的操作數(shù)是否為指針變量;如果是則標記為指針解引用操作,否則繼續(xù)判斷是否為 load、getelementptr、store 指令序列;如果是則標記為算術(shù)指令傳播
【參考文獻】:
期刊論文
[1]一種基于一階邏輯的軟件代碼安全性缺陷靜態(tài)檢測技術(shù)[J]. 秦曉軍,甘水滔,陳左寧. 中國科學(xué):信息科學(xué). 2014(01)
[2]軟件分析技術(shù)進展[J]. 梅宏,王千祥,張路,王戟. 計算機學(xué)報. 2009(09)
[3]程序靜態(tài)分析技術(shù)與工具[J]. 楊宇,張健. 計算機科學(xué). 2004(02)
本文編號:3210818
【文章來源】:華中科技大學(xué)湖北省 211工程院校 985工程院校 教育部直屬院校
【文章頁數(shù)】:63 頁
【學(xué)位級別】:碩士
【部分圖文】:
基于多級指針的釋放后重用漏洞防御系統(tǒng)架構(gòu)
從而節(jié)省一部分開銷。2.5 系統(tǒng)功能模塊圖2-2 基于多級指針的釋放后重用漏洞防御系統(tǒng)功能模塊MPChecker 系統(tǒng)的各個功能模塊如圖 2-2 所示,基于多級指針的釋放后重用漏洞防御系統(tǒng)主要包含:靜態(tài)編譯插樁子系統(tǒng)、堆對象管理子系統(tǒng)、指針跟蹤子系統(tǒng)、基指針鏈表。靜態(tài)編譯插樁子系統(tǒng)包括指令分析模塊、指令插樁替換模塊、自實現(xiàn)安全庫。堆對象管理子系統(tǒng)包括堆對象分配管理模塊、堆對象釋放管理模塊、指針檢查器模塊。指針跟蹤子系統(tǒng)包括指針運算傳播跟蹤模塊;羔樻湵戆ɑ羔樻湵砘灸K、基指針多線支持程模塊。接下來介紹每個模塊以及模塊之間的關(guān)系,并討論為這些組件所做的優(yōu)化。
LLVM IR 文件會跟程序 LLVM IR 文件鏈接到一起,最終編譯成最終的安全程序二進制文件。圖3-1 靜態(tài)編譯插樁子系統(tǒng)的實現(xiàn)框架3.1.1 指令分析模塊指令分析模塊會對程序的 LLVM IR 指令做遍歷分析處理,如圖 3-2 所示,首先判斷所有指令是否分析完畢,若完畢則結(jié)束分析流程,否則判斷函數(shù)調(diào)用名稱是否為 malloc/free,如果是則標記指令為堆分配/釋放操作,否則繼續(xù)判斷該函數(shù)名是否為非本地函數(shù);如果是則標記指令為外部函數(shù)調(diào)用,否則繼續(xù)判斷 load 指令的操作數(shù)是否為指針變量;如果是則標記為指針解引用操作,否則繼續(xù)判斷是否為 load、getelementptr、store 指令序列;如果是則標記為算術(shù)指令傳播
【參考文獻】:
期刊論文
[1]一種基于一階邏輯的軟件代碼安全性缺陷靜態(tài)檢測技術(shù)[J]. 秦曉軍,甘水滔,陳左寧. 中國科學(xué):信息科學(xué). 2014(01)
[2]軟件分析技術(shù)進展[J]. 梅宏,王千祥,張路,王戟. 計算機學(xué)報. 2009(09)
[3]程序靜態(tài)分析技術(shù)與工具[J]. 楊宇,張健. 計算機科學(xué). 2004(02)
本文編號:3210818
本文鏈接:http://sikaile.net/kejilunwen/ruanjiangongchenglunwen/3210818.html
最近更新
教材專著