eBPF

是什麼

eBPF(延伸柏克萊封包篩選器)是一種允許小型沙盒程式或腳本在 Linux 系統核心空間執行的技術,不需要修改核心原始碼載入 Linux 核心模組。

Linux 系統有兩個空間:核心空間和使用者空間。 核心空間是作業系統的核心,也是唯一可以無限制存取硬體的部分。

應用程式會停留在使用者空間,當它們需要更高權限時,就會向核心發送要求。 對於需要更彈性的應用程式,像是直接存取硬體,核心可以透過所謂的「Linux 核心模組」進行擴充。 這種方式擴充了核心的預設功能,允許應用程式更深度地存取底層元件。 不過,這種方法也會帶來安全風險,因此 eBPF 成為更有吸引力的替代方案。

解決的問題

通常狀況下,應用程式在使用者空間執行,如果應用程式需要核心的某些權限(E.g. 存取某些硬體), 會透過「系統呼叫」向核心提出請求。 在大多數情況下,這種方法都能正常執行。不過,在某些情況下,開發人員需要更靈活的低階系統存取方式。 可觀察性、安全性和網路功能就是很好的範例。 為此,我們可以使用 Linux 核心模組,在不修改核心原始碼的情況下延伸核心基礎。 雖然使用 Linux 核心模組有很多好處,但也會帶來安全風險。 由於 Linux 核心模組在核心空間內執行,它們可能會導致核心崩潰,而核心一旦崩潰,整個機器也會當機。 此外,核心模組擁有更高的權限,可以直接存取系統資源。如果沒有適當的安全保護,攻擊者就會利用這些漏洞。

如何幫助我們

eBPF 提供比 Linux 核心模組更可控的環境,以執行使用者自訂的程式。 它在核心的沙盒環境中執行,提供隔離並降低風險。 如果漏洞或缺失在 eBPF 程式中被利用,其影響通常僅限於沙盒環境。 此外,在 eBPF 程式開始在核心中執行之前,它必須通過一些驗證。 驗證器元件會檢查 eBPF 程式是否存在潛藏的安全違規行為, 像是違規存取記憶體、無窮迴圈和未經授權的核心函式。 這樣它就能確保程式不會進入無窮迴圈並導致核心崩潰。 與 Linux 核心模組相比,這些安全控制措施使 eBPF 成為在 Linux 核心中執行應用程式更安全的選擇。


最後編輯 October 22, 2023: [tw] Localize 'eBPF' (f0ac355)