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 |
正常内核进程没有相应的二进制文件,恶意的内核进程有对应的二进制文件。