delphi 調用瀏覽器內核_HFL:基于混合模糊測試的Linux內核漏洞挖掘

61b8008144c55b2678cbd753011edeaf.png

Remarks

Conference: NDSS 2020

Full Paper: HFL: Hybrid Fuzzing on the Linux Kernel

Summary

  • 針對的問題: Linux 操作系統內核安全漏洞的發現需要新技術。
  • 現有解決方案的不足:當前的模糊測試技術難以直接應用于內核安全漏洞發現。
  • 提出的創新方案概述:解決內核安全漏洞發現過程中的三大挑戰:1) 具有由系統調用參數確定的間接控制傳輸,2)通過系統調用控制和匹配內部系統狀態,3)推斷用于調用系統調用的嵌套參數類型。提出一種基于混合模糊測試技術的內核安全漏洞發現技術。
  • 達到的效果:在最新的 Linux 內核中 ,發現 24 個新型安全漏洞, 漏洞發現速率提高 3 倍以上。代碼覆蓋率比Moonshine提升15%,比Syzkaller提升26%。

Introduction

Linux其內核龐大導致存在很多未知的漏洞, 而這些內核安全漏洞影響巨大,迫切需要創新的技術提升當前的漏洞發現率 。本文創新發展的混合模糊測試技術,一直是近年來漏洞發現領域的研究熱點,技術價值正在逐步展現,值得漏洞挖掘相關研究人員跟蹤、掌握該技術,用于現有研究工作中。

本文的主要貢獻有:

  1. 第一個可以應用于內核測試的混合模糊測試工具。
  2. 解決內核安全漏洞發現過程中的三大挑戰:1) 具有由系統調用參數確定的間接控制傳輸,2)通過系統調用控制和匹配內部系統狀態,3)推斷用于調用系統調用的嵌套參數類型。提出一種基于混合模糊測試技術的內核安全漏洞發現技術。
  3. 在最近的 Linux 內核中 ,發現 24 個新型安全漏洞, 漏洞發現速率提高 3 倍以上。代碼覆蓋率比Moonshine提升15%,比Syzkaller提升26%。

Motivation

混合模糊測試結合了模糊測試和符號執行的優點,避免了各自一定的缺陷,是挖掘二進制漏洞的有力工具。但是在Linux內核的測試上,不論是單獨地模糊測試,單獨地符號執行,或者是混合模糊測試,都無法取得很好的結果,這是由于Linux內核的機制,比常規的軟件有很多特殊的地方。本文總結了三個特定于內核的挑戰。

  • 挑戰一:為了支持大量的設備,Linux內核中大多數組件都和抽象接口實現層解耦合,一般來講,接口層用于訪問特定功能的實現,這方面與對象編程相似。Linux內核代碼中有運行時多態性和編譯時多態性,借用C++中的多態概念來分析,運行時多態是指程序運行時才可確定的多態性,主要通過繼承和虛函數獲得。Linux構建一個函數指針表(抽象接口),其中包含一系列指向具體實現的函數指針,在運行時候,執行某種操作,從函數指針表抓取某個指針,由當時具體的對象類型決定,在編譯階段不能確定系統調用哪個函數,也被稱為滯后聯編(或動態綁定),典型的例子就是虛擬文件系統。編譯時多態性,主要通過重載機制獲得。可在執行前,通過靜態分析提升測試效果。但是運行時多態性之前沒有有效的辦法解決。Fuzzer無法用輸入的索引值來獲取函數指針表中的指針。符號執行也不能解決。
  • 挑戰二:利用fuzzing技術測試內核操作系統,一般都是以系統調用作為輸入,因為系統調用是用戶態和內核態交互的關鍵。并且內核的系統調用是上下文依賴的,需要在特定的內部狀態下。而不考慮上下文依賴的系統調用往往會直接被拒絕,無法進入下一步測試。對于符號執行技術,由于內核的系統狀態需要很多數據變量維持,符號執行容易遭遇狀態爆炸問題。
  • 挑戰三:Linux內核中大量的系統調用的參數都是嵌入式結構,比如某個參數字段的內容指向另外一個結構,這樣的嵌入式結構的系統調用的各個參數的語義很難猜測,因此輸入很難構造,更難以把輸入模板化。

當前的一些內核模糊測試技術并沒有很好的解決上述的問題。如下圖所示。IMF使用系統調用跟蹤來分析系統調用順序,以期望解決上述挑戰二。MoonShine通過靜態分析來推斷系統調用依賴。DIFUZE通過靜態分析來推斷完整系統調用參數的類型。這些靜態分析的方法無法準確的推斷處結果,因為某些參數是須在運行時才能確定的。

0647f3680fbaa8c306f669948cdd9e29.png

Approach

總體來講,HFL的設計遵循了用戶級混合模糊測試技術的設計,將傳統的模糊和符號執行結合起來。HFL的總體運行流程如下圖所示。HFL的特征有Kernel Syscall Fuzzing,Coverage Guided Fuzzing,Symbolic Analyzer。前面兩個特征在內核模糊測試中很常見,就不贅述了。對于Symbolic Analyzer,傳統的混合模糊測試中,如何判定fuzzing遇到hard constraint,再切換到symbolic execution,一直是一個難點。在HFL中,其fuzzer通過維護一個頻度計數表在測試期間統計用戶程序(一系列的系統調用)執行時,條件判斷語句的true or false頻度,以此來判定程序是否被“卡住”。對于一個用戶程序執行過程中,越是先出現的分支判斷低頻度越要重視,因為他的非條件可能會觸發更多的代碼覆蓋。

b589abb8e5c95f23f6698c43459f7f47.png

針對內核的模糊測試,本文提出了以下解決方法:

  1. 將間接控制轉化為直接控制-轉換原始內核。
  2. 推斷系統調用序列,建立一致的系統狀態-縮小變量符號化的范圍。
  3. 確定系統調用時的嵌套參數類型-在運行時檢索嵌套的系統調用參數。

下面具體講HFL如何解決Motivation中提到的三個挑戰:

  • 把指針的間接控制流轉換成直接控制流,HFL提出了一個基于內核源代碼操作的offline translator。在保證條件分支語義的同時,將間接的控制流轉換為直接的控制流,這樣內核底層的調用代碼塊都可以直接被訪問,而不需要在執行時才確定虛函數具體由哪個函數實現。具體做法是:在編譯的時候,遍歷所有的指令,對于間接控制流,執行以下步驟:(1)離線轉換器確保函數指針表的索引變量來源于系統調用的參數,即是由系統調用的參數決定某個功能的實現這種情況,不是這種情況的索引變量對fuzzer執行并無影響。HFL通過執行過程間數據流分析來跟蹤系統調用的參數是如何傳播,以確定是否需要轉換。(2)確定索引的值以后,結合給定的函數表,HFL對每個索引值進行分支變換(類似指令編譯優化的循環展開),通過插入一個條件轉移到相應的函數指針上。至此,控制流便由間接轉為直接,方便fuzzer測試。
  • 為了推斷處合適的系統調用順序和系統調用依賴,HFL首先在內核上進行靜態分析,獲取可能存在依賴的系統調用組,然后再驗證這些潛在的依賴組以篩選出真正的依賴關系。HFL對目標內核進行指針分析(pointer-analysis),收集一對讀/寫操作,即其中一條指令執行讀指令,另一條指令執行寫指令,兩條指令都是從相同的內存位置讀取和寫入,這樣的讀/寫操作就被稱為候選依賴對。但是pointer analysis存在誤報問題,因此在執行內核時,符號化地執行這些潛在依賴項對時,HFL檢查他們是否訪問相同的地址,這樣就能確定是否存在正在的依賴,然后就能確定合適的系統調用順序。與以往的內核測試不一樣的是:HFL除了確定系統調用順序外,還使用符號約束信息(來自系統調用參數的符號化)來保證那些系統調用參數之間的依賴。HFL的fuzzer和symbolic analyzer之間聯系緊密,執行過程中,交互密切,相輔相成,直接測試結束。
  • HFL使用concolic executor和內核特有知識來檢索復雜的嵌套參數結構。在嵌套結構中,(1)連接到嵌套輸入結構的內存位置和(2)內存緩沖區參數的長度,這兩個參數是系統調用構建的關鍵。HFL在concolic執行時不斷監視傳遞函數的調用,一旦被調用,就檢查傳遞函數的源緩沖區是否收到了符號污染,這樣就能確定來自我們感興趣的系統調用的傳遞函數,然后就能確認參數指向的緩沖區,HFL使用符號狀態來跟蹤某個位置的偏移值,最后就能確定內存位置。同時,也可以通過跟蹤傳遞函數的參數值來獲得緩沖區的長度。

Reflection

  1. 本文提出的解決方法,對于非內核的二進制程序測試也有幫助,比如大量用c++虛函數實現的多態和繼承的二進制程序,比如本身帶有大量嵌套結構的二進制程序等,都可以借鑒HFL的方法精神。
  2. 按理來說,先解決前面的分支問題較為重要,但是如QYSM所講,會出現過度約束問題(導致前面的約束條件滿足了,后面的條件約束無法滿足,反而會降低代碼覆蓋率。當后面的函數路徑并不依賴前面的分支時,即為過度約束),下面這個例子出自QYSM論文。解決過度約束這個問題的辦法就是部分求解約束,即從最后一個條件開始,倒推著求解約束。因此這是一個需要權衡的問題。

78445c95fe620ee67c63e6ac0ddce056.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533914.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

隔行變色java代碼_jquery入門—選擇器實現隔行變色實例代碼

1、JQuery選擇器繼承了CSS、path語音的部分語法,允許通過標簽名、屬性名、內容對DOM元素進行快速、準確的選擇。2、JQuery選擇器與JavaScript相比,具有代碼簡單、完善的檢測機制的優勢。3、使用JQuery選擇器實現隔行變色,示例代碼如下&#x…

python arduino c_從Python向Arduino LCD發送一個字符串

我想用python在arduinolcd16x2上顯示一個字符串,但是我遇到了串行通信的問題。在以下是Arduino中運行的代碼:Arduino代碼#include LiquidCrystal lcd(8, 9, 4, 5, 6, 7);String stringa;const unsigned long TimeOut 10; // timeout 10 msString string…

如何實現軟件的遠程更新_手機免root終于也能實現遠程控制了 這款國產軟件真是越來越好用...

說到遠程控制,大家或許可以說出好幾個應用軟件出來,比如Teamviewer、Anydesk、向日葵等等。其實,這些軟件我都用過,但Teamviewer現在對個人用戶經常宕機,Anydesk的功能又不夠豐富,只有一個向日葵遠程控制是…

角標越界 Java_【新人求助】利用占位符操作數據庫是總是提示數組角標越界是怎么回事 - Java論壇 - 51CTO技術論壇_中國領先的IT技術社區...

用占位符和數組來操作數據庫總是提示下角標越界,找了半天也沒弄明白哪里有問題,這個地方是跟著云課堂老師的講解做的,只不過操作的數據表不一樣,但是老師那個就沒問題,我就出了問題,如果有大神能幫忙看看&a…

簡述ospf的工作原理_現代數字存儲示波器的工作原理簡述

示波器是一種用途十分廣泛的電子測量儀器。俗話說,電是看不見摸不著的。但是示波器可以幫我們“看見”電信號,便于人們研究各種電現象的變化過程。所以示波器的核心功能,就和他的名字一樣,是顯示電信號波形的儀器,以供…

pyecharts 間距_高月雙色球20108期:紅球首尾間距參考29區段

雙色球第2020108期獎號為:03 09 11 24 25 28 16,紅球和值:100,重號2個:11 28,首尾間距:25。和值:上期和值為100,上升了22點,再次開出小和值,最近…

java類中聲明log對象_用于Android環境,java環境的log打印,可打印任何類型數據

LogXixi用于Android環境,java環境的log打印,可打印任何類型數據,根據android項目環境debug環境自動打開,release環境自動關閉android環境log打印,規范bean對象,json,xml對應log,crash捕捉&#…

xbox手柄接收器驅動_xbox手柄連接 win10電腦

xbox手柄 連接win10筆記本 分為三種連接方式:有線藍牙無線適配器首先說明一下連接方式的特點然后說明連接方式第一種:有線連接 手柄直接通過micro USB數據線和win10電腦連接。這一步最簡單,一般電腦會自動安裝驅動,連接之后可以使…

單片機復位后為什么要對sp重新賦值_51單片機系列之2點亮第一個led小燈

點亮led燈簡單的理解就是要求陽極高電平陰極低電平。接下來我們去看看單片機的原理圖,找到led 模塊。如圖可以看到led的陽極是連接的VCC(電源高電平)陰極連接的接口是單片機的I/O口P20到P27.要想led點亮只需控制單片機I/O口輸出低電平即可(單片機I/O口默認高電平)。…

db2與mysql編目_DB2編目、聯邦數據庫 - Goopand's OS Space - OSCHINA - 中文開源技術交流社區...

一、兩個數據庫在不同的服務器上[環境描述]10.0.0.10:庫名為 db_1010.0.0.17:庫名為 db_17[需求描述]在db_17庫中,跨庫查詢db_10庫的表[操作步驟]1)在10.0.0.17數據庫服務器,開啟聯邦支持db2 "update dbm cfg using federate…

關機時無人照管更新正在運行_無法抗拒的未來:無人叉車在內部物流中已成為現實...

自動化和半自動化的叉車不再是新奇的東西,在人力短缺的倉庫中取得了進展。他們最終會成為規范嗎?目前尚不知道全世界有多少輛無人駕駛叉車(也稱為自動叉車、機器人叉車或者AGV)售出。但是叉車生產商都顯示出,它在該領域的迅速增長。重要的是&#xff0c…

打開瀏覽器不是主頁_對于360瀏覽器的一些小小改善

?雖然自己不怎么喜歡,但是以前小編的多數同事都在使用它,所以今天帶來360安全瀏覽器改造的小建議。整理&排版 | idea君 ,預計閱讀 | 4分鐘文章意在學習交流分享,如有侵權請聯系刪除封面:http://www.pexels.com/zh…

c++ 二次開發 良田高拍儀_六枝特良田LYV-850加工中心導軌配套防護罩日常維修

六枝特良田LYV-850加工中心導軌配套防護罩日常維修我廠生產的防護罩質量可與原廠的一樣,同樣的保障,質保期為一年,護罩安裝不合適支持退換貨。尤其是元件連結的接合面剛度,對加工精度影響較大。通常,采用組合夾具時其尺…

atomikosdatasourcebean mysql_SpringBoot2整合JTA組件實現多數據源事務管理

一、JTA組件簡介1、JTA基本概念JTA即Java-Transaction-API,JTA允許應用程序執行分布式事務處理,即在兩個或多個網絡計算機資源上訪問并且更新數據。JDBC驅動程序對JTA的支持極大地增強了數據訪問能力。XA協議是數據庫層面的一套分布式事務管理的規范,JTA…

crt 8.7.3 黑暗模式_民謠纏繞厄運金屬,抒情中的黑暗故事

2020/7/31,瑞典厄運/重金屬樂隊Dun Ringill,發表了新專輯“Library of Death”。“Library Of Death”是瑞典樂隊Dun Ringill的第二張唱片,由The Order of Israfel、Doomdogs等成員發起。樂隊的聲音,介于重金屬和厄運金屬之間&…

前窗玻璃膜貼了一周還有氣泡_關于車窗玻璃的養護你了解多少?

【中國皮卡網 維修保養】車窗玻璃的養護是最容易忽視的,但它也是非常重要的,雖然在用車過程中我們很少直接接觸車窗玻璃,但是它卻時時刻刻在影響著駕駛者。相信很多人會有洗車的習慣,洗好之后的車窗玻璃非常明亮,不僅僅…

c語言新龜兔賽跑_幽默 | 新龜兔賽跑

新龜兔賽跑作者 / 何必加自從輸給了烏龜后,兔子心里很是生氣。這一天,他又遇見了烏龜,要求和他比賽,一定要一雪前恥。烏龜答應了,并且約定連比三場。第一場還是兔子輸了,原來他一著急,跑錯了方向…

PHP無法執行MySQL語句,解決PHP執行批量MySQL語句的問題

這篇文章主要為大家詳細介紹了解決PHP執行批量MySQL語句的問題,具有一定的參考價值,可以用來參考一下。感興趣的小伙伴,下面一起跟隨512筆記的小玲來看看吧!當有多條mysql語句連起來需要執行,比如$sqls “insert table…

bugku 雜項 就五層你能解開嗎_長春老舊小區加裝電梯,你家符合條件嗎?_媒體_澎湃新聞...

新朋友戳藍字關注我們哦!長春市老舊小區開始加裝外置電梯大家都很關注很多市民也在想我家符合加裝條件嗎?能申請嗎?伴隨著長春市朝陽區3個老舊小區加裝電梯工作的結束,這項惠民工程也成為了老百姓茶余飯后的談資,那么大…

vba 指定列后插入列_Excle中的VBA介紹分享

SunYoung1、什么是VBAVisual Basic for Applications(VBA)是Visual Basic的一種 宏 語言,它能使常用的程序自動化,是針對Office開發的一種工具,通俗點講,VBA是一種Excle能聽懂識別的編程語言。2、在Excle中VBA的作用2.1、實現Exce…