在Linux上,内核有许多进程被创建来帮助完成系统任务。这些进程可用于调度、磁盘I/O等。当您使用像 ps 这样的标准进程清单命令时,这些进程将显示为在它们周围有[括号],以表示它们是某种类型的进程。在 ps 清单中,普通进程通常不会显示带方括号的进程。方括号没有命令行参数进程,这通常意味着它被派生为一个linux内核进程。
ps
Linux恶意软件使用各种技术来隐藏检测。他们使用的一种方法是,通过让进程在ps清单中围绕进程名称显示(括号)来模拟内核线程。这样,管理员就可以很容易地忽略恶意进程。
1
export PATH=.:$PATH
2
cp /bin/sleep /tmp/[kworkerd]
3
cd /tmp
4
"[kworkerd]" 3600 &
使用 export PATH 可以让程序在本地目录运行而不用添加 ./ 前缀。然后拷贝 sleep 命令到/tmp目录并伪造成 [kworkerd] 进程名。
export PATH
./
sleep
[kworkerd]
方法一: 检测 maps
maps
ps auxww | grep \\[ | awk '{print $2}' | xargs -I % sh -c 'echo PID: %; cat /proc/%/maps' 2> /dev/null
正常的内核进程maps内容为空的,伪装的内核进程是有内容标识的。
方法二: 检测 exe
exe
ps auxww | grep \\[ | awk '{print $2}' | xargs -I % sh -c 'echo PID: %; sha1sum /proc/%/exe' 2> /dev/null
正常内核进程没有相应的二进制文件,恶意的内核进程有对应的二进制文件。