是位元組跳動開源的HIDS,采用核心驅動方式進行入侵檢測,可以檢測各種
AgentSmith HIDS
rootkit/bootkit
,具有實時,高性能,無感覺的優勢。
由于它是基于核心,隻對2.6.32+核心支援,且rootkit的檢測必須要在3.10.0+核心才支援。同時,由于它是監控核心函數的調用,事件和消息,并不提供軟體管理,使用者管理,系統管理,網絡管理之類的基線。
雖然目前總體代碼隻是2500行左右,但實作功能卻非常多,多得作者Will大佬的指點,在撸一把5.12.0核心的代碼,才勉強清楚這些檢測點的應用場景。感謝Will大佬。Will大佬在核心造詣非常深厚。
附上Will大佬建立的hids群,有興趣的同學請下載下傳飛書加群。謝謝
![]()
最後防線:位元組跳動HIDS分析
公共資訊
AgentSmith在檢測資訊時,這些資訊是每個場景都采集的。詳情見kprobe_print.h
- 目前使用者id
- 目前程序id
- 目前父程序id
- 目前程序組id
- 任務會話id
- 核心線程組id
- UTS命名空間節點名稱 (對docker之類的支援)
- 目前程序執行程式
- Audit會話id(沒有開啟audit,就為0)
原理
AgentSmith是LKM(可加載核心子產品)的方式hook住Linux核心一些函數。由于它是使用kprobe的方式,它hook的函數不隻是系統調用,還可以hook核心内部一些函數,而這些内部函數是某些系統調用的關鍵點調用。
Hook
下面按照這樣格式列舉各個鈎子:核心版本:該鈎子支援的核心版本 作用:該鈎子對應syscall的作用 危害:黑客可以利用相應syscall所造成的危害 實作原理:該鈎子的實作方式 不足:該鈎子還沒有覆寫的情況
mprotect
核心版本:
1.0+
作用
這個系統調用對目前程序記憶體段設定保護
危害
- 惡意軟體把目前程序的資料段設定為可執行,進而繞過DEP
- 惡意軟體把目前程序的代碼段設定為可寫,進而注入惡意代碼
實作原理
對mprotect系統調用挂鈎,記錄任何把程序記憶體段改為**執行權限()**的操作。記錄資訊:
PROT_EXEC
- 執行程式
- 執行程式的程序樹
- 目标程序
- 目标程序所屬的程式
- 操作
不足
僅處理了執行權限(), 沒有處理可寫權限(
PROT_EXEC
)
PROT_WRITE
open
核心版本:
1.0+
作用
打開并且有可能建立新的檔案或裝置
危害
惡意軟體隐藏自身檔案, 躲避檢測
實作原理
對open系統調用挂鈎,記錄程式打開檔案操作,記錄資訊:
- 執行程式
- 檔案
- 打開标志
- 打開模式
nanosleep
核心版本:
2.0+
作用
程序休眠一定時間再執行,高精度的休眠
危害
惡意軟體hook nanosleep
系統調用,可以延遲執行,進而逃避HIDS軟體的檢測。詳情請見https://reyammer.io/publications/2018_oakland_linuxmalware.pdf
實作原理
對nanosleep系統調用挂鈎,記錄程式程序休眠操作,記錄資訊:
- 執行程式
- 秒
- 納秒