最后防线:字节跳动HIDS分析

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

  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分析

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值