在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

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

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

eBPF: 不只是用來跟蹤

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

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

攻擊者為何喜歡Hook內核函數?

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

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

內核中的函數操作

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

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

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

攻擊者如何Hook內核函數?

現在,讓我們研究一下攻擊者如何在真實環境下的網絡攻擊中劫持內核函數。

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

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

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

使用內存邊界技術檢測Syscall鉤子

現在我們已經確定了攻擊者的動機以及他們如何修改內核行為,問題是,我們該如何檢測這種活動? 明確的目標是找到一種方法,以區分內核中的原始內部函數(或與核心內核關聯的syscall)和新的內核模塊代碼(或換句話說,被攻擊后的函數)。

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

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

因此,當前的目標是獲取一個系統調用地址,然后將其與內核core_text邊界進行比較,正如我們所看到的,core_text邊界表示原始內核源的范圍。

使用Tracee檢測Syscall鉤子

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

首先創建一個在用戶空間中觸發的BPF程序,并在內核空間中捕獲相應BPF事件。如果內核程序需要來自用戶空間的信息,可以通過BPF映射來進行傳遞。

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

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

先使用libbpfgo的helper來獲取系統調用表地址,并將其添加到事件內核符號依賴項中。

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

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

然后,我們將它與系統調用號一起傳遞,以便使用BPFMap檢查內核空間。

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

為了檢查內核空間中的那些系統調用,基于security_file_ioctl上的kprobe創建一個事件,它是ioctl系統調用的一個內部函數。這樣我們就可以通過使用用戶空間的特定參數觸發系統調用來控制程序流,接下來用一個特定的命令觸發ioctl:

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

此時,在內核空間中開始檢查ioctl命令是否相同,以及調用該系統調用的進程是否為Tracee。這樣就可以驗證只有當用戶要求Tracee檢查時才會發生檢測的需求。

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

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

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

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

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

狩獵時間: 用eBPF檢測Diamorphine rootkit

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

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

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

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

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

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

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

結論

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


審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux系統
    +關注

    關注

    4

    文章

    596

    瀏覽量

    27510
  • rootkit
    +關注

    關注

    0

    文章

    8

    瀏覽量

    2720
  • BPF
    BPF
    +關注

    關注

    0

    文章

    25

    瀏覽量

    4055

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

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

    是德DSOX4032A示波器波形捕獲

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

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

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

    工業自動化領域解決方案 利用Profishark工具捕獲EtherCAT報文

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

    XMC1302 CCU8如何使用內部函數調用捕獲/解除捕獲

    數字電源中的 XMC1302 CCU8,如何使用內部函數調用捕獲/解除捕獲
    發表于 05-24 07:55

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

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

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

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

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

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

    TSN抓包工具解密:數據包捕獲,為什么選Profishark?

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

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

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

    在使用定時器捕獲兩路PWM的頻率時,中斷函數應該如何配置呢?

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

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

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

    用CCU6捕獲波形的上升沿,當這兩波形同時出現上升沿的時候,是怎么觸發中斷的啊?

    CCU6只有中斷函數,我用CCU6捕獲波形的上升沿,當這兩波形同時出現上升沿的時候,是怎么觸發中斷的啊?是
    發表于 02-22 07:41

    TIM的外部捕獲怎么用?

    有知道,TIM的外部捕獲是什么意思,有什么用,具體怎么用,有示例不?謝謝!
    發表于 02-19 07:44
    主站蜘蛛池模板: 成人影院在线观看 | 天天色影视综合网 | 18女人毛片水真多免费 | 欧美一区二区视频在线观看 | 色噜噜狠狠成人中文小说 | 亚洲国内精品久久 | 激情综合五月 | 亚洲免费不卡 | 欧美高清一区二区三 | 欧美黄色一级视频 | 影音先锋色天使 | 色噜噜狠狠狠综合曰曰曰 | 55夜色66夜色国产精品站 | 一级毛片 在线播放 | 亚洲三级理论 | 91av视频免费在线观看 | 色综合狠狠 | 一区不卡视频 | 天天爱天天操天天射 | 国产高清一级视频在线观看 | 亚洲伊人成综合成人网 | 啪啪在线视频 | 黄色小毛片 | 亚洲国产福利精品一区二区 | 午夜三级国产精品理论三级 | 精品国产亚洲人成在线 | 鲁一鲁色一色 | 日韩精品卡4卡5卡6卡7卡 | 国产精品午夜剧场 | 夜夜爽夜夜爽 | 亚洲高清免费视频 | 玖玖草在线观看 | 精品国产中文一级毛片在线看 | 美女扒开尿口给男人桶 | 麦克斯奥特曼在线观看 | 日日噜噜夜夜狠狠久久aⅴ 日日噜噜夜夜狠狠久久丁香 | 欧美一级欧美三级在线 | 成人国内精品久久久久影院 | 天天干天天爽天天射 | 女人十六毛片 | 国产精品久久久久影院免费 |