qq_51998899 2024-12-12 15:45 采纳率: 50%
浏览 15
已结题

系统调用表Hook无法完全实现对docker容器系统调用的劫持

系统调用表Hook无法完全实现对docker容器系统调用的劫持?

需求:

使用系统调用表Hook技术,监控宿主机以及docker容器里的所有特定格式文件的操作(此处因为某些原因,必须使用内核模块技术实现)

现状:

通过替换系统调用表达到hook文件的打开操作比如open和openat,其中会对 .sen 格式文件打印进程名、文件名和内容(文件内容不多)。现在已成功在我的linux系统上安装成功模块,在宿主机上成功拦截 .sen 格式文件,在docker里拉取ubuntu镜像,操作文件也可以被拦截,流程如下:

# 拉取镜像
docker pull ubuntu

# 启动容器
docker -it --name=myubuntu /bin/bash

# 拷贝 .sen 文件到容器 /home 里
...

# 操作 .sen 文件
cat a.sen

# 在宿主机查看dmesg,发现日志按照预想情况打印
[18132.846627] proc = cat,file = /home/a.sen
[18132.861014] Hello word!

问题:

当我再拉取一个java8的镜像,重复以上操作时,发现java8容器里对sen文件的操作,在宿主机的dmesg日志里没有打印,就好像没有进过系统调用一样,这是为什么,我尝试过如下参数启动java8容器,但都是无功而返,请问这是什么原因?

--cgroupns=host --privileged --security-opt seccomp=unconfined 
  • 写回答

2条回答 默认 最新

  • qq_51998899 2024-12-17 15:58
    关注

    现在已经解决了,问题在于copy_from_user失败,导致无法进行下一步 ,应该使用strncpy_from_user,就可以按照预想的流程执行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月25日
  • 已采纳回答 12月17日
  • 创建了问题 12月12日