Linux内核进程

在Linux上,内核有许多进程被创建来帮助完成系统任务。这些进程可用于调度、磁盘I/O等。当您使用像ps这样的标准进程清单命令时,这些进程将显示为在它们周围有[括号],以表示它们是某种类型的进程。在ps清单中,普通进程通常不会显示带方括号的进程。方括号没有命令行参数进程,这通常意味着它被派生为一个linux内核进程。

Linux恶意软件使用各种技术来隐藏检测。他们使用的一种方法是,通过让进程在ps清单中围绕进程名称显示(括号)来模拟内核线程。这样,管理员就可以很容易地忽略恶意进程。

模拟内核进程

1
export PATH=.:$PATH
2
cp /bin/sleep /tmp/[kworkerd]
3
cd /tmp
4
"[kworkerd]" 3600 &

使用export PATH可以让程序在本地目录运行而不用添加./前缀。然后拷贝sleep命令到/tmp目录并伪造成[kworkerd]进程名。

检测伪造的内核进程

方法一:检测maps

1
ps auxww | grep \\[ | awk '{print $2}' | xargs -I % sh -c 'echo PID: %; cat /proc/%/maps' 2> /dev/null

正常的内核进程maps内容为空的,伪装的内核进程是有内容标识的。

方法二:检测exe

1
ps auxww | grep \\[ | awk '{print $2}' | xargs -I % sh -c 'echo PID: %; sha1sum /proc/%/exe' 2> /dev/null

正常内核进程没有相应的二进制文件,恶意的内核进程有对应的二进制文件。