TCPIP协议分析课程设计报告.docx
《TCPIP协议分析课程设计报告.docx》由会员分享,可在线阅读,更多相关《TCPIP协议分析课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
TCPIP协议分析课程设计报告
成绩:
《TCP/IP协议分析》课程设计
题目:
ICMP协议分析
院(系):
专业班级:
姓名:
学号:
任课教师:
2013年6月10日
1协议概述
1.1协议名称
ICMP是InternetControlMessageProtocol的简称,即Internet控制报文协议。
ICMP协议是一种面向连接的协议,属于网络层协议,用来测试网络是否畅通。
1.2协议主要功能
ICMP是Internet控制报文协议。
它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息,包括报告错误、交换受限控制和状态信息等。
当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP协议是一种面向连接的协议,用于传输出错报告控制信息。
它是一个非常重要的协议,它对于网络安全具有极其重要的意义。
[1]
主要功能是:
1.侦测远端主机是否存在。
2.建立及维护路由资料。
3.重导资料传送路径。
4.资料流量控制。
1.3协议来源
在IP通信中,经常有数据包不能到达对方的情况,原因是在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个的丢弃。
或者因为搞错了端口号,因而服务器软件不能接受它,所以作为IP不可缺少的功能来规定了ICMP网络传输协议。
1.4协议版本发展历程
ICMP与我们息息相关。
在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有在机制来获取差错信息并处理。
为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。
在IP网络上,由于数据包被丢弃的原因,为了控制将必要的信息传送给发信方,为了辅助IP协议,ICMP协议应运而生!
制定万维网规格的IETF在1981年将RFC792作为ICMP的基本规格整理出来的。
在RFC792的开头部分写着“ICMP是IP的不可缺少的部分吧,所有的IP软件必须实现ICMP协议”。
2协议工作原理及流程
2.1协议工作原理
ICMP是一个非常重要的协议,它对于网络安全具有极其重要的意义。
ICMP消息是随IP数据包一起传输的,但该消息本身也是一种与IP协议并行运行在网络层的协议。
ICMP提供一致易懂的出错报告信息。
发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。
发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据包。
但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。
我们在网络中经常会使用到ICMP协议,我们经常使用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。
还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。
ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。
ping 使用的是ICMP协议,它发送ICMP回送请求消息到目的主机。
ICMP协议规定:
目的主机必须返回ICMP回送应答消息导源主机。
如源主机在一定时间收到应答,则认为主机可达。
ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。
因此,保证数据送达的工作应该由其他的模块来完成。
其中一个重要的模块就是ICMP(网络控制报文)协议。
当传送IP数据包发生错误,比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。
给主机一个处理错误的机会,这也就是为什么说建立在IP层以上的协议是可能做到安全的原因。
当检测到IP数据因为某种原因无法继续转发或投递时启动ICMP报文的传输,一般ICMP消息在以下几种情况下会被发送出来:
(1)当数据报不能到达目的地时。
(2)当失去缓存和转发数据报功能时。
(3)当网关发现并能够引导主机在更短的路由上发送数据报时。
2.2协议工作流程分析
Ping使用ICMP回送和应答消息来确定一台主机是否可达。
在运行命令行Ping另一台主机IP。
如果目的端不可达则在命令行显示为
如果ping到了另一台主机,在协议分析器上就会有回显应答。
在命令运行显示的结果就是
3协议格式分析
ICMP报文是放在一个IP数据报的数据部分中传送的。
ICMP报文要求两级封装,如图。
每个ICMP报文放在IP数据报的数据部分过互联网,而数据报本身放在帧的数据部分过物理网络。
携带IMCP报文的IP数据报在传输过程中不具有任何优先级,与正常的IP数据报一样进行转发,唯一不同的是如果携带ICMP报文的IP数据报在传输过程中出现故障,转发该IP数据报的路由将不产生任何关于该差错的报文。
ICMP协议报头最后一项是两个字节长度的校验和,而其后的ICMP消息容则与消息功能有关,但所有消息容中都必须带有引发错误消息和数据报的IP报头和前8个字节,而且这些信息足以使其上层协议对自己的报头进行检查并根据ICMP消息容来执行适当的操作。
最重要的是,ICMP协议不支持数据纠错功能,该协议只是通过向数据源回送错误消息来告诉路由错误。
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP的前
面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文(见图表,ICMP报
文的结构和几种常见的ICMP报文格式),IP头部的Protocol值为1就说明这是
一个ICMP报文,ICMP头部中的类型(Type)域用来说明ICMP报文的作用及格式,
此外还有一个代码(Code)域用来详细说明某种ICMP报文的类型,所有数据都
在ICMP头部后面。
RFC定义了13种ICMP报文格式,具体如下:
[2]
下图为报文类型以及它们的类型值;
类型值
ICMP报文类型
功能
3
目的站不可达
差错报告
11
数据包超时
12
数据包参数错误
8;0
回送请求;应答
请求应答
网络控制
17;18
地址掩码请求;应答
10;9
路由器恳求;通告
13;14
时间戳请求;应答
4
源站抑制
通知类
5
重定向
源端抑制报文格式
类型:
4
代码:
0
检验和
未使用(全0)
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
超时报文格式
类型:
11
代码:
0或1
检验和
未使用(全0)
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
参数问题
类型:
12
代码:
0或1
检验和
指针
未使用(全0)
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
改变路由
类型:
5
代码:
0到3
检验和
目标路由器IP地址
收到的IP数据报的一部分,包括IP首部以及数据报数据的前8个字节
回送请求和回答
类型:
8或0
代码:
0
检验和
标识符
序号
由请求报文发送;由回答报文重复
时间戳请求和回答
类型:
13或14
代码:
0
检验和
标识符
序号
原始时间戳
接收时间戳
发送时间戳
路由询问和通告
类型:
10
代码:
0
检验和
标识符
序号
类型:
9
代码:
0
检验和
地址数
地址项目长度
寿命
路由器地址1
地址参考1
路由器地址2
地址参考2
...
我们经常用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议的过程。
下面运用科来网络分析系统执行Ping命令,并对其结果分析。
当主机与另一台主机网络连接通畅,协议分析器显示为,
我们知道当Type=8Code=0时,为回应请求报文;当Type=0Code=0时,为回应应答报文,该图为回送请求报文。
4协议应用
4.1ICMPflood攻击
4.1.1ICMP洪水的成因
ping.exe和IcmpSendEcho速度慢的一个原因是它们必须等待目标主机返回REPLY信息,这个过程需要花费大量时间,而Flood——洪水,顾名思义,是速度极快的,当一个程序发送数据包的速度达到了每秒1000个以上,它的性质就成了洪水产生器,洪水数据是从洪水产生器里出来的,但这样还不够,没有足够的带宽,再猛的洪水也只能像公路塞车那样慢慢移动。
要做真正的洪水,就需要有一条足够大的带宽才可以。
极慢的发送速度+56Kbps根本没用。
因此很多人在进行攻击时往往是利用自己所控制的别人的多台电脑同时发动攻击,在短时间是被攻击者的电脑瘫痪。
由于ping.exe无法提速,这就需要专门的工具来做洪水了。
足够快的数据包速度+足够的带宽,这才是洪水。
4.1.2实现ICMP洪水的前提
最大的前提是攻击者的速度!
如果你要用56K拨号去攻击一个512KbpsADSL用户,根本没有意义,很可能自己的电脑反被攻击!
其次是你的机器运行速度和数据吞吐量,由于涉及IP校验和的计算(先设置头校验和域的数值为0,然后对整个数据报头按每16位求异或,再把结果取反,就得到了校验和),如果数据处理能力不够,在这步就慢了一个级别,效果当然大打折扣。
最后就是目标机器的带宽!
如果对方比你大很多(例如你2MADSL,别人用DDN或T1),那么任何Flood都是不可能起作用!
还有许多人都忽略的问题:
发送的速度与数据包大小成反比,而且太大的数据包会被路由器等设备过滤掉!
找到一个合适的数据包大小,对提高Flood的效率有很大帮助!
4.1.3洪水——两败俱伤的攻击方式
别以为洪水无所不能,实际上,你展开洪水攻击时,攻击程序在消耗对方带宽和资源时,也在消耗你的带宽和资源。
这只是个看谁撑得住的攻击而已。
实际上,有经验的攻击者都是用被控制的服务器来代替自己的机器发动攻击的,不到万不得已或者你对自己的机器的网速有自信,否则尽量少用自己的机器来拼搏!
4.1.4不同方式的ICMP洪水
1.直接Flood
要做这个的首要条件是你的带宽够,然后就是要一个好用的ICMPFlooder,别用ping.exe那种探路用的垃圾,例如我以前发布的AnGryPing,发包速度达到6000---9000包/秒(512KbpsADSL),默认是32bytes的ECHO报文洪水,用它即使不能flood别人下去,防火墙也叫得够惨的了。
直接攻击会暴露自己IP(如果对方没有还击能力那还无所谓,固定IP用户不推荐使用这种Flood),直接Flood主要是为了顾及Win9x/Me不能伪造IP的缺陷,否则一般还是别用为妙。
简单示意图:
ICMP
攻击者[IP=172.16.52.140]--------------------------------->受害者[截获攻击者IP=172.16.52.140]==>可以换IP回来反击
2.伪造IP的Flood
如果你是Win2000/XP并且是Administrator权限,可以试试看FakePing,它能随意伪造一个IP来Flood,让对方摸不到头脑,属于比较隐蔽阴险的Flood。
简单示意图:
伪造IP=1.1.1.1的ICMP
攻击者[IP=172.16.52.140]--------------------------------->受害者[截获攻击者IP=1.1.1.1]==>攻击到死机
3.反射
用采取这种方式的第一个工具的名称来命名的“Smurf”洪水攻击,把隐蔽性又提高了一个档次,这种攻击模式里,最终淹没目标的洪水不是由攻击者发出的,也不是伪造IP发出的,而是正常通讯的服务器发出的!
实现的原理也不算复杂,Smurf方式能把源IP设置为受害者IP,然后向多台服务器发送ICMP报文(通常是ECHO请求),这些接收报文的服务器被报文欺骗,向受害者返回ECHO应答(Type=0),导致垃圾阻塞受害者的门口……
从示意图可以看出,它比上面两种方法多了一级路径——受骗的主机(称为“反射源”),所以,一个反射源能否有效或者效率低下,都会对Flood效果造成影响!
简单示意图:
伪造受害者的ICMP应答
攻击者[IP=172.16.52.140]-------------------------->正常的主机--------------->受害者[截获攻击者IP=211.69.12.1]==>
以上是几种常见的Flood方式,在测试中,我发现一个有趣的现象:
一些防火墙(如天网)只能拦截ECHO请求(Ping)的ICMP报文,对于其他ICMP报文一概不拦截,不知道其他防火墙有没有这个情况。
所以想攻击别人主机时,请尽量避开直接ECHOFlood,换用Type=0的ECHO应答或Type=14的时间戳应答最好,其他类型的ICMP报文没有详细测试过,大家可以试试看Type=3、4、11的特殊报文会不会有更大效果。
[3]
4.2ICMP防御
当你出现以下症状时,就要注意是否正被洪水攻击:
1.传输状态里,代表远程数据接收的计算机图标一直亮着,而你没有浏览网页或下载
2.防火墙一直提示有人试图ping你
3.网络速度奇慢无比
4.严重时系统几乎失去响应,鼠标呈跳跃状行走。
[4]
ICMP协议是因特网控制消息错误报文协议,使用ICMP攻击的原理实际上就是通过Ping大量的数据包使得计算机的CPU使用率居高不下而崩溃,一般情况下黑客通常在一个时段连续向计算机发出大量请求而导致CPU占用率太高而死机。
虽然很多防火墙可以对PING进行过滤,但对于没有安装防火墙时我们如何有效的防ICMP攻击呢?
其实只要配置一下系统自带的默认防火墙就可以了。
方法如下:
第一步:
打开在电脑的桌面,右键点击“网上邻居→属性→本地连接→属性→Internet协议(TCP/IP)→属性→高级→选项-TCP/IP筛选-属性”。
第二步:
“TCP/IP筛选”窗口中,点击选中“启用TCP/IP筛选(所有适配器)”。
然后分别在“TCP端口、UDP端口和IP协议”的添加框上,点击“只允许”,后按添加按钮,然后在跳出的对话框输入端口,通常我们用来上网的端口是:
80、8080,而服务器的端口是:
25、110,FTP的端口是20、21,同样将UDP端口和IP协议相关进行添加。
第三步:
打开“控制面板→管理工具→本地安全策略”,然后右击“IP安全策略,在本地机器”选“管理IP筛选器和IP筛选器操作”,在管理IP筛选器和IP筛选器的操作列表中添加一个新的过滤规则,名称输入“防止ICMP攻击”,然后按添加,在源地址选任何IP地址,目标地址选我的IP地址,协议类型为ICMP,设置完毕。
第四步:
在“管理筛选器操作”,取消选中“使用添加向导”,添加,在常规中输入名字“Deny的操作”,安全措施为“阻止”。
这样我们就有了一个关注所有进入ICMP报文的过滤策略和丢弃所有报文的过滤操作了。
第五步:
点击“IP安全策略,在本地机器”,选择“创建IP安全策略-下一步-输入名称为ICMP过滤器”,通过增加过滤规则向导,把刚刚定义的“防止ICMP攻击”过滤策略指定给ICMP过滤器,然后选择刚刚定义“Deny的操作”,然后右击“防止ICMP攻击”并启用
另一种方法则是利用目前多数网络防火墙提供的规则设置,对端口号、各IP地址、协议类型、传输方向等选项进行一一添加或更改,同样能够达到封阻可疑端口的目的。
[5]
5结术语
通过对课程的学习,了解到了ICMP协议的结构,格式,和功能。
上文中对ICMP有了详细的介绍,认识到ICMP在现实中的应用。
例如使用Ping命令可以把一个ICMP回显请求发送给指定的主机,通过收到的回显应答来测试该指定的主机是否存活。
在对ICMP的应用方面,知道了ICMP攻击的原理,以及对其的防御。
通过对这些的了解为以后对网络安全的深入学习打下基础.
希望能够通过今后的学习更加的了解ICMP协议,并在实际中运用好这些知识,提高自己在网络安全方面的实际能力!
参考文献
[1].谢希仁.计算机网络(第五版):
电子工业出版社,2008:
第四章.
[2].罗军勇.网络协议分析:
机械工业出版社,2009第五章.
[3].诸葛建伟.网络攻防技术与实践:
电子工业出版社,2011:
第五章
[4].玉清.网络攻击预防与技术:
清华大学出版社,2011;第六章
[5].殷人昆.实用软件工程:
清华大学出版社,2010;第十章