開源人年會 2022

Peeking into the BPF verifier
2022年7月31日 , TR211
語言: 漢語

以往要近幾年來 (e)BPF 技術在網路、程式追蹤 (tracing)、系統安全等領域展露頭角。它翻轉了原本自訂 Linux 核心行爲很困難這件事,把它一下子變得簡單許多。其中一大原因就是跟傳統的做法(寫 Linux 核心模組)相比,(e)BPF 不會造成系統當機或也不用擔心它導致系統安全問題,而這大部分都要歸功於 Linux 核心裡內建的驗證邏輯。

然而 Linux 核心到底如何驗證 (e)BPF 程式的呢?就讓我們來一窺究竟吧!

 

<small>想聽這個演講不需要對 Linux Kernel 有深度認識,但因爲需要看程式碼、所以需要對 C 語言有基本的理解(如果你用 bcc 或 libbpf 寫過 BPF 程式那基本上就夠了),例如需要知道 control-flow (e.g. if-else, while, for), array, struct, function, pointer 等概念。如果另外還知道一點組合語言或計算機概論那會更有幫助、但並不是必須。</small>

<small>不管只是單純對 BPF 有興趣、BPF 程式開發者及使用者或是資安研究者都歡迎來聽。</small>


(e)BPF (以下都叫它 BPF) 是個內建在 Linux 核心裡的虛擬機器,它讓使用者可以借由自訂的程式去控制核心的行爲,同時又不用擔心自訂的程式寫不好而導致系統當機的問題,也因此在網路、程式追蹤 (tracing)、系統安全等比較需要自訂行爲的領域中被大量使用。

這一切之所以能成功很大一部分歸功 Linux 核心對於 BPF 程式在執行前的驗證,而這也是這次所想討論的:

  • BPF 虛擬機器及其指令
  • 型別及數值追蹤
  • 檢查
    • BPF 指令
    • 未初始化數值
    • 越界存取
    • 核心指標洩漏

想聽這個演講不需要對 Linux Kernel 有深度認識,但因爲需要看程式碼、所以需要對 C 語言有基本的理解(如果你用 bcc 或 libbpf 寫過 BPF 程式那基本上就夠了),例如需要知道 control-flow (e.g. if-else, while, for), array, struct, function, pointer 等概念。如果另外還知道一點組合語言或計算機概論那會更有幫助、但並不是必須。

不管只是單純對 BPF 有興趣、BPF 程式開發者及使用者或是資安研究者都歡迎來聽。


目標聽眾族群

單純對 BPF 有興趣、BPF 程式開發者及使用者或是資安研究者

內容難易度

Skilled

Kernel Engineer at SUSE working on BPF