<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Tetragon—— 盯向內核的眼睛

    VSole2023-08-04 09:46:36

    一、 簡介

    1.1 什么是eBPF?

    eBPF(extended Berkeley Packet Filters)起源于BPF, 是一套通用執行引擎,提供了直通Linux內核的可編程通用能力。自Linux內核3.18版本后BPF擴展了 Berkeley 數據包過濾器等一系列特性,此后版本被稱為eBPF,而之前的版本則被區分為cBPF。如圖1 所示,由于新特性的加持,eBPF的架構設計得到更新,eBPF也注定在更多場景中發揮更大的價值,同時也由于eBPF比cBPF執行得更快等原因,cBPF在新的內核中也基本被廢棄[1]。

    圖1  eBPF架構圖

    1.2 eBPF有哪些應用場景?

    由于eBPF具備從用戶態到內核級史無前例的深度覆蓋能力,不難想象,其應用領域也將是顛覆性的。關于這方面,官方也大致給出了如圖2所示的4類應用場景[2]:

    圖2 eBPF應用場景

    1.2.1 安全防護

    如利用系統調用過濾并且結合網絡過濾阻斷惡意的調用動作或者丟棄惡意和非預期的流量,這個正好是檢測或防護類產品的本質操作,這些操作直接作用于原對象,無需多余備份,其處理效率是傳統手段很難達到的。正因為如此,綠盟科技創新研究院孵化的創新方案(云原生API網關)在做網絡優化技術實施時也包含這一技術。

    1.2.2 調用追蹤

    通過創建內核探測或用戶探測可以在內核或用戶應用程序的幾乎任何位置附加 eBPF 程序,結合整體的信息,用戶程序到內核級別的上下文追蹤將不是那么困難。

    當然,要想做到一個通用的追蹤模型還有一段路程去走,例如Containiq的聯合創始人兼首席技術官Matt Lenhard在一篇分布式追蹤的文章里也描述到他們基于元數據關聯進行追蹤時,盡管在整個Kubernetes 集群中的調用追蹤關聯性很好,但lambda 函數調用相關性追蹤在不改動請求頭的情況下很難關聯等問題[3]。

    1.2.3 網絡編排

    優化網絡過濾器的內部 BPF 指令集處理是eBPF的最初設計目標,由此可見eBPF在網絡技術中的亮眼地位。Hook在網絡驅動特定位置,優化最佳路徑,加上先天無需包復制即可進行數據包過濾,這對網絡編排具有得天獨厚的優勢。此領域不得不提的是Isovalent公司一手打造出的開源項目-Cilium ,將 eBPF技術融入 Kubernetes,成為云原生的革命性技術。

    1.2.4 數據監控

    正如官方介紹,基于eBPF的數據監控,不依賴于系統應用的數據,其直指內核,這意味著更加透明和實時的數據審計。

    二、 為什么要聊Tetragon ?

    第一,Tetragon是一款基于 eBPF技術的運行時安全實施和可觀察性開源工具。多年來一直是 Isovalent Cilium Enterprise的一部分,2022年5月 Tetragon決定將其開源。

    第二,Tetragon 僅做到了可視化和動作執行,留下更多深思的空間。這相當于是“削了皮的土豆”, 從土豆種植到土豆收獲以及清洗削皮有完整的指導,對于接下來是炒土豆絲還是土豆片,亦或是雕花等等完全交給大家去發掘。

    三、 Tetragon部署

    理論上Tetragon 可以部署到任何內核支持BTF的系統內,這里包括虛擬機、容器或K8s集群等方式部署。如圖3所示,在K8s環境中,Tetragon以DaemonSet的方式部署在集群中的每個節點上。通過配置文件看到Tetragon目前是以特權容器方式運行,而特權運行會增加整個環境的不安全風險,是否有其他更小權限的方案(如SYS_BPF_ADMIN等)值得去實踐和思考。除特殊說明外,本文稍后涉及部署位置的討論均默認在K8s集群內進行。

    圖3 K8s環境中Tetragon部署方式

    四、Tetragon功能特性

    相對于傳統技術,Tetragon基于eBPF提供了如文件、套接字、二進制名稱、命名空間/函數等豐富的過濾器,直接在內核中應用過濾器,不必花銷繁重的上下文切換和喚醒等資源。值得關注的是開源工具本身并沒有內置跟蹤哪些函數和應用哪些過濾器,在目錄中僅提供了部分的場景示例,這為后期的功能擴展和自定義跟蹤提供了較大的靈活性。除此之外Tetragon的兩個主打功能(可視化和實時執行)也是值得繼續發掘和延伸的。

    4.1 可視化

    基于eBPF技術Tetragon 很容易對內核子系統進行觀測,包括文件系統訪問、網絡數據訪問,以及系統調用層的事件。如圖4所示[4], Tetragon可以做到對集群感知,也就是說針對集群內的活動上下文事件將體現集群特性,例如命名空間和 pod。看到此處,不禁聯想到此技術在集群安全取證產品上也會有無限的發揮空間。

    圖4 K8s環境中Tetragon 的監控數據

    對于可視化來說,如圖5所示,Tetragon 中通過網絡過濾和運行時過濾的聯合,對于特定的單體對象(如文件、函數等)很容易展示出其上下文的關聯。Isovalent官方博客中描述其是“智能的”,不可否認,對于單個數據鏈可視化的深度來說,上下文的信息是比較豐富的,但離智能似乎還有一段路要走。如何將整個系統中無數的調用鏈進行關聯,以形成“血管網絡圖譜”、如何對調用鏈路的分類乃至異常特征的自動標注,以達到異常調用鏈路聯想的效果,這是走向“智能”的一條道路。

    圖5 某橫向移動可視化

    Tetragon借助eBPF技術可以做到對網絡、運行時、敏感文件以及云原生生態鏈組件信息等進行檢測,這充分體現了eBPF的強大之處,但正因為如此,應用eBPF技術到攻擊面將是更加可怕的,正如美團信息安全團隊所表達的憂慮[5],Tetragon也是使用eBPF的相關接口,如果環境已經有惡意程序對eBPF的結果進行偽裝,那么以上所有的可視化上下文將無法發現問題。借用其羅列的取證思路,提前結合系統層和用戶態的信息進行比對將是一種最直接的解決方法。這里我們可以想象下:在eBPF用戶空間程序層利用第三方可信組件(注意這里不使eBPF本身變復雜)提供簽名驗證(如結合類似Sigstore + In-toto保證供應鏈組件的調用來源可信+調用內容可信),以此保證加載程序的合法性來避免此類的攻擊是否是一種較好的解決思路呢?

    4.2 實時執行

    如圖6所示[6],Tetragon支持來自多層級的安全策略機制,如通過用戶層、CRD和JSON API 等第三方應用層或 OPA等系統層注入安全策略,當然也可以在內核層預制規則。當策略被觸發時,實時對下一步操作做出響應,如攔截等。而這些響應動作直接在內核中對事件做出反應,而不是將事件發送到用戶空間代理,這極大地縮短了上下游的響應鏈。

    圖6 Tetragon策略架構

    Tetragon提供基于多層的策略抽象代理,面向用戶態的操作者可以輕松地定義規則配置,達到從上至下的實時管控效果。需要注意的是,這也面臨同樣的問題,如果環境已經被惡意利用eBPF技術攻擊, 那Tetragon的實時執行結果將可能是被篡改的。

    五、 總結

    本文僅依托開源組件Tetragon對eBPF技術做一些淺簡的思考。歡迎有興趣的同學后臺聯系我們一起交流學習,更多深層次的eBPF技術剖析后期將會由此方向的研究同學進行分享。

    k8s
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Clair可以與K8s集成以持續掃描容器鏡像,分析容器映像并提供已知漏洞的報告。Checkov可以集成到CI/CD管道中,以防止部署不安全的設置。Kube-bench可用于驗證K8s的安裝、執行定期檢查并確保符合最佳實踐。它可以與K8s集成以提供流量管理、安全性和可觀察性。
    K8s etcd未授權訪問
    2023-04-20 07:49:38
    在安裝完K8s后,默認會安裝etcd組件,etcd是一個高可用的key-value數據庫,它為k8s集群提供底層數據存儲,保存了整個集群的狀態。大多數情形下,數據庫中的內容沒有加密,因此如果黑客拿下etcd,就意味著能控制整個K8s集群。在K8s集群初始化后,etcd默認就以pod的形式存在,可以執行如下命令進行查看,etcd組件監聽的端口為2379,并且對外開放。這就意味著訪問etcd服務需要攜帶cert進行認證,執行如下命令訪問etcd服務,可以看到提示未認證。
    K8S kubelet 10250/10255端口未授權訪問
    K8s 的API Server未授權命令執行
    K8s組件和架構
    2022-12-29 16:51:34
    K8s常見組件和架構
    k8s攻防之etcd數據庫篇
    2022-07-21 17:02:34
    Etcd是一個具有強一致性的分布式 key-value 存儲組件(也是一個高可用的分布式鍵值對數據庫)。采用類似目錄結構的方式對數據進行存儲,僅在葉子結點上存儲數據,葉子結點的父節點為目錄,不能存儲數據。多數情形下,數據庫中的內容沒有經過加密處理,一旦etcd被黑客拿下,就意味著整個k8s集群失陷。
    K8s提權之RBAC權限濫用
    2022-06-20 15:04:59
    K8s中RBAC是常用的授權模式,如果在配置RBAC時分配了“過大”資源對象訪問權限可導致權限濫用來提權,以至于攻擊者擴大戰果,滲透集群。 如下是一些RBAC相關的筆記。
    污點 節點親和性 容忍度 污點是K8s高級調度的特性,用于限制哪些Pod可以被調度到某一個節點。在普通節點橫向時我們可以使用污點容忍度創建惡意pod來對主節點進行橫向控制。 kube-scheduler調度 kube-scheduler是Kubernetes集群的默認調度器,并且是集群控制面(master)的一部分。對每一個新創建的Pod或者是未被調度的Pod,kube-sche
    在用k8s時,經常會用到ingress暴露服務。 ingress可以簡單地理解成類似nginx的反向代理,可以根據配置將流量路由到不同的后端。 在"云廠商國內虛機上的k8s集群"中使用ingress會遇到兩個小問題: ingress配置中,必須使用域名,而不能使用ip 云廠商會檢查域名是否備案
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类