AgentSmith HIDS是字节跳动开源的HIDS,采用内核驱动方式进行入侵检测,可以检测各种rootkit/bootkit,具有实时,高性能,无感知的优势。
由于它是基于内核,只对2.6.32+内核支持,且rootkit的检测必须要在3.10.0+内核才支持。同时,由于它是监控内核函数的调用,事件和消息,并不提供软件管理,用户管理,系统管理,网络管理之类的基线。
虽然目前总体代码只是2500行左右,但实现功能却非常多,多得作者Will大佬的指点,在撸一把5.12.0内核的代码,才勉强清楚这些检测点的应用场景。感谢Will大佬。Will大佬在内核造诣非常深厚。
附上Will大佬创建的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://现代的小甜瓜.io/publications/2018_oakland_linuxmalware.pdf
实现原理
对nanosleep系统调用挂钩,记录程序进程休眠操作,记录信息:
执行程序
秒
纳秒
剩余内容请关注本人公众号debugeeker, 链接为最后防线:字节跳动HIDS分析