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

C語言內存安全性運行時驗證技術綜述

2021-05-07 02:24:26張琦劉一辰
現代信息科技 2021年23期
關鍵詞:安全性程序檢測

張琦 劉一辰

摘? 要:C語言廣泛應用于嵌入式軟件和系統軟件的開發,它提供了更直接的底層內存控制,但卻缺少對內存訪問安全性的檢測,導致C程序運行時可能產生內存安全性錯誤。當前,開發人員力求通過多種驗證技術解決內存安全性錯誤,最常用的是運行時驗證技術。文章首先對C程序常見的內存安全性錯誤進行分析,然后介紹幾種相關的內存分析技術,最后分別對幾種常用的C程序內存安全性檢測工具進行介紹和比較,為接下來的研究工作提供了方向性參考。

關鍵詞:C程序;內存錯誤;運行時驗證;AddressSanitizer;Movec

中圖分類號:TP311? ? ?文獻標識碼:A文章編號:2096-4706(2021)23-0084-04

Overview of C Language Memory Safety Runtime Verification Technology

ZHANG Qi, LIU Yichen

(College of Computer Science and Technology, Nanjing University of Aeronautics and Astronautics, Nanjing? 211106, China)

Abstract: C language is widely used in the development of embedded software and system software. It provides more direct underlying memory control but lacks the detection of memory access security, which causes memory security errors when C programs are running. At present, developers strive to solve memory security errors through a variety of verification technologies, the most commonly used is runtime verification technology. This paper first analyzes common memory security errors in C programs, then introduces several related memory analysis techniques, and finally introduces and compares several commonly used C program memory security detection tools. It provides direction reference for the following research work.

Keywords: C program; memory error; runtime verification; Address Sanitizer; Movec

0? 引? 言

隨著社會的不斷發展,信息化為人們的生產生活帶來極大的便利。生活中的方方面面都離不開計算機軟件的應用,如在線教育、智能交通服務、遠程醫療、5G通信以及各種社交、辦公等領域。計算機軟件在給人們帶來便利的同時,也潛藏著一些安全問題。OpenSSL本身是一個用于安全通信,可以保證數據機密性和可靠性的應用程序。然而,在2014年,OpenSSL被爆出“心臟滴血”重大漏洞,攻擊者通過這一漏洞,可以獲取應用程序源碼、用戶的網絡訪問請求和用戶的cookie信息,甚至可以獲取到用戶的電子郵件、銀行卡賬號密碼等信息,給用戶帶來不可估量的損失。RPC遠程過程調用是一個進程通信機制,允許一臺計算機遠程執行另一臺計算機上的代碼。2003年,利用RPC一個漏洞的蠕蟲“沖擊波”在互聯網上傳播,感染了上百萬臺計算機。該病毒會建立一個“后門”,允許攻擊者遠程控制被感染的計算機,使其系統崩潰。根據保守估算,“沖擊波”造成至少5億美元的經濟損失,而起因卻是源于代碼中存在一個緩沖區溢出漏洞。為了保證軟件使用的可靠性和信息的安全性,越來越多的技術注重于檢測軟件系統的內存安全性。當前,主流的軟件驗證技術包括軟件測試、程序靜態分析、模型檢測和運行時驗證等。

C語言編寫的程序具有運行速度快、執行效率高等特點,因此C語言廣泛應用于嵌入式系統軟件的開發。同時它提供了更直接的底層內存控制,但卻缺少對內存訪問安全性的檢測,導致C程序運行時可能產生內存安全性錯誤,比如內存泄漏、緩沖區溢出、多次釋放等。因此,對C語言的內存安全性進行驗證是十分重要的。

1? C程序內存錯誤

借鑒Safe-C的分類方法,可以將C程序的內存錯誤分為空間內存錯誤和時間內存錯誤。空間內存錯誤是指對內存上下界范圍外的空間進行非法的訪問或修改,比如,對空指針進行解引用、緩沖區溢出,訪問非法指針等。時間內存錯誤是指訪問已經釋放的內存,比如,釋放后使用(UAF)、解引用懸掛指針、多次釋放、非法釋放等。

如圖1所示為幾種常見的空間內存錯誤。

圖1列出了幾種C程序常見空間內存錯誤,如圖2所示為幾種常見的時間內存錯誤。

2? 運行時驗證技術

動態分析技術在運行程序的基礎上,通過監測程序的執行情況來收集程序的運行時行為,并對其進行分析,檢查程序是否存在內存安全性問題。下面介紹幾種常見的運行時驗證技術:

(1)值驗證技術。由Crispan Cowan等人提出,主要用于檢測緩沖區溢出問題。值驗證技術的原理是在局部變量緩存區和函數返回地址之間插入一個安全變量。局部變量緩沖區一旦溢出,如果攻擊者試圖修改函數的返回地址,則該安全變量也會隨之被更改。可以通過檢測安全變量是否被修改來檢測程序是否被惡意攻擊。由于值驗證技術是通過在棧上插入安全變量的方式來檢測緩沖區溢出問題,因此該方法無法檢測堆內存和全局的緩沖區溢出問題,同時也無法檢測時間內存錯誤,有很大的局限性。

(2)基于對象技術。由Jones和Kelly提出,主要用于檢測內存越界等問題。它的主要思想是存儲程序中所有對象的上下邊界,而非存儲各個指針,這樣做的好處是多個指針指向同一個對象時只需記錄一次,從而節省存儲空間。對指針進行解引用訪問時,在指針元數據表中查詢指針的地址值,檢查指針值是否在上下界之間,如果指針值在上下界之間,則訪問合法。采用這種方式保證了對象內存布局的完整性,同時也會記錄堆內存的空間分配邊界信息。但是該技術最大的缺點是無法解決子對象問題。

(3)寬指針(fat-pointer)技術。顧名思義,指針不再只存有內存地址信息,還存有該指針所指向內存塊的基地址和大小等信息。Safe-C就是在寬指針的基礎之上,額外增加了指針變量的存儲類型和引用計數,不僅可以檢測內存越界等問題,還能處理部分時間內存錯誤。由于寬指針技術更改了原有的指針結構,會導致插樁后的代碼與未插樁代碼(比如庫函數)不兼容,并且插樁后的指針結構變得復雜,致使程序執行效率低下。

(4)基于指針的技術。其思想與寬指針類似,不同的是,該方法將指針的內存地址和大小等信息記錄到一個獨立的數據結構中,從而不改變原有的指針結構。基于指針技術的方法為每一個新創建的指針變量建立一個指針元數據pmd,pmd中存儲指針所指對象的邊界等信息。在為指針賦值時,會進行指針元數據的更新,新指針的指針元數據繼承自原指針的指針元數據。在對指針進行解引用訪問內存時,首先需要對該指針的pmd進行查詢,判斷訪問地址是否在對象的上下界范圍之內以及是否滿足相應的類型。

(5)影子內存技術。是指將一個程序內存狀態以某種特定的方式偏移映射到一個特定的空間內,其中內存狀態中包含了程序中變量存放的地址、內存是否被初始化以及其他一些變量的信息等。在對程序中的變量進行訪問時,通過查詢其影子空間存儲的該變量的內存狀態來判斷訪問是否合法。

3? 運行時驗證工具

目前,針對C語言比較成熟的動態分析工具有AddressSantizer、SoftBoundCets、Valgrind、Movec等:

(1)AddressSanitizer是谷歌公司開發的基于影子內存的技術,采用中間代碼插樁實現的動態檢測工具。該算法的思路是:如果想避免緩沖區溢出,只需在每塊內存區域的右端(或兩端)加一塊紅色區域,將內存的狀態信息記錄到影子內存中,在對內存進行操作時可以通過影子內存來判斷該內存的狀態。AddressSantizer可以有效檢測緩沖區溢出、UAF、Double-Free、內存泄漏等問題,但卻無法處理子對象越界等問題。

(2)SoftBoundCets由SoftBound和Cets構成,同樣采用基于指針的技術。其中,SoftBound可以檢測空間內存錯誤,它記錄每一個指針所指對象的邊界信息。而Cets可以檢測部分時間內存錯誤,它為每個對象維護一個唯一ID,在訪問該對象內存空間時進行檢測。但SoftBoundCets卻難以檢測子對象越界、非法訪問庫函數以及函數的指針參數等問題。

(3)Valgrind是一款用于內存安全檢測以及性能分析的框架。Memcheck是最廣泛使用的重量級內存安全檢測工具,能夠檢測大多數的內存錯誤,比如對未初始化內存的訪問、內存訪問越界等。它采用二進制代碼插樁技術并結合影子內存技術,記錄程序中內存字節是否具有有效的、已初始化的值,并記錄地址空間是否能夠被讀寫。在操作內存空間時,可以通過記錄表來分析檢測程序中的空指針訪問、Double-Free等問題,但無法處理全局變量緩沖區溢出、子對象越界等問題。

(4)Movec是南京航空航天大學計算機科學與技術學院SVLAB實驗室自主開發的用于C程序運行時監控、驗證的自動化工具。Movec采用源代碼插樁技術,利用LLVM和Clang編譯器可以將用Movec語言編寫的有關安全屬性和監控規范的運行時檢查器插入到C程序中,插樁后的程序可以兼容任何C語言編譯器(例如GCC和其他特定于平臺的編譯器)。Movec采用擴展的基于指針的技術,每個指針變量創建并維護一個指針元數據pmd(pointer metadata),圖3(a)定義了pmd的數據結構。pmd中存儲了所指向對象的上下界base和bound信息,同時還存儲了為每個內存對象創建并維護的狀態節點snd,圖3(b)定義了snd的數據結構。snd中存儲了內存對象的狀態stat和引用計數count。對象的狀態包括heap、stack、global、static、function和invalid,而引用計數記錄指向該對象的指針數。

4? 實驗對比分析

為了驗證上述工具對C程序內存安全性錯誤的檢測能力,本文選用Mibench標準測試集中的部分軟件作為該實驗的實驗數據。Mibench中包含了35個用于基準測試的嵌入式應用測試集,它主要是對通用領域的計算能力進行評價,Mibench測試集在指令分布、內存行為、并行化等方面獨具優勢。

本文實驗運行環境為:處理器選用Intel? Core? i5-7300U CPU、四核、CPU主頻2.60 GHz,內存為8 GB,操作系統為64位Ubuntu 16.04.12,編譯器為gcc 5.4.0。實驗結果如表1所示。

其中,Y表示可以找出程序的內存安全性錯誤,N表示無法找出錯誤,/表示程序無法正常運行。從實驗結果可知,Movec可以找出程序中的大部分錯誤,并準確地給出了錯誤信息;SoftBoundCets無法檢測出錯誤,并且對部分程序無法正常插樁運行;Valgrind僅發現了部分錯誤。AddressSantizer的檢測能力與Movec最接近,它發現了測試集中存在的大多數錯誤,但是漏報了blowfish中的錯誤。

5? 結? 論

隨著信息化技術的快速發展,人們的生活越來越離不開計算機軟件的使用,計算機軟件在給人們生活帶來便利的同時也存在著安全隱患,保證軟件的使用安全變得尤為重要。運行時驗證技術作為輕量化的驗證方法,能夠有效地檢測系統內存安全性方面的漏洞,得到了越來越多的應該。本文總結了幾種常用的運行時驗證技術,對比了幾種流行的運行時驗證工具并進行了實驗比較。希望未來能夠推出更多高精尖技術,并且可以將運行時驗證技術與靜態分析、模糊測試等技術相結合,進一步為軟件的內存安全性檢測做出貢獻。

參考文獻:

[1] John,Matt,Pravir. Network security with openSSL: cryptography for secure communications [M].O’Reilly Media,2002.

[2] 曹志波.OpenSSL的心臟出血漏洞 [J].電子技術與軟件工程,2017(13):263.

[3] AUSTIN T M,BREACH S E,SOHI G S. Efficient detection of all pointer and array access errors [J].ACM SIGPLAN Notices,1994,29(6):290-301.

[4] 嚴俊琦,陳哲,黃志球.C程序內存安全的運行時檢測方法研究和實現 [J].小型微型計算機系統,2017,38(10):2358-2362.

[5] 李文明,陳哲,李緒蓉,等.C程序數組越界的運行時驗證技術研究與實現 [J].計算機工程與應用,2015,51(11):190-195+211.

[6] MA R,Chen L K,Hu C Z,et al. A dynamic detection method to C/C++ programs memory vulnerabilities based on pointer analysis [C]//2013 IEEE 11th International Conference on Dependable, Autonomic and Secure Computing. Chengdu:IEEE,2013:52-57.

[7] XU W,DUVARNEY D C,SEKAR R. An efficient and backwards-compatible transformation to ensure memory safety of C programs [C]//ACM SIGSOFT twelfth international symposium on Foundations of software engineering. Newport Beach:Stony Brook University,2004:117-126.

[8] STEPANOV E,SEREBRYANY K. MemorySanitizer: Fast detector of uninitialized memory use in C++ [C]//2015 IEEE/ACM International Symposium on Code Generation and Optimization (CGO). San Francisco:IEEE,2015:46-55.

[9] SEREBRYANY K,BRUENING D,POTAPENKO A,et al. Addresssanitizer: A fast address sanity checker [C]//Usenix Conference on Technical Conference. USENIX Association,2012:309-318.

[10] NAGARAKATTE S,ZHAO J,MARTIN M M K,et al. SoftBound: Highly compatible and complete spatial memory safety for C [C]//Proceedings of the 2009 ACM SIGPLAN Conference on Programming Language Design and Implementation. Dublin:ACM,2009:245-258.

[11] Frascaroli J,Brivio S,Covi E,et al. Evidence of soft bound behaviour in analogue memristive devices for neuromorphic computing [J].Scientific reports,2018,8(1):1-12.

[12] Nethercote N,Seward J. Valgrind: a framework for heavyweight dynamic binary instrumentation [J].ACM Sigplan notices,2007,42(6):89-100.

[13] Nethercote N,Seward J. Valgrind: A program supervision framework [J].Electronic notes in theoretical computer science,2003,89(2):44-66.

作者簡介:張琦(1992—),男,漢族,江蘇連云港人,碩士研究生在讀,主要研究方向:軟件驗證;劉一辰(1999—),男,漢族,河北邢臺人,碩士研究生在讀,主要研究方向:軟件驗證。

猜你喜歡
安全性程序檢測
兩款輸液泵的輸血安全性評估
新染料可提高電動汽車安全性
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
ApplePay橫空出世 安全性遭受質疑 拿什么保護你,我的蘋果支付?
小波變換在PCB缺陷檢測中的應用
主站蜘蛛池模板: 亚洲黄色成人| 久久亚洲精少妇毛片午夜无码 | 2021国产精品自产拍在线观看| 久久久波多野结衣av一区二区| 国产精品9| 免费99精品国产自在现线| 亚洲伦理一区二区| 色爽网免费视频| 高清国产在线| 亚洲 欧美 偷自乱 图片| 国产精品免费p区| 国产精品一区二区无码免费看片| 直接黄91麻豆网站| 亚洲黄网视频| 成人久久18免费网站| 日本人真淫视频一区二区三区| 欧美日韩第三页| 毛片大全免费观看| 国产av色站网站| 国产精品毛片一区| 欧美成人在线免费| 成人永久免费A∨一级在线播放| 亚洲av日韩av制服丝袜| 亚洲欧美成人影院| 日韩在线第三页| 国产视频一区二区在线观看| 亚洲第一成年网| 毛片卡一卡二| 成年人视频一区二区| 91青青草视频| 亚洲男人的天堂久久香蕉网| 亚洲美女高潮久久久久久久| 一区二区三区国产精品视频| 国产人碰人摸人爱免费视频| 中文国产成人精品久久| 自拍偷拍欧美日韩| AV片亚洲国产男人的天堂| 五月天丁香婷婷综合久久| 亚洲AⅤ无码国产精品| 国产自产视频一区二区三区| 国产在线观看人成激情视频| a欧美在线| 在线另类稀缺国产呦| 中文字幕在线一区二区在线| 中国国语毛片免费观看视频| 亚洲人成网址| 国产在线精彩视频二区| 在线精品亚洲一区二区古装| 日韩国产欧美精品在线| 日韩中文字幕免费在线观看| 久久精品国产精品国产一区| 日韩欧美国产成人| 亚洲va视频| 成人免费黄色小视频| 国产精品成人啪精品视频| 亚洲美女一区二区三区| 国产精品妖精视频| 亚洲区欧美区| 波多野结衣一二三| av无码久久精品| 亚洲乱码在线播放| 国产超碰一区二区三区| 亚洲国产日韩一区| 国产超碰一区二区三区| 欧美国产日韩在线| 久久精品aⅴ无码中文字幕| 久久精品娱乐亚洲领先| 成人噜噜噜视频在线观看| 高清欧美性猛交XXXX黑人猛交| 全午夜免费一级毛片| 在线中文字幕网| 免费又爽又刺激高潮网址| 国产AV无码专区亚洲精品网站| 九九热视频在线免费观看| 青青草国产在线视频| 国产欧美日韩免费| 精品成人免费自拍视频| 精品免费在线视频| 九色在线观看视频| 欧美第一页在线| 亚洲午夜国产精品无卡| 99热国产在线精品99|