进程隐藏技术
Linux平台
Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。
用户态:
1、替换/usr/bin 目录下top、ps等命令文件,过滤掉要隐藏的进程信息即可
可通过查看上述命令创建时间、MD5等信息确认是否被替换,若被替换,则可通过拷贝正常命令文件替换掉恶意程序修复
2、Hook系统函数,在系统函数中过滤掉相关进程信息,常见的Hook函数有readdir、readdir64、getdents、fopen、open等函数
原理:通过劫持系统调用函数或libc中的函数,实现对特定进程的隐藏,有三种方式可实现:
l 直接修改内核调用的源码如getdents的源码
l 修改libc库中函数的源码
l 利用环境变量LD_PRELOAD 或者配置ld.so.preload文件 以使的恶意的动态库先于系统标准库加载(类似于Windows平台的DLL劫持),一例采用上述手法进行挖矿的实例参考:https://www.anquanke.com/post/id/171523,这起事件中,把LD_PRELOAD相关的信息也在Hook时进行了过滤。
此类方法并未修改/proc文件系统,只是在展示的过程中进行了过滤。
3、挂载目录至指定进程/proc/pid下
执行mount –bind /tmp/xxx /proc/88881后,进程信息被隐藏
可通过查看/proc/$$/mountinfo或/proc/mounts看到挂载信息
解除挂载umount /proc/pid即可
To be continue