999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種結(jié)合eBPF與KFENCE的Linux內(nèi)核態(tài)內(nèi)存漏洞檢測(cè)方法的研究

2021-09-26 08:19:46中國(guó)船舶重工集團(tuán)公司第七一六研究所王凱龍
電子世界 2021年16期
關(guān)鍵詞:頁(yè)面檢測(cè)方法

中國(guó)船舶重工集團(tuán)公司第七一六研究所 王凱龍

內(nèi)存漏洞包括內(nèi)存泄漏(Memory Leak)、重復(fù)釋放內(nèi)存(Double Free)和釋放后讀寫(Use after Free),均源于內(nèi)存的動(dòng)態(tài)分配過程。內(nèi)存泄漏是指應(yīng)用程序運(yùn)行過程中未及時(shí)將動(dòng)態(tài)分配的堆區(qū)內(nèi)存釋放,導(dǎo)致可用內(nèi)存持續(xù)減少,進(jìn)而造成系統(tǒng)內(nèi)存耗盡,運(yùn)行緩慢甚至崩潰的嚴(yán)重問題。重復(fù)釋放同一塊內(nèi)存、釋放后讀寫會(huì)造成指針訪問未知區(qū)域,這兩種漏洞均會(huì)導(dǎo)致不可預(yù)測(cè)的結(jié)果。

Linux內(nèi)核基于C語(yǔ)言編寫,在具有高運(yùn)行效率的同時(shí)也存在著較大的內(nèi)存泄漏隱患。內(nèi)核在管理內(nèi)存資源的同時(shí),也占用內(nèi)存資源,不合理的使用可能會(huì)造成各種異常。

目前定位內(nèi)存漏洞的方法主要有靜態(tài)檢測(cè)與動(dòng)態(tài)檢測(cè)。靜態(tài)檢測(cè)方法通過直接檢視源碼,可以較早發(fā)現(xiàn)問題,以較低的代價(jià)進(jìn)行修復(fù),但誤報(bào)漏報(bào)的風(fēng)險(xiǎn)較大。動(dòng)態(tài)檢測(cè)方法通過插入檢測(cè)代碼到目標(biāo)程序中,實(shí)時(shí)跟蹤內(nèi)存操作,可以得到較準(zhǔn)確的檢測(cè)結(jié)果。但目前多數(shù)動(dòng)態(tài)檢測(cè)方法不支持內(nèi)存泄漏檢測(cè),且有概率引入新的安全風(fēng)險(xiǎn),不適合在生產(chǎn)環(huán)境中大量使用。

eBPF技術(shù)是近年來(lái)linux系統(tǒng)領(lǐng)域的一個(gè)重大創(chuàng)新,具備較高的執(zhí)行效率和生產(chǎn)環(huán)境安全性,支持用戶可編程,加入系統(tǒng)后無(wú)需重復(fù)編譯內(nèi)核。將eBPF技術(shù)與內(nèi)存漏洞動(dòng)態(tài)檢測(cè)方法相結(jié)合,可有效支持內(nèi)存泄漏檢測(cè),并在保證檢測(cè)準(zhǔn)確性的同時(shí)有效降低對(duì)系統(tǒng)性能的影響。

1 原理和方法

1.1 eBPF/BCC

誕生于1992年的伯克利包過濾伯克利包過濾(Berkeley Bag過濾),可以免去內(nèi)核到用戶空間的無(wú)用數(shù)據(jù)包拷貝。BPF程序包含一個(gè)簡(jiǎn)單的字節(jié)碼,可經(jīng)用戶空間注入內(nèi)核,經(jīng)過驗(yàn)證程序進(jìn)行檢查(防止內(nèi)核崩潰或安全問題)后附加到套接字。BPF的語(yǔ)言簡(jiǎn)潔易用,同時(shí)BPF為編譯而設(shè)計(jì)實(shí)現(xiàn)了內(nèi)核即時(shí)(JIT)虛擬機(jī),這是該工具的杰出特色。

2013年,BPF在原有基礎(chǔ)上增加了map與tail call等新功能,性能也得到顯著提高。修改后版本稱eBPF,與經(jīng)典BPF做區(qū)別。同時(shí),JIT虛擬機(jī)被重寫。eBPF比經(jīng)典BPF更接近本機(jī)語(yǔ)言,且在內(nèi)核中開放了新的掛載點(diǎn),可以基于Event運(yùn)行程序,非常高效,可支持內(nèi)核內(nèi)編程,并可以增強(qiáng)其他跟蹤器。

eBPF在功能上做了較大拓展,可通過kprobe得到內(nèi)核函數(shù)運(yùn)行信息,無(wú)需額外加入插樁代碼重新編譯內(nèi)核,也無(wú)需借助類似gdb的調(diào)試工具。除此之外可以即時(shí)獲取代碼執(zhí)行當(dāng)前的寄存器狀態(tài)以及調(diào)用棧信息。其原理類似在指令中增加保存點(diǎn),內(nèi)核執(zhí)行至此會(huì)自動(dòng)保存當(dāng)前寄存器狀態(tài)與棧信息,然后進(jìn)入斷點(diǎn)處掛載的處理程序。程序執(zhí)行完畢,內(nèi)核返回到保存點(diǎn)位置,并將寄存器狀態(tài)恢復(fù)。

BCC(BPF Compiler Collection)是基于eBPF的開發(fā)工具包。它封裝了一系列高效的內(nèi)核跟蹤和操作接口,并提供了開箱即用的檢測(cè)工具和Demo。BCC在eBPF提供的接口基礎(chǔ)上進(jìn)行封裝,同時(shí)提供高級(jí)語(yǔ)言對(duì)應(yīng)編程接口。

圖1 eBPF運(yùn)行流程圖

1.2 內(nèi)核態(tài)動(dòng)態(tài)內(nèi)存漏洞檢測(cè)方法

KFENCE是一個(gè)低采樣的內(nèi)存錯(cuò)誤檢測(cè)工具,可以Patch形式編入內(nèi)核。它根據(jù)采樣間隔進(jìn)行受保護(hù)的內(nèi)存分配,采樣間隔到期后,通過主分配器(SLAB或SLUB)進(jìn)行的下一次分配將由KFENCE的對(duì)象池提供,同時(shí)重置計(jì)時(shí)器,等待到期后的下一次分配。每個(gè)KFENCE對(duì)象都駐留在專用頁(yè)面上,對(duì)象頁(yè)面左右兩側(cè)的頁(yè)面是受保護(hù)頁(yè)面,其屬性為受保護(hù)狀態(tài),對(duì)它們的任何訪問都會(huì)導(dǎo)致頁(yè)面錯(cuò)誤,KFENCE攔截此類頁(yè)面錯(cuò)誤并報(bào)告越界訪問。在KFENCE對(duì)象被釋放后,對(duì)象的頁(yè)面將再次受到保護(hù),并被標(biāo)記為已釋放,對(duì)該對(duì)象的任何訪問都會(huì)導(dǎo)致故障。KFENCE攔截此故障,并報(bào)告use-after-free錯(cuò)誤。

圖2 KFENCE保護(hù)內(nèi)存分布圖

KFENCE犧牲了一定的檢測(cè)精度換取了較小的性能開銷,相比于與同類方法,更適合在產(chǎn)品環(huán)境中部署,用于檢測(cè)內(nèi)存漏洞。

2 基于eBPF/KFENCE的linux內(nèi)核態(tài)內(nèi)存漏洞檢測(cè)方法

KFENCE檢測(cè)方法可用于檢查內(nèi)存訪問越界、重復(fù)釋放和use-after-free問題,但無(wú)法檢測(cè)內(nèi)存泄漏問題,另外,僅支持內(nèi)存監(jiān)測(cè),無(wú)法對(duì)內(nèi)存錯(cuò)誤做即時(shí)處理。本文通過加入eBPF模塊,補(bǔ)足了內(nèi)存泄漏檢測(cè)功能,同時(shí)在KFENCE接口處掛載內(nèi)存錯(cuò)誤處理ePBF模塊,對(duì)所報(bào)錯(cuò)誤進(jìn)行即時(shí)處理,可有效降低內(nèi)存錯(cuò)誤對(duì)系統(tǒng)運(yùn)行造成的負(fù)面影響。

針對(duì)內(nèi)存泄漏問題,Linux公開了用于內(nèi)存分配的跟蹤點(diǎn),可以通過eBPF程序?qū)ζ溥M(jìn)行檢測(cè)。本文采用的內(nèi)存泄漏檢測(cè)方法跟蹤并匹配內(nèi)存分配和重新分配請(qǐng)求,并收集記錄每個(gè)分配的調(diào)用堆棧,最終可以打印一個(gè)概要,其中統(tǒng)計(jì)了調(diào)用堆棧申請(qǐng)后沒有釋放的內(nèi)存數(shù)量。

方法流程如圖3所示。

圖3 基于eBPF/KFENCE的linux內(nèi)核態(tài)內(nèi)存漏洞檢測(cè)方法流程圖

(1)各線程的每次內(nèi)存申請(qǐng)和釋放均由eBPF模塊記錄,模塊通過判斷分配和釋放操作的不匹配,定位出泄漏內(nèi)存的調(diào)用棧。

(2)KFENCE按預(yù)設(shè)時(shí)間間隔進(jìn)行采樣,每次時(shí)間間隔到期后的下一次內(nèi)存分配將從KFENCE對(duì)象池進(jìn)行分配,對(duì)此塊內(nèi)存的操作將受到KFENCE的監(jiān)控。

(3)若內(nèi)存訪問出現(xiàn)越界錯(cuò)誤或釋放后使用錯(cuò)誤,系統(tǒng)拋出故障,由KFENCE接收,轉(zhuǎn)交eBPF模塊處理。

(4)內(nèi)存占用期間由ePBF模塊監(jiān)控,可實(shí)時(shí)獲取不同內(nèi)核線程的內(nèi)存占用情況,某線程內(nèi)存占用持續(xù)增長(zhǎng)達(dá)到閾值后報(bào)出內(nèi)存泄漏風(fēng)險(xiǎn)。

(5)若內(nèi)存釋放出現(xiàn)重復(fù)釋放錯(cuò)誤,系統(tǒng)拋出故障,由KFENCE接收,轉(zhuǎn)交ePBF模塊處理。

3 驗(yàn)證測(cè)試

本次測(cè)試環(huán)境為x86平臺(tái),單CPU四核,4G內(nèi)存,linux內(nèi)核版本5.9.1。為更好體現(xiàn)本方法對(duì)系統(tǒng)響應(yīng)時(shí)間的影響,預(yù)先加入內(nèi)核實(shí)時(shí)補(bǔ)丁,版本為5.9.1-rt20。測(cè)試內(nèi)容包括內(nèi)存漏洞檢測(cè)功能測(cè)試與檢測(cè)方法對(duì)系統(tǒng)性能影響測(cè)試。

3.1 內(nèi)存漏洞檢測(cè)方法功能測(cè)試

本文選取了KFENCE測(cè)試集,并從內(nèi)存漏洞測(cè)試集Juliet Test Suite中選取了CWE-401 Memory Leak的一部分移植至內(nèi)核態(tài)用于功能驗(yàn)證。將本文提出的內(nèi)存漏洞檢測(cè)方法在該測(cè)試集中進(jìn)行實(shí)驗(yàn)。

測(cè)試集具體信息如表1所示。

表1 測(cè)試集具體信息

3.2 檢測(cè)方法對(duì)系統(tǒng)性能影響測(cè)試

測(cè)試關(guān)注的性能項(xiàng)為系統(tǒng)響應(yīng)時(shí)間與內(nèi)存占用率,本文選取的測(cè)試工具為開源測(cè)試工具rt-test和系統(tǒng)內(nèi)存統(tǒng)計(jì)工具free。測(cè)試階段分兩次運(yùn)行系統(tǒng),一次執(zhí)行檢測(cè),另一次不執(zhí)行檢測(cè)。系統(tǒng)響應(yīng)時(shí)間記錄1000000次,并統(tǒng)計(jì)響應(yīng)時(shí)間分布情況,測(cè)試結(jié)果如表2所示。

表2 測(cè)試結(jié)果

3.3 測(cè)試結(jié)論

功能測(cè)試結(jié)果顯示,本文提出的測(cè)試模塊可以較準(zhǔn)確地檢測(cè)到各個(gè)種類的內(nèi)核態(tài)內(nèi)存漏洞。性能測(cè)試結(jié)果顯示,測(cè)試模塊對(duì)系統(tǒng)響應(yīng)時(shí)間的影響保持在us級(jí),未產(chǎn)生過大延遲,最大響應(yīng)延遲增加3us,內(nèi)存占用率提高0.07%,未對(duì)系統(tǒng)性能產(chǎn)生明顯影響。

Linux內(nèi)核中在具有高運(yùn)行效率的同時(shí)也存在著較大的內(nèi)存泄漏隱患,可能會(huì)引發(fā)不可預(yù)測(cè)的系統(tǒng)異常,有必要進(jìn)行運(yùn)行時(shí)的動(dòng)態(tài)檢測(cè),但現(xiàn)有的動(dòng)態(tài)檢測(cè)方法不能較好的覆蓋所有種類的內(nèi)存漏洞,且對(duì)系統(tǒng)性能有一定的影響,不適合在生產(chǎn)環(huán)境中大量使用。本文提出了一種基于eBPF/KFENCE的linux內(nèi)核態(tài)內(nèi)存漏洞檢測(cè)方法,經(jīng)實(shí)驗(yàn)驗(yàn)證,該方法可以較準(zhǔn)確地檢測(cè)所有常見種類的內(nèi)存漏洞,且對(duì)系統(tǒng)性能影響小,具有較高的實(shí)用價(jià)值。

猜你喜歡
頁(yè)面檢測(cè)方法
大狗熊在睡覺
刷新生活的頁(yè)面
“不等式”檢測(cè)題
“一元一次不等式”檢測(cè)題
“一元一次不等式組”檢測(cè)題
小波變換在PCB缺陷檢測(cè)中的應(yīng)用
用對(duì)方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
同一Word文檔 縱橫頁(yè)面并存
主站蜘蛛池模板: 一级全黄毛片| 日韩无码视频专区| 久久免费精品琪琪| 日本伊人色综合网| 亚洲国产成人久久精品软件| 亚洲av无码人妻| 久久精品嫩草研究院| 激情无码字幕综合| 成年人视频一区二区| 国产草草影院18成年视频| 国产成a人片在线播放| 精品少妇人妻无码久久| 少妇人妻无码首页| 91精品伊人久久大香线蕉| 欧美黄色网站在线看| 精品福利视频导航| 超碰免费91| 92午夜福利影院一区二区三区| 美女国内精品自产拍在线播放| 欧美成人综合在线| 国产99视频精品免费视频7| 国产永久无码观看在线| 天天躁夜夜躁狠狠躁躁88| 中文字幕无码中文字幕有码在线 | 精品久久久久久中文字幕女| 欧美精品在线免费| 亚洲一区二区三区国产精华液| 国产成在线观看免费视频| 久热精品免费| a毛片基地免费大全| 手机精品视频在线观看免费| 亚洲欧洲一区二区三区| 99精品国产高清一区二区| 亚洲高清无码精品| 不卡无码网| 国产在线视频欧美亚综合| 57pao国产成视频免费播放 | 日韩欧美亚洲国产成人综合| 亚洲黄色成人| 国产精品人成在线播放| 97青青青国产在线播放| 亚洲欧美成人影院| 国内自拍久第一页| 欧美日韩北条麻妃一区二区| 五月婷婷亚洲综合| 91久久国产成人免费观看| 成人在线综合| 国产黑丝一区| www.91在线播放| 激情综合五月网| 一级片一区| 国产成人精品一区二区三在线观看| 久久男人视频| 国产成人高清在线精品| 无码中文字幕乱码免费2| 五月天丁香婷婷综合久久| 好吊日免费视频| 欧美区一区| 性色一区| 国产精品无码作爱| 国产亚洲视频免费播放| 欧美日韩动态图| 人妻熟妇日韩AV在线播放| 国产微拍一区| 免费欧美一级| 2021天堂在线亚洲精品专区| 国产成人亚洲综合A∨在线播放| 无码内射中文字幕岛国片 | 香蕉精品在线| 久久鸭综合久久国产| 婷婷六月激情综合一区| 久久免费精品琪琪| 黄网站欧美内射| 亚洲第一综合天堂另类专| 亚洲国产精品无码久久一线| 好紧太爽了视频免费无码| 日本久久网站| 手机在线免费不卡一区二| 日韩精品亚洲精品第一页| 午夜福利视频一区| 久久semm亚洲国产| 老司机精品久久|