0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分享一個使用BPF事件捕獲rootkit的案例

Linux閱碼場 ? 來源:人人都是極客 ? 作者:許慶偉 ? 2022-07-13 09:03 ? 次閱讀

如今,云原生平臺越來越多的使用了基于eBPF的安全探測技術(shù)。這項技術(shù)通過創(chuàng)建安全的Hook鉤子探針來監(jiān)測內(nèi)部函數(shù)和獲取重要數(shù)據(jù),從而支持對應(yīng)用程序的運(yùn)行時做監(jiān)測和分析。Tracee是用于Linux的運(yùn)行時安全和取證的開源項目,它基于eBPF實(shí)現(xiàn),所以在安全監(jiān)測方面效果更加優(yōu)化。

在本文中,我們將探索控制eBPF事件的方法,并研究一個使用BPF事件捕獲rootkit的案例。Rootkit是一種存在于內(nèi)核中復(fù)雜類型的惡意漏洞攻擊,并將介紹Tracee用于檢測Syscall 鉤子的新特性,它實(shí)現(xiàn)了在內(nèi)核中使用eBPF事件的獨(dú)特方式。

eBPF: 不只是用來跟蹤

eBPF是一種Linux內(nèi)核技術(shù),它允許在不更改內(nèi)核源代碼或添加新模塊的前提下,在Linux內(nèi)核中運(yùn)行沙盒程序。因此,eBPF可以支持安全的Hook到事件上,而不會造成內(nèi)核崩潰的風(fēng)險。

具體來說,eBPF程序使用內(nèi)核機(jī)制(如kprobes、kretprobes、Linux安全模塊(LSM) Hooks、uprobes和traceponits)來創(chuàng)建和設(shè)置鉤子,并加以驗(yàn)證代碼不會使內(nèi)核崩潰。eBPF有一個Verifier驗(yàn)證器,其目標(biāo)是確保eBPF程序安全運(yùn)行(而不是通過加載內(nèi)核模塊來與內(nèi)核交互,如果操作不當(dāng),會導(dǎo)致系統(tǒng)崩潰)。

攻擊者為何喜歡Hook內(nèi)核函數(shù)?

目前使用rootkit的復(fù)雜攻擊往往是針對內(nèi)核空間,這是因?yàn)楣粽咴噲D避免被安全防御方案,以及監(jiān)控用戶空間事件或分析基本系統(tǒng)日志的取證工具檢所測到。此外,在內(nèi)核空間中嵌入惡意軟件也會使得安全研究員和響應(yīng)團(tuán)隊更難找到它。惡意軟件越接近于底層,檢測起來就越困難。

下面,我們將看看TNT團(tuán)隊的例子,并查看他們是如何利用Diamorphine 這個rootkit,以及Tracee如何檢測到它。

內(nèi)核中的函數(shù)操作

攻擊者為了自身利益最大化,會尋找內(nèi)核級別的目標(biāo)函數(shù)。常用的一種方法是函數(shù)鉤子,旨在通過操縱內(nèi)核中的函數(shù)來隱藏惡意活動。這樣做的原因是內(nèi)核函數(shù)執(zhí)行的是來自用戶空間的任務(wù)。如果它們被破壞,攻擊者即可控制所有用戶空間程序的行為。

當(dāng)攻擊者試圖Hook系統(tǒng)調(diào)用(syscall)函數(shù)時,這就是函數(shù)鉤子的一個很好示例。這些高級內(nèi)核函數(shù)用于執(zhí)行來自用戶空間的任務(wù),Hook住它們主要目的是隱藏惡意行為。例如,攻擊者將getdents系統(tǒng)調(diào)用Hook起來,以隱藏用于列出文件命令(如ps、top和ls)的惡意文件和進(jìn)程。

通常,通過讀取系統(tǒng)調(diào)用表并獲取系統(tǒng)調(diào)用函數(shù)的地址來Hook他們。一旦獲得系統(tǒng)調(diào)用函數(shù)地址,攻擊者將保存原始地址,并試圖用包含惡意代碼的新函數(shù)覆蓋它。

攻擊者如何Hook內(nèi)核函數(shù)?

現(xiàn)在,讓我們研究一下攻擊者如何在真實(shí)環(huán)境下的網(wǎng)絡(luò)攻擊中劫持內(nèi)核函數(shù)。

為了Hook內(nèi)核函數(shù),必須首先獲得想要鉤住的對象訪問權(quán)。例如,它可以是保存所有系統(tǒng)調(diào)用函數(shù)地址的系統(tǒng)調(diào)用表。然后,保存函數(shù)的原始地址并覆蓋它。在某些情況下,由于當(dāng)前位置的內(nèi)存權(quán)限,還需要獲取CPU中控制寄存器的權(quán)限。

接下來是TNT團(tuán)隊使用Diamorphine隱藏加密的活動,這作為他們攻擊的一部分可以很好的解釋這樣的方法:

92d4cd9e-0240-11ed-ba43-dac502259ad0.png

使用內(nèi)存邊界技術(shù)檢測Syscall鉤子

現(xiàn)在我們已經(jīng)確定了攻擊者的動機(jī)以及他們?nèi)绾涡薷膬?nèi)核行為,問題是,我們該如何檢測這種活動? 明確的目標(biāo)是找到一種方法,以區(qū)分內(nèi)核中的原始內(nèi)部函數(shù)(或與核心內(nèi)核關(guān)聯(lián)的syscall)和新的內(nèi)核模塊代碼(或換句話說,被攻擊后的函數(shù))。

我們可以通過內(nèi)核的core_text邊界檢測來實(shí)現(xiàn)這一點(diǎn)。內(nèi)核中的內(nèi)存被分為幾個部分。其中一個是core_text段,它保存內(nèi)核中的原始函數(shù)。此部分注冊在特定的內(nèi)存映射區(qū)域中,該區(qū)域不受更改或操作的影響。此外,如果我們加載一個新的內(nèi)核模塊--也就是說,編寫一個新函數(shù)或覆蓋原始函數(shù)——這個新函數(shù)將寫入另一個專門為新函數(shù)保留的內(nèi)存區(qū)域??梢栽谙旅娴奶摂M內(nèi)存映射中看到這一點(diǎn)。注意,分配給原始內(nèi)核代碼的地址范圍(文本部分,又名“核心內(nèi)核文本”)和分配給新內(nèi)核模塊的地址范圍是不同的。

92fbcd90-0240-11ed-ba43-dac502259ad0.png

因此,當(dāng)前的目標(biāo)是獲取一個系統(tǒng)調(diào)用地址,然后將其與內(nèi)核core_text邊界進(jìn)行比較,正如我們所看到的,core_text邊界表示原始內(nèi)核源的范圍。

使用Tracee檢測Syscall鉤子

現(xiàn)在,我們已經(jīng)了解了惡意軟件如何以及為什么以內(nèi)核函數(shù)為目標(biāo),以及如何檢測被鉤住的內(nèi)核函數(shù),接下需要知道如何使用eBPF來提取函數(shù)的地址。使用Tracee可以確定函數(shù)是否被鉤住,即使鉤子是在Tracee執(zhí)行之前放置的。

首先創(chuàng)建一個在用戶空間中觸發(fā)的BPF程序,并在內(nèi)核空間中捕獲相應(yīng)BPF事件。如果內(nèi)核程序需要來自用戶空間的信息,可以通過BPF映射來進(jìn)行傳遞。

例如在Tracee中創(chuàng)建一個事件,該事件將從系統(tǒng)調(diào)用表中獲取系統(tǒng)調(diào)用地址,接下來確認(rèn)系統(tǒng)調(diào)用是否被內(nèi)核模塊鉤住了。如果它被鉤住了,繼續(xù)將創(chuàng)建一個派生事件(由內(nèi)核另一個事件而創(chuàng)建的事件),它將提示系統(tǒng)調(diào)用鉤住的情況,如下:

931ea2e8-0240-11ed-ba43-dac502259ad0.png

先使用libbpfgo的helper來獲取系統(tǒng)調(diào)用表地址,并將其添加到事件內(nèi)核符號依賴項中。

注意,detect_hooked_sycalls事件是派生事件。這意味著在我們接收到系統(tǒng)調(diào)用的地址并檢查它們之后,我們將創(chuàng)建一個新的detect_hooked_sycalls事件。

93321468-0240-11ed-ba43-dac502259ad0.png

然后,我們將它與系統(tǒng)調(diào)用號一起傳遞,以便使用BPFMap檢查內(nèi)核空間。

934924dc-0240-11ed-ba43-dac502259ad0.png

為了檢查內(nèi)核空間中的那些系統(tǒng)調(diào)用,基于security_file_ioctl上的kprobe創(chuàng)建一個事件,它是ioctl系統(tǒng)調(diào)用的一個內(nèi)部函數(shù)。這樣我們就可以通過使用用戶空間的特定參數(shù)觸發(fā)系統(tǒng)調(diào)用來控制程序流,接下來用一個特定的命令觸發(fā)ioctl:

935f35b0-0240-11ed-ba43-dac502259ad0.png

此時,在內(nèi)核空間中開始檢查ioctl命令是否相同,以及調(diào)用該系統(tǒng)調(diào)用的進(jìn)程是否為Tracee。這樣就可以驗(yàn)證只有當(dāng)用戶要求Tracee檢查時才會發(fā)生檢測的需求。

93845eda-0240-11ed-ba43-dac502259ad0.png

檢測代碼很簡單,遍歷系統(tǒng)調(diào)用映射,通過使用READ_KERN()來獲取系統(tǒng)調(diào)用表的地址如下:

9392fc2e-0240-11ed-ba43-dac502259ad0.png

然后在用戶空間中,我們將這些地址與libbpfgo helpers進(jìn)行比較:

93a88378-0240-11ed-ba43-dac502259ad0.png

狩獵時間: 用eBPF檢測Diamorphine rootkit

現(xiàn)在,開始運(yùn)行Tracee,來看看它將如何檢測出Diamorphine rootkit。

使用insmod函數(shù)加載Diamorphine (.ko)的內(nèi)核對象文件。目標(biāo)是看看Tracee的探測結(jié)果。通常,在加載一個內(nèi)核模塊的情況下啟動Tracee,如果選擇了detect_hooked_sycall事件,Tracee將發(fā)送一個hooked_sycalls事件,以確保系統(tǒng)沒有被破壞:

93b901da-0240-11ed-ba43-dac502259ad0.png

Tracee檢測到getdents和getdents64這些掛起的系統(tǒng)調(diào)用。TNT團(tuán)隊使用它們來隱藏大量加密活動導(dǎo)致的CPU負(fù)載過高,以及通常用于從用戶空間發(fā)送命令來殺死進(jìn)程的kill函數(shù)。在這種情況下,rootkit使用kill -63作為用戶空間和內(nèi)核空間之間的通信通道。同樣,如果再次運(yùn)行Diamorphine和Tracee使用json輸出,參數(shù)將顯示Diamorphine的惡意鉤子:

93cac258-0240-11ed-ba43-dac502259ad0.png

如果運(yùn)行Tracee-rules,我們可以看到detect_hooked_sycall事件的新簽名:

93e596b4-0240-11ed-ba43-dac502259ad0.png

結(jié)論

現(xiàn)代攻擊者的目標(biāo)是包括內(nèi)核層的操作系統(tǒng)各個層級,此外,由于開源項目(如Diamorphine)的流行,攻擊性網(wǎng)絡(luò)工具變得越來越容易獲得。因此,安全研究員需要提高自身的防御能力知識,開發(fā)出合適的檢測方法。


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    590

    瀏覽量

    27317
  • rootkit
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    2699
  • BPF
    BPF
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    3968

原文標(biāo)題:利用eBPF探測Rootkit漏洞

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    在雙絞線線路上捕獲1394事件

    電子發(fā)燒友網(wǎng)站提供《在雙絞線線路上捕獲1394事件.pdf》資料免費(fèi)下載
    發(fā)表于 09-29 09:41 ?0次下載
    在雙絞線線路上<b class='flag-5'>捕獲</b>1394<b class='flag-5'>個</b>事件

    是德DSOX4032A示波器波形捕獲

    在電子工程領(lǐng)域,示波器是不可或缺的工具之。而其中,是德DSOX4032A示波器以其卓越的性能和精準(zhǔn)的測量能力備受青睞。今天,我們就來深入了解下是德DSOX4032A示波器的波形捕獲率。
    的頭像 發(fā)表于 08-30 15:38 ?208次閱讀
    是德DSOX4032A示波器波形<b class='flag-5'>捕獲</b>率

    OPA857設(shè)計光脈沖捕獲的前端遇到的疑問求解

    問題描述: 按照工程需求,需要設(shè)計光脈沖捕獲的前端。我采用的方法是利用OPA857+THS4521進(jìn)行對光信號放大,然后用THS4521差分輸出的路送比較器。光傳感器是光電二極
    發(fā)表于 08-30 06:00

    工業(yè)自動化領(lǐng)域解決方案 利用Profishark工具捕獲EtherCAT報文

    ProfiShark是款高性能的報文捕獲工具,專為工業(yè)網(wǎng)絡(luò)設(shè)計,特別適用于EtherCAT報文的捕獲與分析。通過高分辨率時間戳、100%高保真流量捕獲、TSN支持及PoE直通功能
    的頭像 發(fā)表于 07-05 14:01 ?275次閱讀
    工業(yè)自動化領(lǐng)域解決方案 利用Profishark工具<b class='flag-5'>捕獲</b>EtherCAT報文

    XMC1302 CCU8如何使用內(nèi)部函數(shù)調(diào)用捕獲/解除捕獲?

    數(shù)字電源中的 XMC1302 CCU8,如何使用內(nèi)部函數(shù)調(diào)用捕獲/解除捕獲
    發(fā)表于 05-24 07:55

    示波器如何捕獲和分析IIC波形?

    示波器捕獲和分析IIC(集成電路間通信)波形是項重要的電子測量任務(wù),特別是在嵌入式系統(tǒng)和微控制器的調(diào)試過程中。
    的頭像 發(fā)表于 05-20 15:08 ?2635次閱讀

    示波器如何捕獲單次波形?

    示波器是種用于觀察和分析電信號波形的電子測量儀器。在某些測試場景中,需要捕獲并分析單次出現(xiàn)的波形,比如在故障診斷、分析瞬態(tài)響應(yīng)或測試高速且不重復(fù)的事件時。
    的頭像 發(fā)表于 05-17 18:06 ?1455次閱讀

    進(jìn)行STM32 PWM輸入捕獲遇到的疑問求解

    我在進(jìn)行STM32PWM輸入捕獲的時候直有疑問,希望各位大神能給我解決下。 100:復(fù)位模式 – 選中的觸發(fā)輸入(TRGI)的上升沿
    發(fā)表于 05-17 06:13

    TSN抓包工具解密:數(shù)據(jù)包捕獲,為什么選Profishark?

    網(wǎng)絡(luò)流量涉及訪問和記錄通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)。捕獲網(wǎng)絡(luò)流量有多種原因和用例。圖1:捕獲網(wǎng)絡(luò)流量的原因和用例01網(wǎng)絡(luò)故障排除和診斷第一個原因是網(wǎng)絡(luò)故障排除和診斷。網(wǎng)絡(luò)無法運(yùn)行
    的頭像 發(fā)表于 04-29 08:04 ?506次閱讀
    TSN抓包工具解密:數(shù)據(jù)包<b class='flag-5'>捕獲</b>,為什么選Profishark?

    在使用定時器捕獲兩路PWM的頻率時,中斷函數(shù)應(yīng)該如何配置呢?

    在使用定時器捕獲兩路PWM的頻率時,中斷函數(shù)應(yīng)該如何配置呢?? 我采用如下的方式去獲取,但得到的PWM信號的占空比其中有路為200,
    發(fā)表于 03-22 06:39

    用CCU6捕獲波形的上升沿,當(dāng)這兩波形同時出現(xiàn)上升沿的時候,是怎么觸發(fā)中斷的???

    CCU6只有中斷函數(shù),我用CCU6捕獲波形的上升沿,當(dāng)這兩波形同時出現(xiàn)上升沿的時候,是怎么觸發(fā)中斷的???是
    發(fā)表于 02-22 07:41

    TLE9854單片機(jī)的MON引腳,可以捕獲PWM,獲取周期和占空比嗎?

    我現(xiàn)在想捕獲12V的PWM,MON引腳可以捕獲PWM嗎
    發(fā)表于 02-02 13:02

    鎖相環(huán)同步帶與捕獲帶有區(qū)別嗎?

    鎖相環(huán)同步帶與捕獲帶有區(qū)別嗎? 鎖相環(huán)(簡稱PLL)同步帶和捕獲帶是鎖相環(huán)中兩重要的工作模式,它們在功能和應(yīng)用上存在些區(qū)別。 1. 定義和原理: - 鎖相環(huán)同步帶:同步帶是鎖相環(huán)的
    的頭像 發(fā)表于 01-31 11:31 ?1007次閱讀

    通道如何捕獲PWM的頻率和占空比?

    ,前言正常情況是雙通道捕獲PWM波,這種方法簡單且準(zhǔn)確,但是它占用的資源太多了,因?yàn)樗褂枚〞r器的兩通道,且這兩通道映射在
    的頭像 發(fā)表于 12-30 08:00 ?2593次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b>通道如何<b class='flag-5'>捕獲</b>PWM的頻率和占空比?

    光學(xué)納米粒子的光學(xué)捕獲及其應(yīng)用介紹

    《光電科學(xué)》發(fā)表的篇新文章回顧了光學(xué)捕獲的光學(xué)納米粒子的基本原理和應(yīng)用。光學(xué)納米粒子是光子學(xué)的關(guān)鍵要素之。
    的頭像 發(fā)表于 11-25 14:25 ?981次閱讀
    光學(xué)納米粒子的光學(xué)<b class='flag-5'>捕獲</b>及其應(yīng)用介紹