0%

《计算机网络》ICMP协议

ICMP协议

ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP协议数据位于IP报文的负载中,但并不是实现传输层协议的规定,所以不是传输层协议,而是网络层协议。

ICMP报文格式

ICMP报文格式

ICMP工作原理

互联网中任意两台主机A和B

A想知道B是否存活,A可以发送一个ICMP请求给B,IP协议中的源IP为A的IP,目标IP为B的IP

B收到以太帧后,会根据IP协议头中的协议字段知道这个报文是ICMP请求,就会回复这个请求,向A发送一个回复的ICMP报文

A同样能解析出B回复的是ICMP回复报文,就知道了B是活着的

ICMP洪水攻击

既然主机一般都要回复ICMP请求,那么这里就出现一个攻击手段。如果我向某个主机高频率发送ICMP请求会发生什么?

如果频率足够高,目标主机会因为忙于回复ICMP请求导致耗尽网络宽带资源,造成拒绝服务攻击。这就是 DDOS 攻击的其中一种方式

ICMP洪水攻击存在3中形态

正常洪水攻击

源IP、目标IP都正常设置,直接高频发送ICMP。这种攻击方式最好把自己的主机的ICMP回复禁止掉,不然就是拼实力了。一般都是组织成千上万的肉鸡代替攻击

这种方式容易暴露攻击人

伪造源IP的洪水攻击

如果将IP报文的源IP不设置为自己的IP,而是随便伪造一个,同样能达到攻击的目的。而且可以隐藏自己

反射洪水攻击

如果将IP报文的源IP设置为攻击目标的IP,向很多其他正常主机(比如百度服务器)发送ICMP请求,这个时候百度服务器会向攻击目标发送ICMP回复请求,如果量足够大,同样能达到攻击目的

这种就是其实就是百度的服务器发的直接攻击。攻击目标会发现,居然是百度攻击的自己,一脸懵逼。这种方式隐藏更深

发动反射攻击需要在互联网上找到大量的发射器,某些种类的反射攻击并不难实现,只需要找到互联网上开放的TCP端口的服务器即可,而这种服务器在互联网上的存在是非常广泛的。

注意:发动反射攻击通常会使用无需认证或者握手的协议,反射攻击需要将请求数据的源IP地址伪造成被攻击目标的IP地址,如果使用的协议需要进行认证或者握手,则该认证或握手过程没有办法完成,也就不能进行下一步的攻击

相关防护

ICMP洪水攻击可以说是通过流量进行攻击的,主要是耗尽网络带宽。所以可以通过频率限制做防护,比如同一个目标IP的ICMP报文一分钟内超过1000次,则丢弃后续的ICMP报文,一段时间后恢复,这种防护一般在防火墙中可以设置的

还有极端的防护方式,就是直接关闭ICMP回复。这会导致其他主机无法知道自己是否存活,但可以阻止上面的前两个形态的攻击

源码学习

fping是C写的,可以去研究源码 https://github.com/schweikert/fping

我这里也使用Golang写了一个简易版本,大家可以去研究一下,也欢迎一起完善Golang版本的ping https://github.com/pefish/go-ping




微信关注我,及时接收最新技术文章