type
status
slug
summary
tags
category
icon
password
new update day
Property
Oct 22, 2023 01:31 PM
created days
Last edited time
Oct 22, 2023 01:31 PM
0 前言
今天我们基于 Linux 6.4 内核,添加一个系统监控的系统调用,但是单纯添加一个系统调用会显得有些单调,所以我们把系统调用,修改内核,内核编译,还有内核模块的编写插入,用户态测试函数等等结合起来,做一个全面的讲解。
简介
我们要添加的是一个系统调用日志收集系统,系统调用是用户程序与系统打交道的入口,系统调用的安全直接关系到系统的安全,假设一个用户他恶意的不断调用fork,将会导致系统负载增加,所以如果能收集到是谁,调用了一些有危险的系统调用,以及系统调用的时间和其他信息,将有助于系统管理员进行事后的追踪,从而提高系统的安全性,我们看到的这张图就是本次要添加的系统调用日志收集系统示意图。
我们可以看到当用户进程进行系统调用的时候,当执行到do_syscall_64,我们判断是否是我们需要记录的系统调用,如果是则拦截需要记录的系统调用,通过my_audit这一函数将相关信息写入到内核中的buffer里,同时我们编写用户测试程序,在用户测试程序中我们通过本次添加的335号系统调用,执行my_sysaudit这一函数,该函数把内核buffer里的信息,拿到我们的用户buffer当中。
其中
my_audit
和 my_sysaudit
这两个函数是钩子函数,在我们的 my_audit
内核模块当中进行具体的实现。下载对应的内核源码
可以使用wget命令进行下载,解压下载好的压缩包。
1 添加系统调用
第一步
打开系统调用表表项文件,增加系统调用表表项,
第二步 添加系统调用函数
第三步 修改 Makefile
将
myaudit.c
添加到内核编译中去。第四步 增加函数声明
第五步 拦截相关系统调用
- 找到
do_syscall_x64
函数,将对应的想要拦截的系统调用添加到函数中。如果捕捉到对应的要监控的系统函数,调用my_audit
内核函数进行处理。
第六步 添加实现钩子函数的内核模块
- my_audit.c
第七步 编写 Makefile
2 编译修改后的内核
2.1 开启 ccache 加速编译
因为内核数据量很大,所以在编译的时候每次都需要非常多的时间,基本上就是修改两分钟,编译两小时,一点都没有夸张。可以跟据我下面的文章开启 ccache 。
2.2 拷贝原系统 .config 文件
2.3 配置内核
- 打开内核配置页,加载
.config
文件
2.4 配置内核编译关闭证书
如果出现 debian/canonical-certs.pem error 等错误,参考下面的文章与下面的操作。
2.5 编译内核
2.6 安装内核
2.7 重启查看修改
- 重启之后查看内核
- 查看 dmseg
2.8 编译内核模块
2.9 加载内核模块
sudo insmod my_audit.ko
2.10 编写用户态测试函数
- test_syscall.c
2.11 编译并运行
- 运行结果
- Author:tangcuyu
- URL:https://expoli.tech/articles/2023/07/06/Add-monitoring-system-call-based-on-kernel-6.4.2-version-on-Ubuntu-22.04.2
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts