免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3094 | 回复: 2
打印 上一主题 下一主题

网络流量分析(一) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-08 19:13 |只看该作者 |倒序浏览
以往关于入侵分析的文章都把注意力集中在可疑的数据包(TCP包或者保留的IP地址)上.但是弄清楚什么是正常的网络数据流也是非常重要的.知道什么是正常数据流最好的办法就是先产生一些正常的数据流,然后拦截数据包进行分析.在本文中,本人介绍一些截获数据包的工具并对截获数据进行一些分析,顺带说一下非正常的数据流.学习本文的前提在于你已经有TCP/IP的基础. \r\n\r\n现在已经有了 很多截获数据包的工具,最有名的是UNIX下的TCPDUMP和WINDOWS下面的WINDUMP.我在自己家98的机器上用过WINDUMP2.1,用CABLE MODEM上网拦截数据包,不过需要指出的是:未经授权而拦截数据包时你可千万要小心啊. \r\nWINDUMP基础 \r\nWINDUMP使用起来很简单,在它的站点上你可以找到使用文件.我经常用的命令是WINDUMP –N –S,或者WINDUMP –n –S –v 或者WINDUMP –n-S-vv.-N是不显示计算机名而直接显示IP地址;-S是显示TCP/IP的实际进程数,如果不选择这个选项,可能出现的就是近似值,比如:如果现在的进程数是87334271,下一秒变成了多了一个,就会显示出来是87334272.-V和-VV是让机器显示更加全面的信息,显示诸如存活时间/IP的ID等信息. \r\n在开始剖析例子之前,我们先看一下WINDUMP记录的不同种类的数据包,这里有一个TCP的例子, \r\n13:45:19.184932 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: P 4138420250:4138420282(32) ack \r\n87334272 win 32120 (DF) \r\n\r\n13:45:19.184932 [timestamp]??sshserver.xx.yy.zz.22 [source address and port]??> \r\nmypc.xx.yy.zz.3164: [destination address and port]??P [TCP flags]??4138420250:4138420282 \r\n[sequence numbers]??(32) [bytes of data]??ack 87334272 [acknowledgment flag and number]??win \r\n32120 [window size]??(DF) [don\'t fragment flag is set] \r\n\r\nand then gives the number of data bytes in the packet: \r\n下一个是UDP的例子,里面也是该有的全有了:时戳/数据源地址和端口/目的地地址和端口,最后还招供了使用的协议(UDP)和数据包里面的数据数 \r\n15:19:14.490029 208.148.96.68.23079 > mypc.xx.yy.zz.6976:?udp 401 \r\n\r\nICMP包格式也是类似的,只是注意一下最后,出现了存活时间和IP的ID,当然,你要使用-V选项 \r\n18:33:45.649204 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 56693) \r\n\r\n最后,WINDUMP也抓获ARP请求和回复.我们来看看:第一行是ARP请求;在这个例子里,MYPC把MAC地址为24.167.235.1的机器信息发送MYPC.XX.YY.ZZ(MYPC的IP地址),第二行则显示了ARP回复,包含着24.167.235.1这个MAC地址. \r\n13:45:13.836036 arp who-has 24.167.235.1 tell mypc.xx.yy.zz \r\n13:45:13.841823 arp reply 24.167.235.1 is-at 0:xx:xx:xx:xx:xx \r\n\r\nUDP和ICMP例子 \r\n上面我们已经看过了WINDUMP的记录格式,接下来我们看看数据包:MYPC使用DHCP来获得IP地址,而DHCP租用是定时更新的,这个过程是从MYPC的68端口到DHCP机器的67端口,然后由DHCP服务器回送到MYPC \r\n18:47:02.667860 mypc.xx.yy.zz.68 > dnsserver.xx.yy.zz.67:?xid:0x8d716e0f C:mypc.xx.yy.zz [|bootp] \r\n18:47:03.509471 dnsserver.xx.yy.zz.67 > mypc.xx.yy.zz.68:?xid:0x8d716e0f C:mypc.xx.yy.zz \r\nY:mypc.xx.yy.zz [|bootp] \r\nWINDUMP的一个好处就在于它可以自动识别协议和记录的其他信息,在这个例子里,他就识别出这是一个BOOTP,所以它不仅记录了标准的UDP记录,而且记录了BOOTP的特定信息:XID,C,Y. \r\n现在我们来看看一些ICMP数据:一个例子就是你在98机器上使用TRACERT命令时出现的数据流,WINDOWS使用ICMP来识别系统之间的跳(UNIX则使用UDP). \r\nWINDOWS在执行路由追踪时先向目的主机发送3个ICMP包,将存活时间设为1,这意味着当数据包到达第一跳时,数值会降为0.此时.第一跳的机器会将ICMP超时错的信息回送到主机,主机就再发出3个ICMP包,将跳数设为2,所以这会就可以在时延结束前到达第二跳的机器,第二跳的机器就又将时延错回送到主机,主机重新再发ICMP包,如此这般,直到找到目标机或者中间有一关将数据流截断为止. \r\nwhich is one of the intermediate network devices between mypc and 64.208.34.100. \r\n这里就有一个路由追踪的例子,ICMP的时延值已经被设为1,2,3而且都已经过期,由于尚未到达最终目的机,WINDOWS开始发送时延设为4的ICMP包,这里是第一个数据包和回复 ,请注意虽然第一个数据包的目的地址是64.208.34.100,回复却来自于24.95.80.133,这是MYPC和64.208.34.100之间的一个网络设施的地址. \r\n18:33:45.649204 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 56693) \r\n18:33:45.668638 24.95.80.133 > mypc.xx.yy.zz: icmp: time exceeded in-transit (ttl 252, id 0) \r\n\r\n在收到时延错误信息的千分之一秒内,MYPC发出后续的ICMP包,在收到数据包的错误信息时,机器立即发送出第三个ICMP包: \r\n18:33:45.669968 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 56949) \r\n18:33:45.690719 24.95.80.133 > mypc.xx.yy.zz: icmp: time exceeded in-transit (ttl 252, id 0) \r\n18:33:45.691863 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 57205) \r\n18:33:45.710787 24.95.80.133 > mypc.xx.yy.zz: icmp: time exceeded in-transit (ttl 252, id 0) \r\n\r\n请注意这些数据相当近似,只是每一个ICMP回应请求中IP的ID号不同,这点很重要,我们应该对IP的ID号雷同的现象引起高度的重视. \r\n\r\n检测SSH进程 \r\nSSH是一个更加典型的数据流.我在工作站上装了个SSH的客户并连接到一个开了俺帐户的机器上. \r\n我有用于连接到SSH服务器上的SSH的客户端软件.我的机器并不直到SSH服务器的IP地址,所以他需要DNS的服务,不幸的是,我的机器上又使不了DNS,所以没办法的办法之一就是先使ARP取得默认网关的MAC地址. \r\n13:45:13.836036 arp who-has gateway.xx.yy.zz tell mypc.xx.yy.zz \r\n13:45:13.841823 arp reply gateway.xx.yy.zz is-at 0:xx:xx:xx:xx:xx \r\n\r\nwould expect with a DNS query: \r\n现在可以连接到网关上了,MYPC可以发出如下所示的DNS请求,请注意MYPC使用了大于1023的端口,要求建立到DNS的53端口的连接,这种请求使用的是UDP协议 \r\n13:45:13.841920 mypc.xx.yy.zz.3163 > dnsserver.xx.yy.zz.53:?1+ A? sshserver. (32) \r\n\r\nDNS请求的结果是”1+A SSHSERVER”,我们可以认为这是一个IP地址的进程,因为A和+证明我们要求的是一个循环进程,1是DNS请求数,用于匹配DNS的请求和回复,SSHSERVER则是我们要解析的名字 \r\n以下是DNS服务器的回应: \r\n13:45:13.947208 dnsserver.xx.yy.zz.53 > mypc.xx.yy.zz.3163:?1 q: sshserver. 3/4/6 sshserver. CNAME \r\nssh2server., ssh2server. CNAME ssh3server., ssh3server. A sshserver.xx.yy.zz (283) \r\n\r\n回复情况由\"1 q: sshserver. 3/4/6\"体现,1是DNS的进程序号, \"q: sshserver.\"是显示我们的请求,3/4/6是显示有3个回复,4个标准记录和6个额外记录,和SSHSERVER连接的IP地址方在A后面 \r\n现在我们知道了SSH服务器的IP地址,就可以连上去了,MYPC开始三次握手: \r\n\r\n\r\n13:45:13.956853 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: S 87334271:87334271(0) win 65535?(DF) \r\n13:45:14.059243 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: S 4138420249:4138420249(0) ack 87334272 \r\nwin 32120?(DF) \r\n13:45:14.059475 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: . 87334272:87334272(0) ack 4138420250 \r\nwin 65535 (DF) \r\n\r\n三次握手完成,记住:即使2台机器在SSH端口建立了连接,我也没有登录到SSH服务器上去,在3次握手完成前机器间并没有数据交流.SSH客户和服务器是建立了SSH进程,通过下面的数据包进行交流: \r\n13:45:19.184932 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: P 4138420250:4138420282(32) ack \r\n87334272 win 32120 (DF) \r\n13:45:19.201814 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: P 87334272:87334314(42) ack 4138420282 \r\nwin 65503 (DF) \r\n13:45:19.300401 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: . 4138420282:4138420282(0) ack 87334314 \r\nwin 32120 (DF) \r\n13:45:19.300616 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: P 87334314:87334690(376) ack 4138420282 \r\nwin 65503 (DF) \r\n13:45:19.303977 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: P 4138420282:4138421210(928) ack \r\n87334314 win 32120 (DF) \r\n13:45:19.422141 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: . 4138421210:4138421210(0) ack 87334690 \r\nwin 32120 (DF) \r\n13:45:19.488282 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: . 87334690:87334690(0) ack 4138421210 \r\nwin 64575 (DF) \r\n\r\nsshserver\'s port 22. \r\n我敲了密码,正式作为用户登录了进去,所有我使用SSH服务器所产生的数据流都很类似,在MYPC的3136端口和SERVER的22端口之间,有PSH/ACK和ACK包. \r\n我从SSHSERVER注销的时候,服务器和客户机之间也有数据流产生,客户机收到来自服务器的最后数据: \r\n13:45:33.791528 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: P 87335442:87335474(32) ack 4138426586 \r\nwin 64359 (DF) \r\n13:45:33.902690 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: . 4138426586:4138426586(0) ack 87335474 \r\nwin 32120 (DF) \r\n\r\n一旦收到这个数据,客户机就自动断开连接,服务器确认断开: \r\n13:45:33.902909 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: F 87335474:87335474(0) ack 4138426586 \r\nwin 64359 (DF) \r\n13:45:34.002179 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: . 4138426586:4138426586(0) ack 87335475 \r\nwin 32120 (DF) \r\n13:45:34.003336 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: F 4138426586:4138426586(0) ack 87335475 \r\nwin 32120 (DF) \r\n13:45:34.003492 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: . 87335475:87335475(0) ack 4138426587 \r\nwin 64359 (DF) \r\n\r\n所以,我们可以归纳出SSH连接的5个步骤: \r\n(1)使用ARP确认MYPC的默认网关的MAC地址 \r\n(2)发出DNS请求确认SSH服务器的IP地址 \r\n(3)MYPC的高端口和SSHSERVER低端口间的三次TCP握手 \r\n(4)MYPC和SSHSERVER之间的数据交流,包括建立SSH连接,用户认证和数据传输. \r\n(5)MYPC和服务器间的TCP连接断开 \r\n在这个例子里,SSH客户机使用的是高端口(高于1023).在一般连接里,客户机使用的高端口而服务器使用的是低端口,但是需要引起注意的是很多SSH的客户机也使用低端口,所以千万别让一个和本文例子不同的情况把你给弄糊涂了 \r\n\r\n在和SSH类似的连接里,有更多的如TELNET等协议 \r\n结论 \r\n对例行的网络流量进行分析是好好了解TCP/IP和我们环境的好办法,每次我拦截数据包时,我总能学到点新东西,如果你对本文有了兴趣, 我强烈建议你生产/拦截并分析你自己的数据包, 我只是稍微进行 了一些介绍,后面将继续介绍更多的数据流分析,尤其是FTP和HTTP. \r\n\r\n\r\n以下为作者简介: \r\nKaren Frederick is a senior security engineer for NFR Security. Karen has a B.S. in Computer Science and is completing her Master\'s thesis in intrusion detection through the University of Idaho\'s Engineering Outreach program. She holds several certifications, including Microsoft Certified Systems Engineer + Internet, Check Point Certified Security Administrator, and SANS GIAC Certified Intrusion Analyst. Karen is one of the authors and editors of \"Intrusion Signatures and Analysis\", a new book on intrusion detection that was published in January 2001.

论坛徽章:
0
2 [报告]
发表于 2007-06-08 19:28 |只看该作者
以下为作者简介: \r\nKaren Frederick is a senior security engineer for NFR Security. Karen has a B.S. in Computer Science and is completing her Master\'s thesis in intrusion detection through the University of Idaho\'s Engineering Outreach program. She holds several certifications, including Microsoft Certified Systems Engineer + Internet, Check Point Certified Security Administrator, and SANS GIAC Certified Intrusion Analyst. Karen is one of the authors and editors of \"Intrusion Signatures and Analysis\", a new book on intrusion detection that was published in January 2001.\r\n\r\n\r\n汗.....

论坛徽章:
0
3 [报告]
发表于 2007-06-08 22:11 |只看该作者

還是不明

還是不明, 讀了幾片, 可能iq 太低了吧/﹔9
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP