吴忠躺衫网络科技有限公司

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

完善資料讓更多小伙伴認識你,還能領(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)用程序的運行時做監(jiān)測和分析。Tracee是用于Linux的運行時安全和取證的開源項目,它基于eBPF實現(xiàn),所以在安全監(jiān)測方面效果更加優(yōu)化。

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

eBPF: 不只是用來跟蹤

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

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

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

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

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

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

攻擊者為了自身利益最大化,會尋找內(nèi)核級別的目標函數(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)的惡意文件和進程。

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

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

現(xiàn)在,讓我們研究一下攻擊者如何在真實環(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團隊使用Diamorphine隱藏加密的活動,這作為他們攻擊的一部分可以很好的解釋這樣的方法:

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

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

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

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

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

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

使用Tracee檢測Syscall鉤子

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

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

例如在Tracee中創(chuàng)建一個事件,該事件將從系統(tǒng)調(diào)用表中獲取系統(tǒng)調(diào)用地址,接下來確認系統(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)用的進程是否為Tracee。這樣就可以驗證只有當(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進行比較:

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

狩獵時間: 用eBPF檢測Diamorphine rootkit

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

使用insmod函數(shù)加載Diamorphine (.ko)的內(nèi)核對象文件。目標是看看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團隊使用它們來隱藏大量加密活動導(dǎo)致的CPU負載過高,以及通常用于從用戶空間發(fā)送命令來殺死進程的kill函數(shù)。在這種情況下,rootkit使用kill -63作為用戶空間和內(nèi)核空間之間的通信通道。同樣,如果再次運行Diamorphine和Tracee使用json輸出,參數(shù)將顯示Diamorphine的惡意鉤子:

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

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

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

結(jié)論

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


審核編輯:劉清

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

    關(guān)注

    4

    文章

    596

    瀏覽量

    27510
  • rootkit
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

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

    關(guān)注

    0

    文章

    25

    瀏覽量

    4055

原文標題:利用eBPF探測Rootkit漏洞

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

    使用STM32F1輸入捕獲功能時,TIM6和TIM7無法實現(xiàn)輸入捕獲是哪里的問題?

    使用STM32F1輸入捕獲功能時,TIM6和TIM7無法實現(xiàn)輸入捕獲,是芯片問題嗎?在配置STM32F1的TIM6和TIM7定時器時,發(fā)現(xiàn)無法進行輸入捕獲,是否因為芯片功能受限?
    發(fā)表于 09-27 09:11

    是德DSOX4032A示波器波形捕獲

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

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

    問題描述: 按照工程需求,需要設(shè)計光脈沖捕獲的前端。我采用的方法是利用OPA857+THS4521進行對光信號放大,然后用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 ?416次閱讀
    工業(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 ?3500次閱讀

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

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

    進行STM32 PWM輸入捕獲遇到的疑問求解

    我在進行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ò)無法運行
    的頭像 發(fā)表于 04-29 08:04 ?704次閱讀
    TSN抓包工具解密:數(shù)據(jù)包<b class='flag-5'>捕獲</b>,為什么選Profishark?

    輸入捕獲實驗是如何判斷他溢出了呢?

    請問,在剛剛捕獲上升沿的時候,如果溢出了,在我圈的最后行里會出現(xiàn)STA++,表示溢出了次,可是,他到底是如何判斷他溢出了呢?上面只是寫了,捕獲到高電平后,如果,STA還能存放數(shù)據(jù),
    發(fā)表于 04-08 07:10

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

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

    TVII2B74芯片怎么使用TCPWM捕獲功能?

    我使用P13.4捕獲PWM時無法捕獲,會卡死在這段代碼中
    發(fā)表于 02-27 06:12

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

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

    TIM的外部捕獲怎么用?

    有知道,TIM的外部捕獲是什么意思,有什么用,具體怎么用,有示例不?謝謝!
    發(fā)表于 02-19 07:44
    大发888官网df888esbgfwz| 巴彦县| 网上百家乐官网的赌博网站| 百家乐官网白菜价| 百家乐技术交流群| 九乐棋牌官网| 现金二八杠游戏| 利记线上娱乐| 百家乐官网信誉博彩公司| 玄空飞星 24山 何??| 肇源县| 澳门百家乐官网洗码提成查询 | 真人百家乐开户须知| 百家乐平注常赢玩法技巧| 大发888娱乐城送58| 新世百家乐的玩法技巧和规则| 新澳博娱乐| 狮威百家乐官网娱乐平台| 百家乐官网技巧开户| 威尼斯人娱乐城代理申请| tt娱乐城官网| 百家乐官网分析软件骗人| 澳门百家乐官网图形| 悍马百家乐的玩法技巧和规则 | 12倍百家乐官网秘籍| 百家乐官网算牌方| 百家乐波音平台开户导航| 新全讯网网址xb112| 百家乐官网玩法皇冠现金网| 百家乐官网平玩法几副牌| 大发888游戏下载官方| 大发888在线娱乐城加盟合作| 新百家乐官网庄闲路单图记录| 百家乐机器昀程序| 合法赌博网站| 百家乐怎么开户| 大发888老虎机手机版| 百家乐官网比较好的网站| 威尼斯人娱乐场棋牌| 克拉玛依市| 网络百家乐赌博视频|