Chinaunix首页 | 论坛 | 博客
  • 博客访问: 754748
  • 博文数量: 771
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-11 14:24
文章分类

全部博文(771)

文章存档

2011年(1)

2008年(770)

我的朋友

分类:

2008-09-11 14:36:42


  网络流量分析(一)
  以往关于入侵分析的文章都把注意力集中在可疑的数据包(TCP包或者保留的IP地址)上.但是弄清楚什么是正常的网络数据流也是非常重要的.知道什么是正常数据流最好的办法就是先产生一些正常的数据流,然后拦截数据包进行分析.在本文中,本人介绍一些截获数据包的工具并对截获数据进行一些分析,顺带说一下非正常的数据流.学习本文的前提在于你已经有TCP/IP的基础. 
  
  现在已经有了 很多截获数据包的工具,最有名的是UNIX下的TCPDUMP和WINDOWS下面的WINDUMP.我在自己家98的机器上用过WINDUMP2.1,用CABLE MODEM上网拦截数据包,不过需要指出的是:未经授权而拦截数据包时你可千万要小心啊. 
  
  WINDUMP基础 
  WINDUMP使用起来很简单,在它的站点上你可以找到使用文件.我经常用的命令是
  WINDUMP –N –S,或者WINDUMP –n –S –v 或者WINDUMP –n-S-vv.-N是不显示计算机名而直接显示IP地址;-S是显示TCP/IP的实际进程数,如果不选择这个选项,可能出现的就是近似值,比如:如果现在的进程数是87334271,下一秒变成了多了一个,就会显示出来是87334272.-V和-VV是让机器显示更加全面的信息,显示诸如存活时间/IP的ID等信息. 在开始剖析例子之前,我们先看一下WINDUMP记录的不同种类的数据包,这里有一个TCP的例子, 
  13:45:19.184932 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: P 4138420250:4138420282(32) ack 
  87334272 win 32120 (DF) 
  
  13:45:19.184932 [timestamp]  sshserver.xx.yy.zz.22 [source address and port]  > 
  mypc.xx.yy.zz.3164: [destination address and port]  P [TCP flags]  4138420250:4138420282 
  [sequence numbers]  (32) [bytes of data]  ack 87334272 [acknowledgment flag and number]  win 
  32120 [window size]  (DF) [don't fragment flag is set] 
  
  and then gives the number of data bytes in the packet: 
  下一个是UDP的例子,里面也是该有的全有了:时戳/数据源地址和端口/目的地地址和端口,最后还招供了使用的(UDP)和数据包里面的数据数 
  15:19:14.490029 208.148.96.68.23079 > mypc.xx.yy.zz.6976: udp 401 
  
  ICMP包格式也是类似的,只是注意一下最后,出现了存活时间和IP的ID,当然,你要使用-V选项 
  18:33:45.649204 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 56693) 
  
  最后,WINDUMP也抓获ARP请求和回复.我们来看看:第一行是ARP请求;在这个例子里,MYPC把MAC地址为24.167.235.1的机器信息发送MYPC.XX.YY.ZZ(MYPC的IP地址),第二行则显示了ARP回复,包含着24.167.235.1这个MAC地址. 
  13:45:13.836036 arp who-has 24.167.235.1 tell mypc.xx.yy.zz 
  13:45:13.841823 arp reply 24.167.235.1 is-at 0:xx:xx:xx:xx:xx 
  
  UDP和ICMP例子 
  上面我们已经看过了WINDUMP的记录格式,接下来我们看看数据包:MYPC使用DHCP来获得IP地址,而DHCP租用是定时更新的,这个过程是从MYPC的68端口到DHCP机器的67端口,然后由DHCP回送到MYPC 
  18:47:02.667860 mypc.xx.yy.zz.68 > dnsserver.xx.yy.zz.67: xid:0x8d716e0f C:mypc.xx.yy.zz [|bootp] 
  18:47:03.509471 dnsserver.xx.yy.zz.67 > mypc.xx.yy.zz.68: xid:0x8d716e0f C:mypc.xx.yy.zz 
  Y:mypc.xx.yy.zz [|bootp] 
  WINDUMP的一个好处就在于它可以自动识别和记录的其他信息,在这个例子里,他就识别出这是一个BOOTP,所以它不仅记录了标准的UDP记录,而且记录了BOOTP的特定信息:XID,C,Y. 
  现在我们来看看一些ICMP数据:一个例子就是你在98机器上使用TRACERT命令时出现的数据流,WINDOWS使用ICMP来识别系统之间的跳(UNIX则使用UDP). 
  WINDOWS在执行追踪时先向目的主机发送3个ICMP包,将存活时间设为1,这意味着当数据包到达第一跳时,数值会降为0.此时.第一跳的机器会将ICMP超时错的信息回送到主机,主机就再发出3个ICMP包,将跳数设为2,所以这会就可以在时延结束前到达第二跳的机器,第二跳的机器就又将时延错回送到主机,主机重新再发ICMP包,如此这般,直到找到目标机或者中间有一关将数据流截断为止. which is one of the intermediate network devices between mypc and 64.208.34.100. 
  这里就有一个路由追踪的例子,ICMP的时延值已经被设为1,2,3而且都已经过期,由于尚未到达最终目的机,WINDOWS开始发送时延设为4的ICMP包,这里是第一个数据包和回复 ,请注意虽然第一个数据包的目的地址是64.208.34.100,回复却来自于
  24.95.80.133,这是MYPC和64.208.34.100之间的一个网络设施的地址. 
  18:33:45.649204 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 56693) 
  18:33:45.668638 24.95.80.133 > mypc.xx.yy.zz: icmp: time exceeded in-transit (ttl 252, id 0) 
  
  在收到时延错误信息的千分之一秒内,MYPC发出后续的ICMP包,在收到数据包的错误信息时,机器立即发送出第三个ICMP包: 
  18:33:45.669968 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 56949) 
  18:33:45.690719 24.95.80.133 > mypc.xx.yy.zz: icmp: time exceeded in-transit (ttl 252, id 0) 
  18:33:45.691863 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 57205) 
  18:33:45.710787 24.95.80.133 > mypc.xx.yy.zz: icmp: time exceeded in-transit (ttl 252, id 0) 
  
  请注意这些数据相当近似,只是每一个ICMP回应请求中IP的ID号不同,这点很重要,我们应该对IP的ID号雷同的现象引起高度的重视. 
  
  检测SSH进程 
  SSH是一个更加典型的数据流.我在工作站上装了个SSH的客户并连接到一个开了俺帐户的机器上. 我有用于连接到SSH上的SSH的客户端软件.我的机器并不直到SSH服务器的IP地址,所以他需要DNS的服务,不幸的是,我的机器上又使不了DNS,所以没办法的办法之一就是先使ARP取得默认网关的MAC地址. 
  13:45:13.836036 arp who-has gateway.xx.yy.zz tell mypc.xx.yy.zz 
  13:45:13.841823 arp reply gateway.xx.yy.zz is-at 0:xx:xx:xx:xx:xx 
  
  would expect with a DNS query: 
  现在可以连接到网关上了,MYPC可以发出如下所示的DNS请求,请注意MYPC使用了大于1023的端口,要求建立到DNS的53端口的
  连接,这种请求使用的是UDP 
  13:45:13.841920 mypc.xx.yy.zz.3163 > dnsserver.xx.yy.zz.53: 1+ A? sshserver. (32) 
  
  DNS请求的结果是”1+A SSHSERVER”,我们可以认为这是一个IP地址的进程,因为A和+证明我们要求的是一个循环进程,1是DNS请求数,用于匹配DNS的请求和回复,SSHSERVER则是我们要解析的名字以下是DNS服务器的回应: 
  13:45:13.947208 dnsserver.xx.yy.zz.53 > mypc.xx.yy.zz.3163: 1 q: sshserver. 3/4/6 sshserver. CNAME 
  ssh2server., ssh2server. CNAME ssh3server., ssh3server. A sshserver.xx.yy.zz (283) 
  
  回复情况由"1 q: sshserver. 3/4/6"体现,1是DNS的进程序号, "q: sshserver."是显示我们的请求,3/4/6是显示有3个回复,4个标准记录和6个额外记录,和SSHSERVER连接的IP地址方在A后面现在我们知道了SSH服务器的IP地址,就可以连上去了,MYPC开始三次握手: 
  
  13:45:13.956853 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: S 87334271:87334271(0) win 65535 (DF) 
  13:45:14.059243 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: S 4138420249:4138420249(0) ack 87334272 
  win 32120 (DF) 
  13:45:14.059475 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: . 87334272:87334272(0) ack 4138420250 
  win 65535 (DF) 
  
  三次握手完成,记住:即使2台机器在SSH端口建立了连接,我也没有登录到SSH服务器上去,在3次握手完成前机器间并没有数据交流.SSH客户和服务器是建立了SSH进程,通过下面的数据包进行交流: 
  13:45:19.184932 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: P 4138420250:4138420282(32) ack 
  87334272 win 32120 (DF) 
  13:45:19.201814 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: P 87334272:87334314(42) ack 4138420282 
  win 65503 (DF) 
  13:45:19.300401 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: . 4138420282:4138420282(0) ack 87334314 
  win 32120 (DF) 
  13:45:19.300616 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: P 87334314:87334690(376) ack 4138420282 
  win 65503 (DF) 
  13:45:19.303977 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: P 4138420282:4138421210(928) ack 
  87334314 win 32120 (DF) 
  13:45:19.422141 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: . 4138421210:4138421210(0) ack 87334690 
  win 32120 (DF) 
  13:45:19.488282 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: . 87334690:87334690(0) ack 4138421210 
  win 64575 (DF) 
  
  sshserver's port 22. 
  我敲了密码,正式作为用户登录了进去,所有我使用SSH服务器所产生的数据流都很类似,在MYPC的3136端口和SERVER的22端口之间,有PSH/ACK和ACK包. 
  我从SSHSERVER注销的时候,服务器和客户机之间也有数据流产生,客户机收到来自服务器的最后数据: 
  13:45:33.791528 mypc.xx.yy.zz.3164 >
【责编:admin】

--------------------next---------------------

阅读(640) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~