微軟已經為Windows準備了eBPF實現

Microsoft 發布了適用於 Windows 的 eBPF 子系統的實現,它允許您啟動在作業系統核心層級執行的任意處理程序。 eBPF 提供了一個內建於核心中的字節碼解釋器,這使得創建從用戶空間加載的網路操作處理程序、控制存取和監視系統操作成為可能。 eBPF 自 3.18 版本以來已包含在 Linux 核心中,可讓您處理傳入/傳出網路封包、封包轉送、頻寬管理、系統呼叫攔截、存取控制和追蹤。 由於使用了 JIT 編譯,字節碼可以即時翻譯為機器指令,並以編譯程式碼的效能執行。 Windows 版 eBPF 是在 MIT 授權下開源的。

eBPF for Windows 可以與現有的 eBPF 工具一起使用,並提供用於 Linux 上的 eBPF 應用程式的通用 API。 除此之外,該專案允許您使用基於Clang 的標準eBPF 編譯器將用C 編寫的程式碼編譯為eBPF 字節碼,並運行在Windows 核心之上為Linux 創建的eBPF 處理程序,提供特殊的兼容性層並支援標準Libbpf用於與與 eBPF 程式互動的應用程式相容的 API。 其中包括為 XDP(eXpress 資料路徑)和套接字綁定提供類似 Linux 的掛鉤的層,從而抽象化對網路堆疊和 Windows 網路驅動程式的存取。 計劃包括提供與標準 Linux eBPF 處理器的完整原始碼等級相容性。

微軟已經為Windows準備了eBPF實現

Windows 的 eBPF 實作之間的主要區別在於使用了替代字節碼驗證器,該驗證器最初由 VMware 員工以及來自加拿大和以色列大學的研究人員提出。 驗證器在用戶空間中的單獨、隔離的進程中運行,並在執行 BPF 程式之前使用,以識別錯誤並阻止可能的惡意活動。

在驗證方面,eBPF for Windows採用了基於Abstract Interpretation的靜態分析方法,與Linux的eBPF驗證器相比,誤報率更低,支援循環分析,並提供良好的可擴展性。 該方法考慮了透過分析現有 eBPF 程式獲得的許多典型執行模式。

驗證後,字節碼被傳輸到在核心層級運行的解釋器,或透過 JIT 編譯器,然後以核心權限執行產生的機器碼。 為了在核心層級隔離 eBPF 處理程序,使用了 HVCI(HyperVisor 強製程式碼完整性)機制,該機制使用虛擬化工具來保護核心中的進程,並使用數位簽章來確認執行程式碼的完整性。 HVCI 的限制是它只能驗證解釋的 eBPF 程序,不能與 JIT 結合使用(您可以選擇效能或附加安全性)。

來源: opennet.ru

添加評論