linux进程隐藏与对抗

前言

这篇文章主要做一个技术点的记录,过去接触比较少,现在对其进行一个小结。

实现方法

1.命令替换

实现方法

替换top、ps等命令

对抗方法

使用stat命令查看文件状态并且使用md5sum命令查看文件hash并将其与正常文件hash进行比较。如果确定被替换,使用正常文件替代坏文件即可。
在这里插入图片描述

2.Hook系统调用

比如说ps这个命令:

原理:
(1)调用openat系统函数获取/proc目录的文件句柄
(2)调用系统函数getdents递归获取/proc目录下所有文件信息(包括子目录)
(3)调用open函数打开/proc/进程pid/stat和/proc/进程pid/status,以及/proc/进程pid/cmdline文件开始获取进程信息
(4)然后打印输出

攻击者可以劫持getdents和libc中的readdir函数(修改内核中的系统调用代码或者修改lib中的函数代码)实现过滤特定进程名,从而实现进程隐藏。

实现方法:

劫持getdents 等系统调用函数或libc中的readdir 函数等系统调用函数一般来说有3个途径
I、修改内核调用,比如getdents 的源码
II、修改libc库中readdir 函数的源码
III、利用环境变量LD_PRELOAD 或者配置ld.so.preload文件 以使的恶意的动态库先于系统标准库加载,以达到架空系统标准库中相关函数的目的,最终实现对特定进程的隐藏
备注:getdents函数对应的系统调用是sys_getdents(),readdir函数对应的系统调用是proc_pid_readdir(),

对抗方法:

跟踪系统调用可以使用sysdig这个程序:
sysdig proc.name=ps
上述命令可以查看进程的整个启动过程,可以分析是否被劫持。
在这里插入图片描述

3.利用mount命令进行挂载

这个几乎是最常用的实现方式,利用mount命令将磁盘挂在到proc文件夹下的特定位置即可隐藏进程:

扫描二维码关注公众号,回复: 12100783 查看本文章

实现方法

  1. 查看进程
    我们先使用ps查看python进程,这时候发现有一个pid为1906的python3的进程。
    在这里插入图片描述
  2. 挂载磁盘到指定位置
    我们根据ps的原理可知,ps查询的是proc文件夹下的内容,我么直接将磁盘挂在到proc文件夹下的1906即可实现对1906进程的隐藏。
    首先使用df命令查看磁盘:
    在这里插入图片描述
    接着使用mount命令挂载/dev/sda1到/proc/1906:
    mount /dev/sda1 /proc/1906
    在这里插入图片描述
    此时我们在用ps命令查看,发现1906进程已经消失了,达到了隐藏的效果:
    在这里插入图片描述

对抗方法

使用cat /proc/mounts查看,看是否有被挂载的磁盘,如下图所示,选中部分即为挂载情况:
在这里插入图片描述

使用umount /dev/sda1 /proc/1906即可恢复原状取消挂载。

参考文章

聊一聊Linux下进程隐藏的常见手法及侦测手段
linux下进程的隐藏方法与其对抗

猜你喜欢

转载自blog.csdn.net/qq_41874930/article/details/109639134