本公開一般涉及在計算環境中擴展操作系統(os)內核。相關技術背景berkeley分組過濾器(bpf)技術是內核級功能,其允許用戶空間代碼在仍然運行在用戶空間中的同時修改操作系統內核的行為。bpf通過經驗證的dsl(域專用語言)來完成這一點,該dsl確保bpf代碼不會對被作為可信代碼庫對待的內核造成問題。bpf通過定義明確的專門制作的接口與內核通信。linux?os內核提供bpf過濾機制的擴展版本,稱為擴展bpf(ebpf)。通常,ebpf程序包括由諸如llvm的工具鏈技術提供的字節碼指令,其將c(或其他)代碼編譯成bpf。當內核從用戶空間接收到ebpf程序時,它調用驗證器來分析該程序是否安全。雖然驗證器檢驗ebpf代碼活動,但是一旦控制流傳遞到內核,驗證器就不提供任何保護。如果驗證器指示代碼是安全的,則內核調用即時(jit)編譯器,并將所得到的指令附加到內核中的各個鉤子(hook)點;然而,如果程序不安全,則內核拒絕它。ebpf的流行度的上升(與經典bpf相反)已經在ebpf程序和內核之間創建了新的接口。雖然bpf范例通過非常嚴格的指導方針確保了安全性,但是ebpf的擴展內核接口包括新的助手函數以及直接訪問專門導出的內核函數的能力。因為ebpf具有對內核內部的新訪問,所以需要一種在仍然遵守由ebpf運行時環境施加的域特定約束的同時測試內核的這些方面的方式。例如這些約束包括以下:不能直接調用內核代碼,否則動作將繞過ebpf驗證器,從而完全改變威脅向量;以及當執行ebpf程序時不能知道內核的狀態,從而不能知道運用了內核代碼的哪些片段(這是因為ebpf過濾器本質上是異步的,因為它們僅在內核事件發生之后運行)。已知的現有技術沒有解決這種需要。內核模糊是一種這樣的技術。模糊測試或模糊是一種自動化軟件測試方法,其將無效、畸形的或意外的(例如,半隨機)輸入注入到系統中以揭示軟件缺陷和漏洞。模糊工具將這些輸入注入到系統中,然后監控異常,例如崩潰或信息泄漏。然而,內核模糊不遵守ebpf驗證器所施加的約束。其它bpf驗證器/jit編譯器安全技術也是不夠的,因為它們不檢查內核代碼而是檢查驗證器。bpf模糊本身已經在學術文獻中提出,但是該提議不保證生成有效的bpf程序,并且所提出的技術在實踐中將表現出性能降低。在本領域中仍然需要提供對ebpf程序與正在被開發和實現的內核之間的接口的自動測試。
背景技術:
技術實現思路
1、根據本公開的第一方面,提供了一種用于測試操作系統(os)內核接口的方法。內核接口具有定義內核接口的語法。該方法開始于接收已被配置成使用模糊引擎調用和測試os內核接口的擴展berkeley分組過濾器ebpf代碼。還接收用戶空間碼。用戶空間代碼被配置成生成觸發ebpf代碼運行的至少一個內核事件,并且根據定義內核接口的語法來變換來自模糊引擎的輸入。在將ebpf代碼加載到os內核中之后,生成至少一個內核事件。響應于生成該至少一個內核事件,并且當該模糊引擎執行時,記錄通過該內核接口發送到os內核的參數。參數通過由ebpf代碼和用戶空間代碼共享的數據結構傳遞。
2、優選地,os內核接口是ebpf助手函數,并且數據結構是存儲器內映射。此外,優選地,將用戶空間代碼的進程標識符與ebpf代碼相關聯,使得僅由用戶空間代碼引起的參數被ebpf代碼記錄。
3、根據本公開的第二方面,描述了一種被配置為中間設備的裝置。該裝置包括處理器和計算機存儲器。計算機存儲器保存由處理器執行以測試操作系統(os)內核接口的計算機程序指令。內核接口具有定義內核接口的語法。計算機程序指令包括被配置為執行諸如上述步驟的操作的程序代碼。
4、根據本公開的第三方面,提供了一種非暫時性計算機可讀介質中的計算機程序產品。該計算機程序產品保存由主機處理系統中的處理器執行的計算機程序指令,該主機處理系統被配置為測試操作系統(os)內核接口。內核接口具有定義內核接口的語法。計算機程序指令包括被配置為執行諸如上述步驟的操作的程序代碼。
5、本文的主題使得能夠構造有效的ebpf程序,該ebpf程序利用特定的被測內核接口,使得通過驗證者檢查。通過包括附加的用戶空間代碼來促進ebpf內核接口的模糊,所述附加的用戶空間代碼知道如何根據定義引擎的語法來變換來自模糊引擎的輸入。這使得能夠做出基于語法的模糊決策。此外,存儲器內映射(ebpf代碼和用戶空間代碼共享的數據結構)的優選使用確保了測試僅對由用戶空間代碼引起的事件作出反應。另一一般優點是該方法使得能夠在仍然服從由ebpf運行時環境施加的域特定約束的同時測試內核。
6、以上已經概述了所公開的主題的一些更相關的特征。這些特征應當被解釋為僅僅是說明性的。如下文將描述,可通過以不同方式應用所揭示的標的物或通過修改所述標的物來獲得許多其它有益結果。
1.一種測試操作系統os內核接口的方法,所述內核接口具有定義所述內核接口的語法,所述方法包括:
2.根據權利要求1所述的方法,其中,所述os內核接口是助手函數。
3.根據權利要求1所述的方法,還包括:將所述用戶空間代碼的進程標識符與所述ebpf代碼相關聯,使得僅由所述用戶空間代碼引起的參數被所述ebpf代碼記錄。
4.根據權利要求1所述的方法,其中,所述數據結構是內存映射。
5.根據權利要求1所述的方法,還包括:通過以下操作生成所述ebpf代碼:
6.根據權利要求1所述的方法,其中,所述用戶空間代碼還被配置為打開、加載和附加所述ebpf代碼。
7.根據權利要求1所述的方法,還包括:使用所記錄的參數來識別在給定事件時的所述輸入。
8.一種被配置為中間設備的裝置,包括:
9.根據權利要求8所述的裝置,其中,所述os內核接口是助手函數。
10.根據權利要求8所述的裝置,其中,所述計算機程序指令還包括被配置為將所述用戶空間代碼的進程標識符與所述ebpf代碼相關聯,使得僅由所述用戶空間代碼引起的參數被所述ebpf代碼記錄的程序代碼。
11.根據權利要求8所述的裝置,其中,所述數據結構是內存映射。
12.根據權利要求8所述的裝置,其中,所述計算機程序指令還包括被配置為通過以下操作來生成所述ebpf代碼的程序代碼:
13.根據權利要求8所述的裝置,其中,所述用戶空間代碼還被配置為打開、加載和附加所述ebpf代碼。
14.根據權利要求8所述的裝置,其中,所述計算機程序指令還包括被配置為使用所記錄的參數來識別在給定事件時的所述輸入的程序代碼。
15.一種非暫時性計算機可讀介質中的計算機程序產品,所述計算機程序產品保存由主機處理系統中的處理器執行的計算機程序指令,所述主機處理系統被配置為測試操作系統os內核接口,所述內核接口具有定義所述內核接口的語法,所述計算機程序指令包括被配置為進行以下操作的程序代碼:
16.根據權利要求15所述的計算機程序產品,其中,所述os內核接口是助手函數。
17.根據權利要求15所述的計算機程序產品,其中,所述計算機程序指令還包括被配置為將所述用戶空間代碼的進程標識符與所述ebpf代碼相關聯,使得僅由所述用戶空間代碼引起的參數被所述ebpf代碼記錄的程序代碼。
18.根據權利要求15所述的計算機程序產品,其中,所述數據結構是內存映射。
19.根據權利要求15所述的計算機程序產品,其中,所述計算機程序指令還包括被配置為通過以下操作來生成所述ebpf代碼的程序代碼:
20.根據權利要求15所述的計算機程序產品,其中,所述用戶空間代碼還被配置為打開、加載和附加所述ebpf代碼。