正文
mining pool!
,服务器正在挖矿实锤了!
但神奇的是,这个进程像是隐身了一般,找不到存在的任何痕迹。
进程如何隐藏
现在说回到本文的正题:
Linux操作系统上,进程要隐藏起来,有哪些招数?
要回答这个问题,先来知道ps、top等命令枚举系统的进程列表的原理。
Linux的设计哲学是:
一切皆文件!
进程也不例外, Linux系统中有一个特殊的目录:
/proc/
,这个目录下的内容,不是硬盘上的文件系统,而是操作系统内核暴露出的内核中进程、线程相关的数据接口,也就是
procfs
,里面记录了系统上正在运行的进程和线程信息,来查看一下:
这些以数字命名的目录,就是一个进程的PID,里面记录了该进程的详细信息。
而ps、top等命令的工作原理,实质上就是遍历这个目录。
知道了原理,想实现隐藏就有以下几个思路:
命令替换
直接替换系统中的ps、top命令工具。可以从GitHub上下载它们的源码,加入对应的过滤逻辑,在遍历进程的时候,剔除挖矿进程,实现隐藏的目的。
模块注入
编写一个动态链接库so文件,在so中,HOOK遍历相关的函数(
readdir/readdir64
),遍历的时候,过滤挖矿进程。
通过修改
LD_PRELOAD
环境变量或/etc/ld.so.preload文件,配置动态链接库,实现将其注入到目标进程中。
内核级隐藏
模块注入的方式是在应用层执行函数HOOK,隐藏挖矿进程,更进一步,可以通过加载驱动程序的方式在内核空间HOOK相应的系统调用来实现隐藏。不过这对攻击者的技术要求也更高,遇到这样的病毒清理起来挑战也更大了。