icmp协议_ICMP协议详解及攻击与防范

ICMP协议概述:

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

ICMP消息类型用途说明回显请求Ping工具通过发送ICMP回显消息检查特定节点的IPv4连接以排查网络问题。类型值为0回显应答节点发送回显答复消息响应ICMP回显消息。类型值为8重定向路由器发送“重定向”消息,告诉发送主机到目标IPv4地址更好的路由。类型值为5源抑制路由器发送“源结束”消息,告诉发送主机它们的IPv4数据报将被丢弃——因为路由器上发生了拥塞。于是,发送主机将以较低的频度发送数据报。类型值为4超时这个消息有两种用途。第一,当超过IP生存期时向发送系统发出错误信息。第二,如果分段的IP数据报没有在某种期限内重新组合,这个消息将通知发送系统。类型值为11无法到达目标路由器和目标主机发送“无法到达目标”消息,通知发送主机它们的数据无法传送。类型值为3

其中无法到达目标消息中可以细分为以下几项

无法到达目标消息说明不能访问主机路由器找不到目标的IPv4地址的路由时发送“不能访问主机”消息无法访问协议目标IPv4节点无法将IPv4报头中的“协议”字段与当前使用的IPv4客户端协议相匹配时会发送“无法访问协议”消息无法访问端口IPv4节点在UDP报头中的“目标端口”字段与使用该UDP端口的应用程序相匹配时发送“无法访问端口”消息需要分段但设置了DF当必须分段但发送节点在IPv4报头中设置了“不分段(DF)”标志时,IPv4路由器会发送“需要分段但设置了DF”消息

ICMP协议只是试图报告错误,并对特定的情况提供反馈,但最终并没有使IPv4成为一个可靠的协议。ICMP消息是以未确认的IPv4数据报传送的,它们自己也不可靠。

伪造ICMP数据进行扫描:

在主机192.168.70.128 上实施ICMP数据包扫描,判断目标主机192.168.70.2是否启用。

1)伪造IP地址为192.168.70.10 MAC地址为a1:b2:c3:d4:e5:f6

netwox 66 -i 192.168.70.2 -E a1:b2:c3:d4:e5:f6 -I 192.168.70.10

639890480eae9dcb081f4a53be0d1dfc.png

我们使用专家信息来看下保存信息:

6035f3cc841106e8c6d6990be0f16cf3.png

显示我们构造的这个MAC地址前面的厂商号是不存在的。

伪造连续的ICMP数据请求包:

1)伪造实施的主机IP地址为192.168.70.10 MAC地址为 aa:bb:cc:11:22:33 目标IP192.168.70.2 MAC地址a1:b2:c3:d4:f5:e6

执行命令:

netwox 50 -i 192.168.70.2 -E a1:b2:c3:d4:f5:e6 -I 192.168.70.10 -e aa:bb:cc:11:22:33

ICMP协议应用-路由追踪

在Linux中使用traceroute,windows中使用tracert命令可以实现路由追踪,

原理主机向目标发送ICMP数据包,每经过一个路由器都会得到一个响应包,直到目标返回ICMP响应包;但是这样也很容易被溯源发现。

使用构造ICMP请求包进行路由跟踪方式时,容易被目标主机发现。为了避免这种情况,用户可以使用 netwox 工具提供的编号为 58 的模块伪造 ICMP 请求包。它可以伪造主机 IP 地址和 MAC 地址。
【实例】在主机 192.168.12.106 上,伪造 ICMP 请求包对目标 125.39.52.26 进行路由跟踪。
1) 伪造源 IP 地址为 192.168.12.130,MAC 地址为 00:01:02:12:13:14,指定目标 IP 地址为 125.39.52.26,MAC 地址为 ec:17:2f:46:70:ba,执行命令如下:

root@kali:~# netwox 58 -I 192.168.12.130 -E 00:01:02:12:13:14 -i 125.39.52.26 -e ec:17:2f:46:70:ba

输出信息如下:

1 : 192.168.12.1
2 : 192.168.0.1
3 : 183.185.164.1
4 : 218.26.28.157
5 : 218.26.151.161
6 : 219.158.15.214
8 : 125.39.79.158
14 : 125.39.52.26


2) 通过 Wireshark 抓包,验证伪造的 ICMP 请求包,如图所示。

23275907c81d695d7b8cd1483691a43c.gif

其中,第 3~33 个数据包为进行路由跟踪所产生的 ICMP 数据包,并且可以看到经过的路由返回了超时消息 ICMP 数据包。
3) 选择第 3 个数据包,查看地址信息,如图所示。

936c5610fab706cc277584fa900731bd.gif

其中,源 IP 地址为伪造的 192.168.12.130,目标地址为 125.39.52.26。在 Ethernet II 部分中,源 MAC 地址为伪造的 00:01:02:12:13:14。

发送ICMPs时间戳请求:

ICMP 时间戳请求允许系统向另一个系统查询当前的时间,但不包含日期,返回的建议值是自午夜零点开始计算的时间(UTC)。
ICMP 时间戳请求与应答报文格式如图所示。

ea5e4d70156e40f70b543e939ad2d6d2.gif


在发送 ICMP 时间戳请求时,请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。
在请求和响应的交互过程中,当 ICMP 报文中的类型值为 13、代码值为 0 时,数据包为 ICMP 时间戳请求数据包;当 ICMP 报文中的类型值为 14,代码值为 0 时,数据包为 ICMP 时间戳应答数据包。
netwox 工具提供编号为 81 的模块,用于构建时间戳请求。
【实例】向目标主机 192.168.59.135 发送 ICMP 时间戳请求,探测数据包传输的时间。
1) 发送ICMP时间戳请求,执行命令如下:

root@daxueba:~# netwox 81 -i 192.168.59.135

输出信息如下:

0 0

输出信息表示目标主机可达,如果目标主机不可达,将显示信息如下:

No answer.


2) 可以通过 Wireshark 进行抓包,验证成功发送了时间戳请求,如图所示。

0b565f3a91f4914a7fb1fb0563e0c985.gif

其中,第 6 个数据包为 ICMP 时间戳请求。
在 Internet Control Message Protocol 部分中,Type 值为 13,Code 值为 0,表示该数据包为 ICMP 时间戳请求。
Originate timestamp 的值表示数据包发起的起始时间,这里为 0 秒(午夜 0 点 0 秒);Receive timestamp 的值表示接收数据包的时间,这里为 0 秒;Transmit timestamp 的值表示数据包的发送时间,这里为 0 秒。时间为 0 秒,是因为从午夜零点开始计算。
3) 选择对应的响应包查看信息,如图所示。

e63e0cdfc24c0f61b5a2461f9ed73bef.gif

其中,第 7 个数据包为 ICMP 时间戳应答。
在 Internet Control Message Protocol 部分中,Type 值为 14,Code 值为 0,表示该数据包为 ICMP 时间戳应答。
Originate timestamp 的值表示数据包发起的起始时间,这里为 0 秒(午夜零点后开始计算);Receive timestamp 的值表示接收数据包的时间,这里为午夜零点后 8 小时 44 分 24.379 秒;Transmit timestamp 的值表示数据包的发送时间,这里为 31464379 秒,时间为午夜零点后 8 小时 44 分 24.379 秒。

伪造请求超时的ICMP数据包:

在网络传输 IP 数据报的过程中,如果 IP 数据包的 TTL 值逐渐递减为 0 时,需要丢弃数据报。这时,路由器需要向源发送方发送 ICMP 超时报文,表示传输过程中超时了。
在超时 ICMP 数据包报文中,类型值为 11,代码值为 0。
用户可以通过 netwox 工具中编号为 83 的模块伪造请求超时 ICMP 数据包。
【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135,在主机 C 上伪造请求超时 ICMP 数据包。
1) 在主机 A 上 ping 主机 B,执行命令如下:

root@daxueba:~# ping 192.168.59.135

输出信息如下:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=1 ttl=64 time=0.447 ms
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.468 ms
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.773 ms
64 bytes from 192.168.59.135: icmp_seq=4 ttl=64 time=0.307 ms

上述输出信息表示主机 B 是可达的,并且给出了传输的时间。例如,time=0.447ms,表示时间需要 0.447 毫秒。
2) 在主机 C 上伪造请求超时 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

root@daxueba:~# netwox 83 -i 192.168.59.135

执行命令后没有任何输出信息,但是成功伪造了请求超时 ICMP 数据包。
3) 再次在主机 A 上 ping 主机 B,执行命令如下:

root@daxueba:~# ping 192.168.59.135

输出信息如下:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=6 ttl=64 time=0.336 ms
From 192.168.59.135 icmp_seq=6 Time to live exceeded
64 bytes from 192.168.59.135: icmp_seq=7 ttl=64 time=0.532 ms
From 192.168.59.135 icmp_seq=7 Time to live exceeded
64 bytes from 192.168.59.135: icmp_seq=8 ttl=64 time=0.495 ms
From 192.168.59.135 icmp_seq=8 Time to live exceeded

从上述输出信息可以看到,主机 A 向主机 192.168.59.135 发送了 ping 请求。部分请求没有收到响应信息,而显示了 Time to live exceeded 信息,表示时间超时。
4) 为了验证伪造的请求超时 ICMP 数据包,可以通过捕获数据包查看,如图所示,捕获到了若干个 ICMP 超时数据包。

ec5ad53cf730dedd136c0f714d234ec8.png

其中,第 3 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机 B 发送的 ICMP 请求包;第 5 个数据包源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Time-to-live exceeded 表示时间超时,说明该数据包为伪造的请求超时 ICMP 包。
5) 选择第 5 个数据包,查看包信息,如图所示。

3b09b86358e406ec4dc9a6e36e53db32.png

在该数据包的 Internet Control Message Protocol 部分中,Type 值为 11,Code 值为 0,说明该数据包是请求超时 ICMP 数据包。

伪造目标不可达的ICMP数据包:

目标不可达包是指路由器无法将 IP 数据包发送给目标地址时,会给发送端主机返回一个目标不可达的 ICMP 消息。在目标不可达报文中,类型值为 3,代码值为 1。
伪造目标不可达的 ICMP 数据包需要使用 netwox 工具中编号为 82 的模块。
【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135,在主机 C 上伪造目标不可达 ICMP 数据包。
1) 在主机 C 上伪造目标不可达 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

root@daxueba:~# netwox 82 -i 192.168.59.135

执行命令后没有任何输出信息,说明成功伪造了目标主机不可达 ICMP 数据包。
2) 在主机 A 上 ping 主机 B,执行命令如下:

root@daxueba:~# ping 192.168.59.135

输出信息如下:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=1 ttl=64 time=3.95 ms
From 192.168.59.135 icmp_seq=1 Destination Host Unreachable
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.608 ms
From 192.168.59.135 icmp_seq=2 Destination Host Unreachable
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.341 ms
From 192.168.59.135 icmp_seq=3 Destination Host Unreachable
64 bytes from 192.168.59.135: icmp_seq=4 ttl=64 time=0.499 ms
From 192.168.59.135 icmp_seq=4 Destination Host Unreachable

从上述输出信息可以看到,主机 A 向主机 192.168.59.135 发送了 ping 请求,但是部分请求没有得到响应信息,而显示了 Destination Host Unreachable 信息,表示目标主机不可达。
3) 为了验证伪造的目标不可达 ICMP 数据包,可以使用 Wireshark 抓包查看,如图所示,捕获到了若干个 ICMP 数据包。

5277f7e78d1aec1a0728ec06469c33a8.gif

其中,第 3 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机B发送的 ICMP 请求包;第 5 个数据包的源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Destination unreachable(Host unreachable) 表示目标主机不可达,说明该数据包为伪造的目标不可达 ICMP 数据包。
5) 选择第 5 个数据包,查看包信息,如图所示。

dc9f0bbefdc752e76a464539c52b9da7.gif

在该数据包的 Internet Control Message Protocol 部分中,Type 值为 3,Code 值为 1,说明该数据包是目标不可达 ICMP 数据包。

伪造参数错误的ICMP数据包:

当路由器或主机处理数据报时,发现因为报文头的参数错误而不得不丢弃报文时,需要向源发送方发送参数错误报文。该报文中,类型值为 12,代码值为 0。
伪造参数错误的 ICMP 数据包需要使用 netwox 工具中编号为 84 的模块。
【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135,在主机 C 上伪造参数错误 ICMP 数据包。
1) 在主机 C 上伪造参数错误 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

root@daxueba:~# netwox 82 -i 192.168.59.135

执行命令后没有任何输出信息,但是会伪造参数错误 ICMP 数据包。
2) 在主机 A 上 ping 主机 B,执行命令如下:

root@daxueba:~# ping 192.168.59.135

输出信息如下:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=1 ttl=64 time=11.1 ms
From 192.168.59.135 icmp_seq=1 Parameter problem: pointer = 0
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.546 ms
From 192.168.59.135 icmp_seq=2 Parameter problem: pointer = 0
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.453 ms
From 192.168.59.135 icmp_seq=3 Parameter problem: pointer = 0

从输出信息可以看到,主机A向主机 192.168.59.135 发送了 ping 请求,但部分请求没有得到响应信息,而显示了 Parameter problem 信息,表示参数错误。
3) 通过捕获数据包,验证伪造的参数错误的 ICMP 数据包,如图所示,捕获到了若干个 ICMP 数据包。

87703d1e8dbf0bc0c3476d33cb008d41.gif

第 1 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机 B 发送的 ICMP 请求包;第 3 个数据包的源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Parameter problem 表示参数错误,说明该数据包为伪造的参数错误 ICMP 数据包。
4) 选择第 3 个数据包,查看包信息,如图所示。

3b47890d62aafc93b318f0ce26b1bbe3.gif

在 Internet Control Message Protocol 部分中,Type 值为 12,Code 值为 0,说明该数据包是参数错误 ICMP 数据包。

伪造原站抑制的ICMP数据包:

主机在处理报文时会有一个缓存队列。当主机接收数据包的速度比处理速度快时,一旦超过最大缓存队列,主机将无法处理,从而选择丢弃报文。这时,主机会向源发送方发送一个 ICMP 源站抑制报文,告诉对方缓存队列已满,稍后再进行请求。
在源站抑制的 ICMP 报文中,类型值为 4,代码值为 0。
伪造源站抑制的数据包需要使用 netwox 工具中编号为 85 的模块。
【实例】已知主机 A 的 IP 地址为 192.168.59.134,主机 B 的 IP 地址为 192.168.59.135。在主机 C 上伪造源站抑制 ICMP 数据包。
1) 在主机 C 上伪造源站抑制 ICMP 数据包,设置源 IP 地址为 192.168.59.135,执行命令如下:

root@daxueba:~# netwox 85 -i 192.168.59.135

执行命令后没有任何输出信息,但是成功伪造了源站抑制 ICMP 数据包。
2) 在主机 A 上 ping 主机 B,执行命令如下:

root@daxueba:~# ping 192.168.59.135

输出信息如下:

PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=1 ttl=64 time=1.77 ms
From 192.168.59.135: icmp_seq=1 Source Quench
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.429 ms
From 192.168.59.135: icmp_seq=2 Source Quench
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=18.8 ms
From 192.168.59.135: icmp_seq=3 Source Quench

从输出信息可以看到,主机 A 向主机 192.168.59.135 发送了 ping 请求,但是部分请求没有得到响应信息,而显示了 Source Quench 信息,表示源站抑制。
3) 通过捕获数据包,验证伪造的源站抑制的 ICMP 数据包,如图所示。

24b38608de222f1e8693ec174093bd46.gif

捕获到了若干个 ICMP 数据包,其中,第 4 个数据包的源 IP 地址为 192.168.59.134,目标 IP 地址为 192.168.59.135,是主机 A 向主机 B 发送的 ICMP 请求包;第 6 个数据包的源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.134,Info 列显示的 Source Quench 表示源站抑制,说明该数据包为伪造的源站抑制 ICMP 数据包。
4) 选择第 6 个数据包,查看包信息,如图所示。

0f0df1ae8f0364452239978b016f2e84.gif

在 Internet Control Message Protocol 部分中,Type 值为 4,Code 值为 0,说明该数据包是源站抑制 ICMP 数据包。

伪造重定向ICMP数据包:

当路由收到 IP 数据报,发现数据报的目的地址在路由表上却不存在时,它发送 ICMP 重定向报文给源发送方,提醒它接收的地址不存在,需要重新发送给其他地址进行查找。
在重定向 ICMP 报文中,类型值为 5,代码值为 0。
伪造重定向 ICMP 数据包需要使用 netwox 工具中编号为 86 的模块。
【实例】已知主机 A 的 IP 地址为 192.168.59.132,netwox 工具所在主机 IP 地址为 192.168.59.135。基于 netwox 所在主机向主机 A 实施攻击。为了不让目标主机发现攻击的来源,伪造数据包的源 IP 地址为 192.168.59.136,将目标主机的网关修改为网段中的其他主机,使目标主机发送的数据包重定向到该主机上。
具体步骤如下:
1) 查看目标主机A的网关。在目标主机 A 上,向 www.qq.com (http://www.qq.com) 发送 ping 请求。通过捕获数据包,查看网关信息,如图所示。

caaf2d0fd2d1693c60d392c3283da862.gif

图中第 2 帧和第 3 帧为 DNS 协议查询数据包,是通过网关查询 www.qq.com (http://www.qq.com) 主机的 IP 地址信息。从中可以判断,目标主机的网关为 192.168.59.2。
2) 向目标主机发送重定向数据包,设置源 IP 地址为 192.168.59.136,将目标主机发送的数据包重定向到主机 192.168.59.131 上,执行命令如下:

root@daxueba:~# netwox 86 -g 192.168.59.131 -c 1 -i 192.168.59.136

执行命令没有任何输出信息。
3) 在目标主机上向 www.qq.com (http://www.qq.com) 发送 ping 请求,执行命令如下:

root@daxueba:~# ping www.qq.com

输出信息如下:

PING https.qq.com (125.39.52.26) 56(84) bytes of data.
64 bytes from no-data (125.39.52.26): icmp_seq=1 ttl=128 time=25.6 ms
From localhost (192.168.59.136): icmp_seq=1 Redirect Host(New nexthop:
localhost (192.168.59.131))
From localhost (192.168.59.136): icmp_seq=2 Redirect Host(New nexthop:
localhost (192.168.59.131))
64 bytes from no-data (125.39.52.26): icmp_seq=2 ttl=128 time=25.2 ms
From localhost (192.168.59.136): icmp_seq=3 Redirect Host(New nexthop:
localhost (192.168.59.131))
64 bytes from no-data (125.39.52.26): icmp_seq=3 ttl=128 time=27.1 ms
64 bytes from no-data (125.39.52.26): icmp_seq=4 ttl=128 time=25.5 ms
From localhost (192.168.59.136): icmp_seq=4 Redirect Host(New nexthop:
localhost (192.168.59.131))

上述输出信息中,64 bytes from no-data(125.39.52.26):icmp_seq=1 ttl=128 time=25.6 ms 表示成功向目标 www.qq.com (http://www.qq.com) 发送 ping 请求;From localhost(192.168.59.136):icmp_seq=1 Redirect Host(New nexthop:localhost(192.168.59.131)) 表示伪造的重定向 ICMP 数据包,源 IP 地址为 192.168.59.136,Redirect Host 表示目标主机已经重定向,重定向到了主机 192.168.59.131 上。
4) 在目标主机上捕获数据包,验证重定向的数据包,如图所示。

e81698811dab3fb33caf456ca31ba446.gif

其中,第 11 帧的源 IP 地址为 192.168.59.136(设置的源 IP 地址),目标 IP 地址为 192.168.59.132(设置的目标 IP 地址),Info 列的 Redirect(Redirect for host) 表示该数据包是一个重定向数据包。
在 Internet Control Message Protocol 部分中,Type 值为 5,Code 值为 1,说明该数据包是重定向的数据包;Gateway address:192.168.59.131 表示该主机的网关被重新定向到了 192.168.59.131。
5) 选择第 13 帧,查看网关的重定向信息,如图所示。

80b9d7afcf3611c1ebd8cc702a7bc692.gif

第 13 帧的源 IP 地址为 192.168.59.136(设置的源 IP 地址),目标 IP 地址为 192.168.59.2(目标主机 A 的网关)。该数据包也是一个重定向的数据包。
在 Internet Control Message Protocol 部分中,Gateway address:192.168.59.131 表示目标主机 A 的网关被修改为了 192.168.59.131。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值