COSCUP 2022

Your locale preferences have been saved. We like to think that we have excellent support for English in pretalx, but if you encounter issues or errors, please contact us!

Peeking into the BPF verifier
2022-07-31 , TR211
Language: 漢語

以往要近幾年來 (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 程式開發者及使用者或是資安研究者都歡迎來聽。


Target Audience

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

Difficulty

Skilled

Kernel Engineer at SUSE working on BPF