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

一.简介.

我们经常可以从一些搞linux入侵的朋友那里听到他们讨论sk这个rootkit,其实sk的全称是suckit,意为super user control kit 。suckit这个程序可以说是目前运行于Linux 2.4内核下最好的rootkit了 。

关键字:Linux后门 Rootkit Linux入侵 suckit adore-ng ELF感染

1、背景知识:什么是LKM:LKM英文是:Loadable Kernel Modules,翻译过来就是"可加载内核模块程序",这是一种区别于一般应用程序的系统级程序,它主要用于扩展linux的内核功能 。LKM可以动态地加载到内存中,无须重新编译内核 。由于LKM具有这样的特点,所以它经常被用于一些设备的驱动程序,例如声卡,网卡等等 。讲到这里,大家是不是回忆起MSDOS中的TSR和Windows中的VxD呢?是的,这三者其实都是差不多的东西,它们都是常驻内存程序,并且可以捕获任何一个系统中断,功能十分强大,所以linux下的rootkit多为LKM 。;

2、sk攻击原理概述

sk是用过攻击/dev/kmem来拦截和修改系统调用来实现后门和隐藏功能的 。所谓系统调用,就是内核提供的、功能十分强大的一系列的函数 。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现 。系统调用是用户程序和内核交互的接口 。系统调用在Linux系统中发挥着巨大的作用,如果没有系统调用,那么应用程序就失去了内核的支持 。我们在编程时用到的很多函数,如fork、open等这些函数最终都是在系统调用里实现的,比如我们有这样一个程序:

以下是引用片段:
#include

int main(void)
{
char *name[2];

name[0] = "/bin/sh";
name[1]= NULL;

if (!fork())
execve(name[0],name,NULL);
exit(0);
}
这里我们用到了两个函数,即fork和exit,这两函数都是glibc中的函数,但是如果我们跟踪函数的执行过程,看看glibc对fork和exit 函数的实现就可以发现在glibc的实现代码里都是采用软中断的方式陷入到内核中再通过系统调用实现函数的功能的 。由此可见,系统调用是用户接口在内核中的实现,如果没有系统调用,用户就不能利用内核 。所以在我们隐藏文件,隐藏网络通讯,隐藏进程信息,都要通过修改系统调用来实现 。

二、sk的特色功能
wzt觉得作为一个优秀的linux rootkit,sk有着下面的特色:
;1:sk后门服务端程序为静态ELF文件,压缩之后就几十K的大小 。我们使用LKM后门的时候,经常会遇到一个很尴尬的情况,就是LKM后门代码无法在安全上编译通过,要么缺少gcc,要么缺少内核代码,要么编译环境有问题,有了sk之后,我们就不需要再为这个问题烦恼了,我们只需要执行一下wget下载sk,并在安全上直接执行就OK了,方便吧,真是居家旅行之必备rootkit啊 。
2:通过对安全的任何开放的TCP端口发送特定数据就可以激活后门回连到我们的客户端,并且客户端有自动扫描功能,它会自动扫描安全开放的端口并发送激活指令 。特别在一些有防火墙的环境里,限制了回连的目标端口,我们还可以指定特殊的回连端口来绕过防火墙,比如回连到80、443这种一般都开放的TCP端口 。
【缩水版 Linux后门系列--由浅入深sk13完全分析】 3:sk后门有一个tty sniffer,什么是tty sniffer呢,通俗的说就是一个"键盘记录",不过他不但可以记录控制台的操作,还可以记录远程连接的操作,它根据程序指定的关键字抓取tty记录,主要包括ssh,passwd,telnet,login等关键字,和thc.org的keylogger相比有过之而无不及啊,通过这个功能我们可以很容易的抓到相关密码而扩大战果,特别是在root密码设置十分BT的时候,我们无法用john来暴力破解,tty log就可以记录到root的密码,甚至是其他linux的root密码 :)

推荐阅读