最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

eBPF:惡意軟件的新領(lǐng)域

2023-02-22 15:49 作者:非蟲-軟件安全  | 我要投稿

eBPF?(擴展的Berkeley數(shù)據(jù)包過濾器)席卷了Linux 世界。它于 2013 年首次推出以支持可編程網(wǎng)絡(luò),現(xiàn)在用于可觀察性、安全性、網(wǎng)絡(luò)等。許多大公司——包括 Meta、谷歌、微軟和 Netflix——都致力于幫助開發(fā)和支持它。

注意:“eBPF”和“BPF”實際上是同義詞,社區(qū)經(jīng)?;Q使用這些術(shù)語,部分原因是 eBPF 幾乎完全取代了經(jīng)典的 BPF 技術(shù)。

在本文中,我們將研究 eBPF 的一個相對較新的用例。在過去的幾年里,研究人員一直在研究 eBPF 在開發(fā)惡意軟件方面的作用。最近,有一些實際惡意軟件在野外利用該技術(shù)的報告示例。有關(guān)惡意軟件利用 eBPF 的眾多演講、研究項目和報告的列表,請參閱本文末尾的附錄。

eBPF 為惡意軟件作者提供了一套全新的工具,其中大部分工具并不為大眾所了解。本文旨在向讀者介紹 eBPF 是什么,并研究基于 eBPF 的惡意軟件的一些基本構(gòu)建塊。最后,我們將討論如何預(yù)防和檢測惡意軟件的這一新興趨勢。

什么是 eBPF?

eBPF 代表擴展伯克利包過濾器。它是原始 Berkeley Packet Filter?(BPF) 設(shè)計的擴展,BPF 是一種用于網(wǎng)絡(luò)過濾的非常簡單的結(jié)構(gòu)。eBPF 的用例最初是為了支持可編程網(wǎng)絡(luò)而開發(fā)的,后來擴展到包括安全性、可觀察性、跟蹤和許多其他應(yīng)用程序。它有自己的網(wǎng)站,是Linux 基金會的一部分,并得到許多公司的支持。

eBPF 的核心是一種指令集架構(gòu)(ISA),可以在 Linux 內(nèi)核內(nèi)的類似虛擬機的結(jié)構(gòu)中運行。它具有寄存器、指令和堆棧,僅舉幾個組件。為了使用 eBPF,用戶創(chuàng)建 eBPF 程序并將它們附加到系統(tǒng)周圍的適當(dāng)位置,通常是在內(nèi)核中。當(dāng)與附加點相關(guān)的事件發(fā)生時,程序運行并有機會從系統(tǒng)讀取數(shù)據(jù)并將該數(shù)據(jù)返回給用戶空間中的控制應(yīng)用程序??偠灾琫BPF 允許用戶動態(tài)安裝可在內(nèi)核上下文中執(zhí)行但可從用戶空間編排的代碼。它有點像用戶空間應(yīng)用程序和 Linux 內(nèi)核模塊之間的混合體。

eBPF 程序的生命周期

為了更好地理解 eBPF 的工作原理,讓我們簡要檢查一下 eBPF 程序的生命周期:

以下圖片來自eBPF 官方網(wǎng)站的資源。?

  1. eBPF 程序通常以“受限”C 程序開始。受限意味著堆棧大小、程序大小、循環(huán)、可用函數(shù)等與普通 C 程序相比受到限制。C 代碼被編譯成 eBPF 字節(jié)碼。

  1. 然后通過調(diào)用 bpf 系統(tǒng)調(diào)用將該字節(jié)代碼加載到內(nèi)核中,通常使用更高級的庫,例如 Cilium、bcc、oxideBPF、libbpfgo 或 Aya,僅舉幾例。

  1. 在 eBPF 代碼完全加載到內(nèi)核之前,它會通過驗證器運行。驗證者的工作是確定 eBPF 程序是否可以安全運行?!鞍踩笔侵杆粫萑霟o限循環(huán),沒有不安全的內(nèi)存操作,并且低于最大復(fù)雜度/代碼大小。

  1. 內(nèi)核組件驗證程序后,它會將自己附加到內(nèi)核中的適當(dāng)位置。這種情況的發(fā)生方式因 eBPF 程序的類型而異。例如,通常用于高速數(shù)據(jù)包管理的 XDP 程序附加到網(wǎng)絡(luò)接口。跟蹤點程序附加到內(nèi)核中用于跟蹤的許多預(yù)定義位置之一。Uprobe 程序可以附加到用戶空間應(yīng)用程序中的任意位置。因此,重申一下,如何附加、附加到何處以及附加什么程序?qū)⒏鶕?jù)程序類型而有很大差異。

  1. 現(xiàn)在程序已經(jīng)過驗證和附加,我們只需等待。eBPF 程序一般是事件驅(qū)動的,所以程序只會在特定事件發(fā)生時運行。那時,代碼在它所附加的上下文中執(zhí)行(通常在內(nèi)核空間中)。

下圖總結(jié)了 eBPF 程序的整個生命周期:


eBPF 變成超級賽亞人

現(xiàn)在我們了解了什么是 eBPF,是什么讓惡意軟件作者對它如此感興趣?為了理解這個問題的答案,我們需要檢查 eBPF 多年來獲得的一些權(quán)力。

如前所述,它最初的設(shè)計考慮到了網(wǎng)絡(luò)。從那時起,許多新的和不同類型的 eBPF 程序極大地擴展了它的范圍和功能。讓我們看一些程序類型,它們對于理解 eBPF 惡意軟件的典型工作方式至關(guān)重要。

套接字過濾器

套接字過濾器是經(jīng)典 BPF 的原始用例。套接字過濾器是一個可以附加到套接字的 eBPF 程序。然后該程序可以過濾該套接字的傳入流量。Berkley Packet Filter 的名稱暗示它是一種旨在過濾數(shù)據(jù)包數(shù)據(jù)的技術(shù)。這個功能甚至一直保留到現(xiàn)代 eBPF 中。

kprobes、uprobes 和跟蹤點

eBPF 程序可以附加到內(nèi)核探測 (?kprobe?)、用戶探測 (?uprobe?) 或跟蹤點。Kprobes 和 uprobes 可以分別附加到內(nèi)核空間或用戶空間中的幾乎任何位置。另一方面,跟蹤點只能附加到內(nèi)核或用戶空間中的預(yù)定義位置。任何時候該函數(shù)或地址運行時,eBPF 程序都會被調(diào)用,該程序?qū)⒛軌蚣皶r檢查有關(guān)該函數(shù)調(diào)用和系統(tǒng)的信息。

eXpress 數(shù)據(jù)路徑 (XDP)

XDP 程序附加在數(shù)據(jù)包處理管道的早期。這允許快速有效的數(shù)據(jù)包處理。它通常用于DDoS 緩解、數(shù)據(jù)包流管理和路由等用途,僅舉幾個用例。它具有修改或重定向數(shù)據(jù)包的能力。XDP 僅在數(shù)據(jù)包接收時運行。

交通管制 (TC)

TC 程序類似于 XDP。主要區(qū)別在于它在網(wǎng)絡(luò)堆棧中運行得稍晚一些。它還可以在數(shù)據(jù)包入口和出口上運行。稍后在網(wǎng)絡(luò)堆棧中運行的好處是它提供了更多關(guān)于數(shù)據(jù)包的上下文。這允許收集更多關(guān)于數(shù)據(jù)包及其去向的數(shù)據(jù)。

eBPF 的陰暗面

基于 eBPF 的快速采用,它顯然會繼續(xù)存在——并且可能會變得更加強大。現(xiàn)在讓我們深入了解 eBPF 的陰暗面,看看研究人員和惡意軟件是如何開始利用這些強大功能的。

bpf_probe_write_user

eBPF 程序可以訪問一組有限的輔助函數(shù)。這些函數(shù)內(nèi)置于內(nèi)核中?;?eBPF 的惡意軟件使用的一個助手是bpf_probe_write_user.?此函數(shù)允許 eBPF 程序?qū)懭氘?dāng)前正在運行的進程的用戶空間內(nèi)存。惡意軟件可以使用這種能力在系統(tǒng)調(diào)用期間修改進程的內(nèi)存,例如bad-bpfsudo如何在讀取時寫入用戶空間內(nèi)存/etc/sudoers。它注入了一個額外的行,允許特定用戶使用該sudo命令。

限制:

  • 如果內(nèi)存被換出或未標記為可寫,該函數(shù)將失敗

  • 一條警告消息會打印到內(nèi)核日志中,說明正在使用該函數(shù)。這是為了警告用戶程序正在使用具有潛在危險的 eBPF 輔助函數(shù)

bpf_override_return

另一個 eBPF 輔助函數(shù),bpf_override_return允許程序覆蓋返回值。惡意軟件開發(fā)人員可以利用它來阻止他們認為不受歡迎的操作。例如,如果你想運行kill -9 <pid-of-ebpf-malware>,惡意軟件可以將 kprobe 附加到適當(dāng)?shù)膬?nèi)核函數(shù)以處理 kill 信號,返回錯誤,并有效地阻止系統(tǒng)調(diào)用的發(fā)生。ebpfkit使用它來阻止可能導(dǎo)致發(fā)現(xiàn)控制 eBPF 程序的用戶空間進程的操作。

限制:

  • 有一個內(nèi)核構(gòu)建時選項可以啟用它:CONFIG_BPF_KPROBE_OVERRIDE

  • ALLOW_ERROR_INJECTION它僅適用于使用宏的函數(shù)

  • 目前僅支持 x86

  • 它只能與 kprobes 一起使用

XDP 和 TC

ebpfkit利用 XDP 和 TC 進行不顯眼的通信。下面是一張來自?Blackhat 會議演講的幻燈片,其中 ebpfkit 的創(chuàng)建者(Guillaume Fournier、Sylvain Afchain 和 Sylvain Baubeau)概述了他們?nèi)绾问褂?XDP 和 TC 隱藏發(fā)送到 ebpfkit 的命令。主機上運行的 XDP 程序接收并處理請求。該程序?qū)⑵渥R別為對主機上運行的惡意軟件的請求,并將數(shù)據(jù)包修改為對主機上運行的 Web 應(yīng)用程序的普通 HTTP 請求。在出口處,ebpfkit 使用 TC 程序捕獲來自 webapp 的響應(yīng),并使用來自 ebpfkit 的響應(yīng)數(shù)據(jù)修改其輸出。

限制:

  • XDP 程序運行得太早,數(shù)據(jù)與進程或套接字無關(guān),因此數(shù)據(jù)包周圍幾乎沒有上下文


注意:我們從 DataDog 研究人員的 Black Hat 2021 演講中獲取了上圖,標題為“有像 eBPF 這樣的朋友,誰需要敵人?”

套接字過濾器

BPFDoor使用套接字過濾器來啟用隱蔽通信。它能夠在系統(tǒng)的任何端口上接收命令,因為它使用的 eBPF 程序可以看到所有傳入流量。Symbiote也利用套接字過濾器,但方式不同。Symbiote 掛鉤setsockopt函數(shù)調(diào)用,當(dāng)它看到套接字過濾器的創(chuàng)建時,會注入自己的代碼來過濾它想要隱藏的流量。這允許它逃避數(shù)據(jù)包分析工具,如tcpdump.

這些只是惡意軟件如何利用 eBPF 的幾個例子。可能還有更多。

Windows 當(dāng)心

順便說一句,對于所有認為“這只是另一個 Linux 威脅……”的 Windows 用戶來說,當(dāng)心!它已經(jīng)在 Windows 中了!

不過不要太擔(dān)心。Windows 的實現(xiàn)仍然非常新,功能集非常有限,因此,我們可能需要一段時間才能在 Windows 上看到基于 eBPF 的惡意軟件。

預(yù)防

那么有希望擊敗如此強大的敵人嗎?當(dāng)然!與任何惡意軟件一樣,第一道防線是采取預(yù)防措施。如果實施,以下步驟可能有助于安全團隊防止 eBPF 惡意軟件:

  • 確保非特權(quán) eBPF 被禁用。如今,要安裝 eBPF 程序,您通常需要 root——或至少需要 CAP_SYS_ADMIN 和/或 CAP_BPF。情況并非總是如此。圍繞內(nèi)核 4.4 引入了非特權(quán) eBPF。請務(wù)必通過運行以下命令檢查此配置選項:

    # sysctl kernel.unprivileged_bpf_disabled
  • 禁用不需要的功能。管理員可以通過編程方式禁用諸如 kprobes 之類的東西:

    # echo 0 > /sys/kernel/debug/kprobes/enabled
  • 在外部防火墻上創(chuàng)建防火墻過濾器以阻止可疑數(shù)據(jù)包

  • 在不支持 kprobes、基于 eBPF 的 TC 過濾器或完全支持 eBPF 的情況下構(gòu)建內(nèi)核(盡管這可能不是許多人的選擇)

  • CONFIG_BPF_KPROBE_OVERRIDE除非絕對必要,否則不設(shè)置Ensure

檢測

如果您懷疑您的系統(tǒng)上可能存在基于 eBPF 的惡意軟件,那么檢測起來會非常困難。安裝后,您不能相信從系統(tǒng)工具返回的數(shù)據(jù)。檢測它的最佳機會是在加載時。如果端點檢測和響應(yīng) (EDR) 產(chǎn)品正在監(jiān)視正確的事件,則它們非常適合執(zhí)行此操作。如果在加載基于 eBPF 的惡意軟件時沒有 EDR 或監(jiān)控工具存在,您仍然可以做一些事情來嘗試檢測基于 eBPF 的惡意軟件。

尋找加載的意外 kprobes:

# cat /sys/kernel/debug/kprobes/列表
ffffffff8ad687e0 r ip_local_out+0x0 [FTRACE]
ffffffff8ad687e0 k ip_local_out+0x0 [FTRACE]

用于bpftool列出程序。程序之類的一些 eBPF 程序并不少見cgroup_skb

# bpftool 程序
176: cgroup_skb 標簽 6deef7357e7b4530 gpl
loaded_at 2022-10-31T04:38:09-0700 uid 0
xlated 64B jited 54B 內(nèi)存鎖 4096B
185: kprobe 標簽 a7ce508aab49e47f gpl
loaded_at 2022-10-31T10:03:16-0700 uid 0
xlated 112B jited 69B memlock 4096B map_ids 40

# bpftool 性能
pid 543805 fd 22: prog_id 3610 kprobe func tcp_v4_connect 偏移量 0
pid 543805 fd 23: prog_id 3610 kprobe func tcp_v6_connect 偏移量 0
pid 543805 fd 25: prog_id 3611 kretprobe func tcp_v4_connect 偏移量 0
pid 543805 fd 26: prog_id 3611 kretprobe func tcp_v6_connect 偏移量 0
pid 543805 fd 28: prog_id 3612 kretprobe func inet_csk_accept 偏移量 0


查找加載的 XDP 程序。您會在輸出中看到與此類似的一行。

$ ip link show dev <接口>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 xdpgeneric qdisc noqueue state UNKNOWN mode DEFAULT 組默認 qlen 1000
鏈接/環(huán)回 00:00:00:00:00:00 brd 00:00:00:00:00:00
prog/xdp id 220 標簽 3b185187f1855c4c jited

?

檢查 bpffs(BPF 文件系統(tǒng))中是否有任何固定對象。

$ 掛載 | grep bpf
……
bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
……

# ls -la /sys/fs/bpf/

檢查是否加載了任何 TC 程序。

# tc filter show dev <設(shè)備名稱>

監(jiān)視系統(tǒng)日志中是否提及 BPF 幫助程序生成的警告消息。

#dmesg -k | grep 'bpf_probe_write_user'

結(jié)論

總之,eBPF 是合法開發(fā)人員和惡意軟件作者等人的強大工具。由于這種范式從過去實施惡意軟件的方式轉(zhuǎn)變,我們需要繼續(xù)研究 eBPF 以更好地了解威脅形勢。

我們在 Red Canary 的威脅研究團隊處于研究和理解新興威脅的最前沿。隨著我們更好地了解如何識別和檢測對手對 eBPF 的濫用,我們將繼續(xù)發(fā)布我們的發(fā)現(xiàn)。請繼續(xù)關(guān)注,以更深入地了解此類惡意軟件的外觀、行為方式以及檢測它的最佳方式。


原文:https://redcanary.com/blog/ebpf-malware/

eBPF:惡意軟件的新領(lǐng)域的評論 (共 條)

分享到微博請遵守國家法律
齐河县| SHOW| 呼玛县| 朝阳市| 正蓝旗| 江华| 延安市| 聂拉木县| 新源县| 双牌县| 定南县| 南宫市| 定安县| 玉环县| 昭苏县| 临汾市| 锦屏县| 阿城市| 马关县| 福清市| 务川| 弋阳县| 灵武市| 罗源县| 甘泉县| 榆中县| 大安市| 南阳市| 建湖县| 三台县| 宣武区| 祁门县| 阳江市| 额尔古纳市| 仙游县| 甘谷县| 都兰县| 含山县| 乐安县| 平潭县| 贡觉县|