天天看點

最後防線:位元組跳動HIDS分析

AgentSmith HIDS

是位元組跳動開源的HIDS,采用核心驅動方式進行入侵檢測,可以檢測各種

rootkit/bootkit

,具有實時,高性能,無感覺的優勢。

由于它是基于核心,隻對2.6.32+核心支援,且rootkit的檢測必須要在3.10.0+核心才支援。同時,由于它是監控核心函數的調用,事件和消息,并不提供軟體管理,使用者管理,系統管理,網絡管理之類的基線。

雖然目前總體代碼隻是2500行左右,但實作功能卻非常多,多得作者Will大佬的指點,在撸一把5.12.0核心的代碼,才勉強清楚這些檢測點的應用場景。感謝Will大佬。Will大佬在核心造詣非常深厚。

附上Will大佬建立的hids群,有興趣的同學請下載下傳飛書加群。謝謝

最後防線:位元組跳動HIDS分析

公共資訊

AgentSmith在檢測資訊時,這些資訊是每個場景都采集的。詳情見kprobe_print.h

  1. 目前使用者id
  2. 目前程序id
  3. 目前父程序id
  4. 目前程序組id
  5. 任務會話id
  6. 核心線程組id
  7. UTS命名空間節點名稱 (對docker之類的支援)
  8. 目前程序執行程式
  9. Audit會話id(沒有開啟audit,就為0)

原理

AgentSmith是LKM(可加載核心子產品)的方式hook住Linux核心一些函數。由于它是使用kprobe的方式,它hook的函數不隻是系統調用,還可以hook核心内部一些函數,而這些内部函數是某些系統調用的關鍵點調用。

Hook

下面按照這樣格式列舉各個鈎子:核心版本:該鈎子支援的核心版本 作用:該鈎子對應syscall的作用 危害:黑客可以利用相應syscall所造成的危害 實作原理:該鈎子的實作方式 不足:該鈎子還沒有覆寫的情況

mprotect

核心版本:

1.0+

作用

這個系統調用對目前程序記憶體段設定保護

危害

  1. 惡意軟體把目前程序的資料段設定為可執行,進而繞過DEP
  2. 惡意軟體把目前程序的代碼段設定為可寫,進而注入惡意代碼

實作原理

對mprotect系統調用挂鈎,記錄任何把程序記憶體段改為**執行權限(

PROT_EXEC

)**的操作。記錄資訊:
  1. 執行程式
  2. 執行程式的程序樹
  3. 目标程序
  4. 目标程序所屬的程式
  5. 操作

不足

僅處理了執行權限(

PROT_EXEC

), 沒有處理可寫權限(

PROT_WRITE

)

open

核心版本:

1.0+

作用

打開并且有可能建立新的檔案或裝置

危害

惡意軟體隐藏自身檔案, 躲避檢測

實作原理

對open系統調用挂鈎,記錄程式打開檔案操作,記錄資訊:
  1. 執行程式
  2. 檔案
  3. 打開标志
  4. 打開模式

nanosleep

核心版本:

2.0+

作用

程序休眠一定時間再執行,高精度的休眠

危害

惡意軟體hook 

nanosleep

系統調用,可以延遲執行,進而逃避HIDS軟體的檢測。詳情請見https://reyammer.io/publications/2018_oakland_linuxmalware.pdf

實作原理

對nanosleep系統調用挂鈎,記錄程式程序休眠操作,記錄資訊:
  1. 執行程式
  2. 納秒

剩餘内容請關注本人公衆号debugeeker, 連結為最後防線:位元組跳動HIDS分析

繼續閱讀