一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

分享一個(gè)使用BPF事件捕獲rootkit的案例

Linux閱碼場(chǎng) ? 來(lái)源:人人都是極客 ? 作者:許慶偉 ? 2022-07-13 09:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

eBPF: 不只是用來(lái)跟蹤

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

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

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

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

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

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

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

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

通常,通過(guò)讀取系統(tǒng)調(diào)用表并獲取系統(tǒng)調(diào)用函數(shù)的地址來(lái)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ù),必須首先獲得想要鉤住的對(duì)象訪問(wèn)權(quán)。例如,它可以是保存所有系統(tǒng)調(diào)用函數(shù)地址的系統(tǒng)調(diào)用表。然后,保存函數(shù)的原始地址并覆蓋它。在某些情況下,由于當(dāng)前位置的內(nèi)存權(quán)限,還需要獲取CPU中控制寄存器的權(quán)限。

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

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

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

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

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

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

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

使用Tracee檢測(cè)Syscall鉤子

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

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

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

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

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

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

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

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

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

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

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

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

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

檢測(cè)代碼很簡(jiǎn)單,遍歷系統(tǒng)調(diào)用映射,通過(guò)使用READ_KERN()來(lái)獲取系統(tǒng)調(diào)用表的地址如下:

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

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

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

狩獵時(shí)間: 用eBPF檢測(cè)Diamorphine rootkit

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

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

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

Tracee檢測(cè)到getdents和getdents64這些掛起的系統(tǒng)調(diào)用。TNT團(tuán)隊(duì)使用它們來(lái)隱藏大量加密活動(dòng)導(dǎo)致的CPU負(fù)載過(guò)高,以及通常用于從用戶空間發(fā)送命令來(lái)殺死進(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)各個(gè)層級(jí),此外,由于開源項(xiàng)目(如Diamorphine)的流行,攻擊性網(wǎng)絡(luò)工具變得越來(lái)越容易獲得。因此,安全研究員需要提高自身的防御能力知識(shí),開發(fā)出合適的檢測(cè)方法。


審核編輯:劉清

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

    關(guān)注

    4

    文章

    605

    瀏覽量

    28589
  • rootkit
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

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

    關(guān)注

    0

    文章

    26

    瀏覽量

    4342

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    普源DHO5104波形捕獲率對(duì)偶發(fā)故障診斷的影響

    、偶發(fā)故障診斷的挑戰(zhàn)與波形捕獲率的核心價(jià)值 偶發(fā)故障(Intermittent Fault)具有隨機(jī)性強(qiáng)、持續(xù)時(shí)間短、復(fù)現(xiàn)概率低等特點(diǎn),傳統(tǒng)示波器常因波形捕獲速率不足而難以捕捉到關(guān)鍵信號(hào)異常。例如
    的頭像 發(fā)表于 06-19 15:14 ?156次閱讀
    普源DHO5104波形<b class='flag-5'>捕獲</b>率對(duì)偶發(fā)故障診斷的影響

    泰克示波器高級(jí)觸發(fā)功能捕獲異常信號(hào)的5種方法

    ,結(jié)合原理、應(yīng)用場(chǎng)景及操作步驟,為用戶提供實(shí)踐參考。 ? 、邊沿觸發(fā):精準(zhǔn)定位信號(hào)跳變點(diǎn) 邊沿觸發(fā)是示波器最基礎(chǔ)的觸發(fā)方式之,但在高級(jí)應(yīng)用中,通過(guò)靈活設(shè)置參數(shù)可捕獲異常信號(hào)。例如,當(dāng)信號(hào)存在突變或毛刺時(shí),邊
    的頭像 發(fā)表于 05-29 09:38 ?189次閱讀
    泰克示波器高級(jí)觸發(fā)功能<b class='flag-5'>捕獲</b>異常信號(hào)的5種方法

    使用STM32捕獲PWM時(shí)同時(shí)捕獲2個(gè)通道時(shí)會(huì)出現(xiàn)捕獲的頻率值不準(zhǔn)確,是什么原因?qū)е碌模?/a>

    在使用STM32F103芯片的2個(gè)定時(shí)器捕獲2路PWM波時(shí),當(dāng)2路信號(hào)同時(shí)輸入時(shí),會(huì)出現(xiàn)捕獲的頻率不準(zhǔn)確,但是分開路的輸入
    發(fā)表于 05-14 06:24

    使用STM32捕獲PWM時(shí)同時(shí)捕獲2個(gè)通道時(shí)會(huì)出現(xiàn)捕獲的頻率值不準(zhǔn)確是什么原因?qū)е碌模?/a>

    在使用STM32F103芯片的2個(gè)定時(shí)器捕獲2路PWM波時(shí),當(dāng)2路信號(hào)同時(shí)輸入時(shí),會(huì)出現(xiàn)捕獲的頻率不準(zhǔn)確,但是分開路的輸入
    發(fā)表于 04-27 08:39

    使用STM32捕獲PWM時(shí)同時(shí)捕獲2個(gè)通道時(shí)會(huì)出現(xiàn)捕獲的頻率值不準(zhǔn)確的問(wèn)題,是什么原因?qū)е碌模?/a>

    在使用STM32F103芯片的2個(gè)定時(shí)器捕獲2路PWM波時(shí),當(dāng)2路信號(hào)同時(shí)輸入時(shí),會(huì)出現(xiàn)捕獲的頻率不準(zhǔn)確,但是分開路的輸入
    發(fā)表于 04-25 08:29

    使用STM32捕獲PWM時(shí)同時(shí)捕獲2個(gè)通道時(shí)會(huì)出現(xiàn)捕獲的頻率值不準(zhǔn),為什么?

    在使用STM32F103芯片的2個(gè)定時(shí)器捕獲2路PWM波時(shí),當(dāng)2路信號(hào)同時(shí)輸入時(shí),會(huì)出現(xiàn)捕獲的頻率不準(zhǔn)確,但是分開路的輸入
    發(fā)表于 04-22 10:43

    泰克MDO3052示波器波形捕獲率評(píng)測(cè)

    能力,為用戶提供選型參考。 、波形捕獲率的核心價(jià)值與技術(shù)原理 波形捕獲率是示波器在單位時(shí)間內(nèi)捕獲并處理波形的次數(shù),直接影響異常信號(hào)的捕獲
    的頭像 發(fā)表于 04-02 11:49 ?368次閱讀
    泰克MDO3052示波器波形<b class='flag-5'>捕獲</b>率評(píng)測(cè)

    MC68HC908QT4輸入捕獲問(wèn)題

    使用MC68HC908QT4去控制TCS3200感光傳感器,在輸入捕獲中卡住了,不知道為什么直處于捕獲中,不能執(zhí)行主程序內(nèi)容,代碼如下 望大佬們指教
    發(fā)表于 03-05 15:51

    將TMS320x280x中的eQEP模塊用作專用捕獲

    電子發(fā)燒友網(wǎng)站提供《將TMS320x280x中的eQEP模塊用作專用捕獲.pdf》資料免費(fèi)下載
    發(fā)表于 10-16 10:34 ?2次下載
    將TMS320x280x中的eQEP模塊用作專用<b class='flag-5'>捕獲</b>

    在雙絞線線路上捕獲1394個(gè)事件

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

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

    使用STM32F1輸入捕獲功能時(shí),TIM6和TIM7無(wú)法實(shí)現(xiàn)輸入捕獲,是芯片問(wèn)題嗎?在配置STM32F1的TIM6和TIM7定時(shí)器時(shí),發(fā)現(xiàn)無(wú)法進(jìn)行輸入捕獲,是否因?yàn)樾酒δ苁芟蓿?/div>
    發(fā)表于 09-27 09:11

    基于波形捕獲的超聲波傳感水流量計(jì)量技術(shù)應(yīng)用說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《基于波形捕獲的超聲波傳感水流量計(jì)量技術(shù)應(yīng)用說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 10:37 ?3次下載
    基于波形<b class='flag-5'>捕獲</b>的超聲波傳感水流量計(jì)量技術(shù)應(yīng)用說(shuō)明

    利用高分辨率捕獲(HRCAP)進(jìn)行單線數(shù)據(jù)傳輸

    電子發(fā)燒友網(wǎng)站提供《利用高分辨率捕獲(HRCAP)進(jìn)行單線數(shù)據(jù)傳輸.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 09:56 ?0次下載
    利用高分辨率<b class='flag-5'>捕獲</b>(HRCAP)進(jìn)行單線數(shù)據(jù)傳輸

    是德DSOX4032A示波器波形捕獲

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

    OPA857設(shè)計(jì)個(gè)光脈沖捕獲的前端遇到的疑問(wèn)求解

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