倪朋飛:eBPF的2022之旅

<div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/28649924-85d074a636e2188e.jpg" img-data="{"format":"jpeg","size":26486,"height":500,"width":1059}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>你好广料,我是倪朋飛砾脑。</p><p> </p><p>不知不覺間,2022 年已經(jīng)走到了尾聲艾杏。每個年尾我都喜歡回顧一下過去這一年的旅程韧衣,看看過去這一年都發(fā)生了什么事情,有什么收獲,有什么遺憾畅铭,有什么值得期待的事情等等萧求。對 eBPF 的學(xué)習(xí)和應(yīng)用也是一樣,今天的內(nèi)容我就帶你一起總結(jié)一下 eBPF 在 2022 年的旅程顶瞒。</p><p> </p><h2>eBPF 內(nèi)核的新進(jìn)展</h2><p> </p><p>作為 Linux 內(nèi)核的一部分,我們先從內(nèi)核來看看 eBPF 在 2022 年中都有哪些新的變化元旬。</p><p>Linux 內(nèi)核在 2022 年主要發(fā)布了 5.16-5.19 以及 6.0 和 6.1 這幾個版本榴徐,每個版本都為 eBPF 引入了大量的新特性。<strong>具體來說匀归,每個版本引入的主要特性包括:</strong></p><p> </p><ol><li>Linux 5.16 為 eBPF 添加了布隆過濾映射(Bloom Filter Map)坑资、原生跟蹤可寫上下文等特性,并允許在 eBPF 程序中直接調(diào)用內(nèi)核模塊函數(shù)穆端。為了確保安全袱贮,非特權(quán) eBPF 程序改成了默認(rèn)不允許狀態(tài)。</li><li>Linux 5.17 為 eBPF 添加了一次編譯到處執(zhí)行(Compile Once – Run Everywhere体啰,簡稱 CO-RE)以及 bpf_loop() 輔助函數(shù)攒巍,大大簡化了 eBPF 程序處理多版本內(nèi)核兼容時的復(fù)雜性以及循環(huán)邏輯的處理。</li><li>Linux 5.18 為 eBPF 添加了內(nèi)核探針多掛載(BPF_LINK_TYPE_KPROBE_MULTI)荒勇、在 XDP 程序 bpf_prog_run() 中傳輸數(shù)據(jù)包以及增強(qiáng) LSM 程序的 IMA(Integrity Measurement Architecture)互操作等特性柒莉,進(jìn)一步完善了 KPROBE、XDP沽翔、LSM 等類型 eBPF 程序的功能特性兢孝。</li><li>Linux 5.19 為 eBPF 添加動態(tài)指針和類型指針的支持,增強(qiáng)了內(nèi)存訪問的安全性仅偎。同時跨蟹,libbpf 中新增的 USDT(User Statically-Defined Tracing)探針也完善了對用戶空間自定義探針的支持。</li><li>Linux 6.0 為 eBPF 添加了類型匹配橘沥、64 位枚舉窗轩、可睡眠用戶探針等特性,并提升了循環(huán)的性能威恼。</li><li>Linux 6.1 為 eBPF 添加了 BPF 內(nèi)存分配器品姓、用戶空間環(huán)形緩沖區(qū)映射、通過 panic() 轉(zhuǎn)存內(nèi)存狀態(tài)以及 PKCS#7 簽名驗(yàn)證等特性箫措,豐富了內(nèi)存特性的同時增強(qiáng)了安全性腹备。</li></ol><p> </p><p>關(guān)于這些版本詳細(xì)的發(fā)布文檔這兒不再展開,如果你有興趣的話斤蔓,可以點(diǎn)擊這里的鏈接查看每個版本詳細(xì)的發(fā)布文檔植酥。</p><p> </p><p>伴隨著這些內(nèi)核版本的發(fā)布,新引入的功能特性也都集成到了 libbpf 和 bpftool 中。你可以訪問它們的 Github 發(fā)布網(wǎng)站友驮,查看最新的發(fā)布列表漂羊。</p><p> </p><p>在 Linux 內(nèi)核如火如荼發(fā)展的同時,eBPF for Windows 項(xiàng)目也在不斷地推進(jìn)卸留。在 2022 年中走越,eBPF for Windows 項(xiàng)目發(fā)布了從 v0.2.0 到 v0.5.0 的多個版本,每個版本都為 eBPF for Windows 添加了大量的新特性耻瑟,并完善了使用文檔和 API 參考文檔旨指,簡化了入門者的學(xué)習(xí)曲線。雖然 eBPF for Windows 還是處于早期預(yù)覽的狀態(tài)喳整,但從目前的進(jìn)展來看谆构,它已經(jīng)具備了在 Windows 上運(yùn)行 eBPF 程序的基本能力,并且支持把基于 libbpf API 的 Linux eBPF 程序經(jīng)過簡單修改遷移到 Windows 平臺(比如 Cilium L4LB 經(jīng)過修改也可以運(yùn)行在 Windows 上)框都。</p><p> </p><p>從以上這些最新版本的發(fā)布情況來看搬素,<strong>eBPF 在內(nèi)核中依然是最活躍的模塊之一,它的功能特性還在快速發(fā)展中</strong>魏保。同樣熬尺,在內(nèi)核之外的開源社區(qū)和商業(yè)公司也在不斷地推進(jìn) eBPF 的發(fā)展,完善 eBPF 生態(tài)的同時為 eBPF 帶來了更多的應(yīng)用實(shí)踐囱淋。接下來猪杭,我再帶你一起看看開源社區(qū)和商業(yè)公司又為 eBPF 的生態(tài)帶來了哪些最新的進(jìn)展。</p><p> </p><h2>eBPF 生態(tài)的新進(jìn)展</h2><p> </p><p>在 2021 年的時候妥衣,大家看待 eBPF 還是一個比較新的技術(shù)皂吮,討論的更多是 eBPF 的探索和調(diào)研,吸引的主要也是開發(fā)者税手。但是蜂筹,隨著 2022 過去一年的快速發(fā)展,eBPF 已經(jīng)被廣泛地應(yīng)用到了生產(chǎn)環(huán)境中芦倒,同時也催生了大量的新生開源項(xiàng)目和商業(yè)案例艺挪。</p><p> </p><p>以應(yīng)用最為廣泛的 eBPF 產(chǎn)品 Cilium 為例,自 2021 年 10 月加入 CNCF 作為孵化項(xiàng)目以來兵扬,Cilium 取得了可謂是突飛猛進(jìn)的發(fā)展麻裳。</p><p> </p><ol><li>一方面,作為 CNCF 基金會的最新明星項(xiàng)目器钟,Cilium 已經(jīng)獲得包括 AWS津坑、Azure、GCE 在內(nèi)的主流公有云平臺和托管 Kubernetes 平臺的支持傲霸。同時疆瑰,Cilium 也與 Grafana眉反、OpenTelemetry 等建立了廣泛的合作關(guān)系,一起引領(lǐng)云原生觀測和云原生安全的生態(tài)穆役。</li><li>另一方面寸五,Cilium 也在不斷地完善自己的功能特性。比如在 1.12 版本中引入的無邊車 Service Mesh(sidecar-free Service Mesh)耿币,可以讓用戶在不需要任何代理的情況下梳杏,通過 eBPF 來實(shí)現(xiàn)服務(wù)間的流量控制和可觀測性。其開源的 Tetragon 和 pwru 等項(xiàng)目也不再依賴于 Cilium 網(wǎng)絡(luò)插件淹接,可以獨(dú)立地使用秘狞,使得更多的用戶可以方便地利用 eBPF 來實(shí)現(xiàn)網(wǎng)絡(luò)觀測、安全檢測以及安全策略控制等豐富的功能蹈集。</li></ol><p> </p><p>除了 Cilium,開源社區(qū)中還有非常多的項(xiàng)目借助 eBPF 的能力來實(shí)現(xiàn)各種各樣的功能雇初。比如:</p><p> </p><ol><li>應(yīng)用性能監(jiān)控項(xiàng)目 Apache SkyWalking 借助 eBPF 增強(qiáng)了性能剖析和網(wǎng)絡(luò)診斷的能力拢肆。</li><li>TLS 加密明文捕獲項(xiàng)目 eCapture 借助 eBPF 在無需 CA 證書的情況下就可以抓取 TLS 加密的明文數(shù)據(jù)。</li><li>調(diào)試和剖析 Kubernetes 集群的項(xiàng)目 Inspektor Gadget 借助 eBPF 實(shí)現(xiàn)了一系列的小工具(Gadgets)靖诗,可以幫助用戶快速地定位和解決 Kubernetes 集群中的問題郭怪。</li><li>運(yùn)行時安全項(xiàng)目 Falco 和 Tracee 借助 eBPF 實(shí)現(xiàn)了一系列的安全檢測和安全策略控制功能。</li><li>持續(xù)性能剖析平臺 Pyroscope 和 Parca 借助 eBPF 實(shí)現(xiàn)了一系列的性能剖析功能刊橘。</li></ol><p> </p><p>除了開源項(xiàng)目鄙才,很多商業(yè)公司也已經(jīng)把 eBPF 技術(shù)應(yīng)用到了實(shí)際的業(yè)務(wù)中。比如促绵,Linkedin 基于 eBPF 構(gòu)建了其基礎(chǔ)設(shè)施觀測代理 Skyfall攒庵、宜家借助 Cilium L4LB 構(gòu)建了其私有云網(wǎng)絡(luò)負(fù)載均衡等等。</p><p> </p><p>在利用 eBPF 強(qiáng)大能力的同時败晴,這些開源項(xiàng)目和商業(yè)公司同時也積極參與構(gòu)建 eBPF 生態(tài)浓冒,并通過開源貢獻(xiàn)、社區(qū)會議等分享了他們的實(shí)踐經(jīng)驗(yàn)尖坤。所以稳懒,2022 年的社區(qū)會議也格外火熱,不僅 eBPF Summit 2022慢味、Linux Plumbers Conference (LPC) 2022场梆、bpfconf 2022 等專注于 eBPF 的會議無一缺席,Cloud Native eBPF Day 也成了 KubeCon 的例行活動纯路。在國內(nèi)或油,西安郵電大學(xué)也舉辦了首屆中國 eBPF 研討會。這些繁榮的社區(qū)活動感昼,不僅極大促進(jìn)了 eBPF 技術(shù)的發(fā)展装哆,也吸引了更多的人加入到 eBPF 中來,用 eBPF 解決更多的問題。</p><p> </p><h2>eBPF 的安全隱患</h2><p> </p><p>伴隨著 eBPF 大量應(yīng)用的同時蜕琴,eBPF 帶來的安全問題也逐漸暴露出來萍桌。Linux 內(nèi)核中的漏洞可能會更容易地被惡意程序所利用,惡意程序也可以利用 eBPF 偽裝自己的行為凌简,從而繞過安全檢測上炎。在應(yīng)用 eBPF 解決你的問題的同時,你也需要及時關(guān)注這些安全問題雏搂,以免受到新型惡意程序的攻擊和影響藕施。</p><p> </p><p>比如,CVE-2022-23222 就是一個典型的 eBPF 權(quán)限提升漏洞凸郑,它會影響 Linux 5.8-5.16 之間的內(nèi)核版本裳食。由于內(nèi)核在執(zhí)行用戶提供的 eBPF 程序前缺乏適當(dāng)?shù)尿?yàn)證,攻擊者可利用這個漏洞提升權(quán)限并在內(nèi)核上下文中執(zhí)行代碼芙沥,你可以在 Github 上找到這個漏洞的利用代碼诲祸。</p><p> </p><p>這類問題的解決方法相對比較簡單,只需要你緊跟發(fā)行版的安全更新而昨,及時更新到帶有 CVE 修復(fù)的內(nèi)核版本即可救氯。但是,如果你使用的是自己編譯的內(nèi)核歌憨,那么你需要及時關(guān)注內(nèi)核的安全更新着憨,把相關(guān)的 CVE 修復(fù)帶到你維護(hù)的內(nèi)核版本中,以免被惡意程序利用务嫡。</p><p> </p><p>相對來說甲抖,<strong>利用 eBPF 的能力偽裝自身行為的惡意程序則更難防御</strong>。比如心铃,被譽(yù)為 NSA 頂級后門的 Bvp47惧眠、具有極高隱匿性的惡意軟件 Symbiote 和 BPFdoor 等都借助 eBPF 的強(qiáng)大的能力,來隱藏自己的行為于个,從而繞過安全檢測氛魁。在開源社區(qū)中,boopkit厅篓、TripleCross秀存、ebpfkit 等 Rootkit 程序也都借助 eBPF 對內(nèi)核或應(yīng)用程序的執(zhí)行路徑進(jìn)行修改,從而達(dá)到后門注入羽氮、權(quán)限逃逸或链、隱藏自身以及系統(tǒng)破壞等各種目的。</p><p> </p><p>這類惡意程序的特征都是非常難以被檢測到的档押,其防范也比較復(fù)雜澳盐,你可以從以下幾個角度進(jìn)行防御:</p><ol><li>第一祈纯,限制 eBPF 程序的運(yùn)行,禁止普通用戶和普通容器應(yīng)用運(yùn)行 eBPF 程序叼耙,特別是不要給普通進(jìn)程賦予 CAP_BPF 和 CAP_SYS_ADMIN 權(quán)限腕窥,更不要給容器隨便賦予特權(quán)容器的權(quán)限。</li><li>第二筛婉,對系統(tǒng) eBPF 關(guān)鍵事件簇爆、eBPF 程序運(yùn)行狀態(tài)以及 eBPF 映射的訪問等進(jìn)行審計(jì),異常事件及時告警處理爽撒。</li><li>第三入蛆,對系統(tǒng)中的網(wǎng)絡(luò)連接進(jìn)行監(jiān)控,實(shí)時探測網(wǎng)絡(luò)連接的行為硕勿,最好是對所有的公網(wǎng)連接透過防火墻進(jìn)行保護(hù)哨毁。</li><li>第四,添加簽名機(jī)制源武,只有經(jīng)過簽名的 eBPF 程序才可以加載運(yùn)行挑庶。</li></ol><p> </p><h2>小結(jié)</h2><p> </p><p>今天,我?guī)阋黄鹗崂砹?eBPF 在 2022 年的旅程软能。過去一年,不僅 Linux 內(nèi)核極大地豐富了 eBPF 的功能特性举畸,eBPF 的生態(tài)和實(shí)踐也取得了突飛猛進(jìn)的發(fā)展查排。如果你還沒有在產(chǎn)品中使用過 eBPF,從某些方面來看(特別是網(wǎng)絡(luò)抄沮、觀測跋核、安全的角度來看),你或許已經(jīng)落后了叛买。在帶來極大便利的同時砂代,你也要留心 eBPF 帶來的一些新挑戰(zhàn),比如安全性率挣、多內(nèi)核版本兼容性刻伊、性能等都是在 eBPF 實(shí)踐過程中需要考慮的問題。</p><p> </p><p>今天這一講就到這里了椒功。在 2023 年捶箱,我們專欄將繼續(xù)關(guān)注 eBPF 的發(fā)展,為大家?guī)砀嗟?eBPF 相關(guān)的內(nèi)容动漾。下一次的動態(tài)更新預(yù)計(jì)會在 4 月份丁屎。如果你有對我們課程未來內(nèi)容的建議,歡迎在評論區(qū)提出來旱眯,期待你與我一起完善和構(gòu)建一個最貼近實(shí)踐的 eBPF 知識體系晨川。</p><p> </p><h2>思考題</h2><p> </p><p>我想邀請你來聊一聊:</p><p> </p><p>在今天分享的 eBPF 新進(jìn)展和新項(xiàng)目中证九,有沒有一些是你已經(jīng)在工作中使用過的呢?如果有使用過共虑,它們幫你解決了哪些實(shí)際的問題愧怜?或者,還有哪些其他的產(chǎn)品或開源項(xiàng)目是你經(jīng)常使用的呢看蚜?</p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叫搁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子供炎,更是在濱河造成了極大的恐慌渴逻,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件音诫,死亡現(xiàn)場離奇詭異惨奕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)竭钝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門梨撞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人香罐,你說我怎么就攤上這事卧波。” “怎么了庇茫?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵港粱,是天一觀的道長。 經(jīng)常有香客問我旦签,道長查坪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任宁炫,我火速辦了婚禮偿曙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羔巢。我一直安慰自己望忆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布竿秆。 她就那樣靜靜地躺著炭臭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪袍辞。 梳的紋絲不亂的頭發(fā)上鞋仍,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機(jī)與錄音搅吁,去河邊找鬼威创。 笑死落午,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肚豺。 我是一名探鬼主播溃斋,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吸申!你這毒婦竟也來了梗劫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤截碴,失蹤者是張志新(化名)和其女友劉穎梳侨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體日丹,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡走哺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了哲虾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丙躏。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖束凑,靈堂內(nèi)的尸體忽然破棺而出晒旅,到底是詐尸還是另有隱情,我是刑警寧澤汪诉,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布废恋,位于F島的核電站,受9級特大地震影響摩瞎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜孝常,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一旗们、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧构灸,春花似錦上渴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽康愤。三九已至,卻和暖如春隔披,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寂拆。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工奢米, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抓韩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓鬓长,卻偏偏與公主長得像谒拴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涉波,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容