2022/07/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 程式開發者及使用者或是資安研究者
Difficulty –Skilled
Kernel Engineer at SUSE working on BPF