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

2022年 10月 19日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

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

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: