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

一種面向Linux內核模塊的內存檢錯方法

2015-07-24 19:01:14任鎮陳莉君
微型電腦應用 2015年7期
關鍵詞:檢測方法

任鎮,陳莉君

一種面向Linux內核模塊的內存檢錯方法

任鎮,陳莉君

為了方便發現特定內核模塊中隱藏的內存訪問錯誤,本文設計了一個面向Linux 內核模塊的內存檢測框架KMMemcheck。該框架使用可選擇性影子內存方法記錄內核模塊中動態分配的內存塊信息,結合二進制分析技術解析內存訪問指令,然后借助影子內存提供的信息判斷內存訪問是否合法。從而解決了內核自帶檢測工具不能獨立、高效地檢測特定內核模塊內存訪問錯誤的問題。實驗結果表明,相比內核自帶內存檢測工具,KMMemcheck顯著地降低了對系統I/O吞吐率的影響。

內核模塊;內存訪問檢測;影子內存

0 引言

據權威機構US-CERT漏洞數據庫[1],在linux內核所有漏洞中內存訪問越界約占14%,內存泄露約占4%。內存訪問越界很容易破壞正常數據,使程序出錯或獲得意想不到的結果;內存泄露會不斷消耗內存資源,降低系統運行效率,甚至耗盡內存最終導致系統崩潰。值得注意的是以可裝載內核模塊方式開發的設備驅動[2]代碼增長最快,同時也是內核中bug最多的部分[3]。作為發現內存bug,提高軟件質量的重要手段,內存檢測工具一直以來備受開發者關注。從使用范圍來看內存檢測工具有用戶態和內核態兩類。應用開發者使用用戶態工具檢測應用程序,而內核和驅動開發者使用內核態工具。用戶態具有代表性的工具有PREFix[4]和Valgrind[5]中的memecheck[6]等;而內核態具有代表性的工具有Kmemcheck[7]和KEDR[8]等。對國內外多種典型內存檢測工具分析之后,發現用戶態程序的內存檢測工具種類豐富、檢測功能齊全可靠,已經發展得相當成熟,而Linux內核態下的內存檢測工具數量和質量都明顯不足。

內核態下內存檢測工具普遍存在功能單一和系統性能消耗大等缺點。其中,Kmemcheck是基于缺頁異常處理機制和影子內存技術實現的,每次內存訪問指令都會觸發頁故障處理而且消耗大量內存,使整個系統性能大幅度下降。KEDR是一個面向內核模塊的檢測框架,由于它是基于系統調用[9]攔截技術實現的,因此功能僅僅局限于內存泄露的檢測,而不能檢測內存越界等其它常見錯誤。

針對內核態內存檢測工具功能單一、性能差的不足,結合可選性影子內存(Selective Shadow Memory,SSM)方法和二進制分析技術[10],本文設計了一個面向Linux內核模塊的內存檢測框架(Memory Check for Kernel Module,KMMemcheck)。

1 檢測框架的設計與實現

1.1 KMMemcheck的設計

KMMemcheck是基于面向內核模塊的二進制分析框架Granary[11],并結合可選擇性影子內存方式SSM設計的。Granary最大的特點是只對感興趣的內核模塊而不是整個內核進行二進制分析。而SSM是一種輕量級影子內存[12]方法,只監控內核模塊中動態分配的內存。系統整體設計框架,如圖7示:

圖7 KMMemcheck整體框架

Granary主要起兩個作用:一方面通過內存分配函數(如kmalloc等)封裝層捕獲內核模塊內存分配行為,為內存對象(內核模塊中的陰影部分)分配并初始化元數據,并將元數據添加到SSM組件中;另一方面在每一條內存訪問指令執行前,調用由插件實現的鉤子函數,根據元數據判斷內存訪問合法性。

另外,SSM組件負責建立內存對象與影子內存的映射關系,并向內存檢錯插件提供接口。然后針對不同的內存錯誤,實現SSM組件提供的接口,便可開發出不同功能的內存檢錯插件,使系統具有可擴展性。SSM組件的設計,如圖2所示:

目前的x86-64架構CPU都遵循AMD的Canonical規范,內核空間地址高16位必須置1。SSM利用高16位作為元數據表索引,這樣做的優點是只要通過簡單掩碼運算就能建立起內存對象與影子內存間的映射關系。但是如果隨著元數據分配越來越多,不同的內存對象可能會得到相同的索引,該問題可以通過哈希表鏈地址法解決。

影子內存結構由兩部分組成:元信息和鉤子函數表。在分配內存塊時,元信息用來保存內存塊的特征,如內存塊起始地址、大小和是否已初始化等。鉤子函數表主要包括插樁和合法性檢測兩個接口。Granary將二進制代碼塊解析之后,會調用插樁方法查找內存訪問指令并記錄內存訪問基址和偏移量等信息,然后將這些信息作為參數傳遞給合法性檢測方法。合法性檢測方法對比元信息和內存訪問指令信息,從而判斷內存訪問的合法性。

1.2 KMMemcheck的實現

1.2.1 動態添加影子內存

Granary提供了一套內核函數封裝機制,使得被調用的函數重定向去執行自身的封裝函數。內核具有一系列內存分配函數,都需要生成對應的封裝函數。以__kmalloc函數為例說明影子內存的添加過程如圖3所示:

圖3 內存分配封裝函數

封裝函數先調用自身__kmalloc進行實際內存對象分配,再調用Add_Shadow_Mem函數分配一塊影子內存,用影子內存來存儲元數據,然后添加到影子內存表中。

1.2.2 內存越界檢測插件

一種常用的內存越界方法是在內存塊末尾追加標記內存,如果程序訪問了標記內存,說明發生了內存訪問越界。但是,這種方法的有效性依賴于標記內存的大小,如果標記內存較小,跨度大的越界就檢查不到,如果標記內存較大,那么太浪費存儲空間。本文提出的方法能準確地記錄內存塊的首地址和大小,使檢測的有效性不依賴于額外的標記內存大小,因此更適合實現內存越界檢測工具。

如下圖4所示:

圖4 檢測內存越界的數據結構

bound_descriptor是用來描述內存對象的結構體,其中base表示內存塊的起始地址,uper_bound表示內存塊的上界,通過單鏈表將所有元數據組織起來。

內存訪問越界的處理流程,如圖5所示:

圖5 內存訪問越界處理流程

1)指令解析:運用DBT技術,對機器指令進行反匯編,得到指令的操作碼和操作數。

2)判斷訪問地址是否被監控:若給一個內存塊添加了影子內存,則稱這個內存塊的首地址是被監控的。

3)若訪問地址是被監控的,則以地址的高16位為索引查找哈希表,獲取相應元數據。

4)檢查訪問合法性:假設我們要向緩存中寫入數據,緩存首地址為base,索引為index,緩存元素數據類型大小為type_size,將要寫入的操作數大小為opd_size,則判斷訪問是否越界的公式如公式(1)、(2):

如果公式(1)成立為向下溢出,公式(2)成立為向上溢出,統稱內存訪問越界。

5)如果檢查到內存訪問越界,則生成錯誤報告。

2 實驗和性能分析

通過實現內存越界檢測工具,展現KMMemcheck框架的有效性和擴展性,然后通過性能測試驗證其對系統性能影響小的優點。實驗使用的PC機配置為Intel? Core? 2 Duo 2.93 GHz處理器, 4GB內存,安裝Ubuntu 64位操作系統,內核版本為linux kernel 3.8。

以內存越界檢測為例,進行功能性驗證。首先,通過設置編譯參數啟用內存越界檢測插件;然后將以可裝載內核模塊形式的檢測工具kmmemcheck.ko插入內核;接著,將測試模塊testmod.ko插入內核,模塊中動態分配了一塊緩沖區,并對緩沖區進行寫溢出操作;然后讀取測試結果如下所示:

表示在testmod_init函數偏移0x0e處有1個字節的寫溢出,若借助objdump工具便可定位源碼位置。

接下來使用IOZone測試工具,對Ext4文件系統I/O吞吐率進行測試來反應內存檢錯工具對系統性能的影響。實驗分3組:native不使用內存檢錯工具,KMMemcheck使用本文設計的檢測框架,kmemcheck是內核自帶的內存檢錯工具。每組實驗分別對512M大小的文件進行讀寫,重復讀寫和隨機讀寫測試,測試結果,如圖6所示:

圖6 ext4文件系統I/O吞吐率

測試數據反映使用kmemcheck進行內存檢測時I/O吞吐率下降得非常明顯,相比之下KMMemcheck對系統性能的影響不大,不會影響對系統的正常使用,而且提高了測試效率。

3 總結

基于動態二進制指令解析技術和可選擇性內存影子方法,設計了一個面向內核模塊的內存檢錯方法,介紹了其基本工作原理和關鍵實現環節。該方法能夠在程序運行過程中實時檢測來發現隱性的內存問題,并且基于插件式的開發接口可以構建不同類型的內存錯誤檢測工具。而且,面向內核模塊的特點不僅縮小了內存錯誤的檢查范圍,也帶了減少系統消耗的好處。但是,可選擇性內存影子方法只能夠為動態分配的內存對象創建元數據,因此,該方法不能檢測靜態內存錯誤。隨著對影子內存技術的深入研究,把影子內存技術應用到整個內核模塊地址空間將克服這個問題。

[1] US-CERT. US-CERT vulnerability notes database [EB/OL]. http://www.kb.cert.org/vuls,2014,05.

[2] 陳莉君.Linux內核的分析及應用[J].西安郵電學院學報,2001,6(1):18-20.

[3] Kernel Bug Tracker.內核中各子系統bug占比報告[EB/OL]. https://bugzilla.kernel.org/report.cgi,2014,04.

[4] William R., Jonathan D.,David J.,et al.A static analyzer for finding dynamic programming errors[J]. Software-Practice & Experience,2000,7(30): 775-802.

[5] Nethercote N.,Seward J.Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation[C] //Jeanne Ferrante. PLDI’07. San Diego, CA, USA:ACM New York,2007: 89-100.

[6] Nethercote N.,Seward J. "How to shadow every byte of memory used by a program[C] //Chandra Krintz. VEE '07. San Diego, California, USA:ACM New York,2007: 65-74.

[7] Nossum V.GETTING STARTED WITH KMEMCHECK [EB/OL].https://www.kernel.org/doc/Documentation/ kmemcheck.txt.,2014,04.

[8] Petrenko A. KEDR - Dynamic Analysis of Linux Kernel Modules[EB/OL]. http://linuxtesting.org/kedr,2014,03.

[9] 蘇錦繡,陳莉君.基于系統調用的日志系統的設計與實現[J].西安郵電大學學報,2011,16(4):59-65.

[10] Feiner P.; Brown A. D. and Goel A.Comprehensive Kernel Instrumentation via Dynamic Binary Translation[C] //Tim Harris. ASPLOS’12. London, England, UK: ACM New York, 2012:135-146.

[11] Goodman P. Granary: Comprehensive Kernel Module Instrumentation[OE/OL].http://www.petergoodman.me/d ocs/osdi-2012-poster.pdf,2014,06.

[12] Zhao Qin, Bruening D. Umbra: Efficient and Scalable Memory Shadowing[C] //Andreas Moshovos. CGO’10.Toronto, Ontario, Canada:ACM NewYork,2010:22-31.

TP311.5

A

2015.01.13)

1007-757X(2015)07-0056-03

任 鎮(1989-),男,西安郵電大學,計算機學院,碩士研究生,研究方向:嵌入式操作系統,西安,710121

陳莉君(1964-),女,西安郵電大學,計算機學院,教授,碩士,研究方向:Linux操作系統,西安,710121

猜你喜歡
檢測方法
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
“幾何圖形”檢測題
“角”檢測題
學習方法
小波變換在PCB缺陷檢測中的應用
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
主站蜘蛛池模板: 看国产毛片| 国产精品片在线观看手机版| 久久久久国产一级毛片高清板| 欧美一级一级做性视频| 亚洲一本大道在线| 亚洲男人的天堂视频| 热99re99首页精品亚洲五月天| 精品三级网站| 国产成人免费高清AⅤ| 91探花在线观看国产最新| 2021精品国产自在现线看| 欧美激情一区二区三区成人| 欧美第一页在线| 黄片在线永久| 欧美在线一二区| 91精品啪在线观看国产60岁 | 亚洲熟妇AV日韩熟妇在线| 国产精品太粉嫩高中在线观看| 91亚洲国产视频| 1024你懂的国产精品| 国产高颜值露脸在线观看| 狼友视频一区二区三区| 久久免费成人| 欧美一区二区福利视频| 丝袜美女被出水视频一区| 日韩欧美国产中文| 中文字幕啪啪| 精品无码日韩国产不卡av | 激情视频综合网| 看国产毛片| 婷婷激情亚洲| 久久国产av麻豆| 午夜丁香婷婷| 在线视频一区二区三区不卡| 亚洲Av综合日韩精品久久久| 日本在线欧美在线| 99这里只有精品在线| 国产JIZzJIzz视频全部免费| 一区二区理伦视频| 欧美全免费aaaaaa特黄在线| 久久国产热| 亚洲成aⅴ人片在线影院八| 国产成人av大片在线播放| 亚洲精选高清无码| 亚洲日韩精品欧美中文字幕| 精品国产一区91在线| 亚洲欧美极品| 中文字幕 91| 色久综合在线| 国产一区二区在线视频观看| 国产精品自拍合集| 日韩A∨精品日韩精品无码| 国产一级毛片在线| 久久精品人人做人人爽电影蜜月| 亚洲第一成网站| 综合色区亚洲熟妇在线| 97精品国产高清久久久久蜜芽| 久久这里只有精品2| 2020国产免费久久精品99| 色综合成人| 99久久精品国产自免费| 国产精品久久久久鬼色| 色天天综合| 91精品啪在线观看国产| 91无码人妻精品一区二区蜜桃| 欧美精品色视频| 国产亚洲男人的天堂在线观看 | 精品久久久无码专区中文字幕| 久久黄色毛片| 无码精品国产VA在线观看DVD| 欧美一区精品| 亚洲欧美成aⅴ人在线观看| 亚洲成人动漫在线| 欧美一区二区三区国产精品| 国产一区二区丝袜高跟鞋| 熟女成人国产精品视频| 亚洲乱强伦| 激情综合图区| 漂亮人妻被中出中文字幕久久| 亚洲一级毛片在线观播放| 久久精品亚洲热综合一区二区| 亚洲欧美日韩视频一区|