【Wireshark 系列】泪滴攻击分析

Wireshark

针对 IP 协议的攻击方法,主要有伪造 IP 地址和发送畸形数据包两种方式。
泪滴攻击就属于发送畸形数据包这种方式,它的设计思路巧妙地利用了 IP 协议里面的缺陷,因此成为了网络安全里面的一个经典案例。
这种攻击的实现原理是向目标主机发送异常的数据包碎片,使得 IP 数据包碎片在重组的过程中有重合的部分,从而导致目标系统无法对其进行重组,进一步导致系统崩溃而停止服务的恶性攻击。

这篇内容非常非常简单 😅

IPv4 报文分析

考虑到这种攻击是建立在 IP 协议上,我们先来简单地了解一下 IP 协议的几个重要内容,包括 IP 协议数据包的格式、分片方式以及存活时间(TTL)。

IP 协议格式

image-20200702211114219

在数据包信息面板中查看它的详细信息,这个数据包各部分如下。
(1)版本——占 4 位,指 IP 协议的版本目前的 IP 协议版本号为 4(即 IPv4)。
(2)首部长度——占 4 位,这里的值为 20Bytes。
(3)总长度的是 56 字节。
(4)标识(identification)——占 16 位,它是一个计数器,用来产生数据包的标识。
(5)片偏移(Flags, 16 位)——较长的分组在分片后某片在原分组中的相对位置,片偏移以8 个字节为偏移单位。
(6)生存时间(8 位)——记为 TTL(Time To Live),表示数据包在网络中可通过的路由器数的最大值。
(7)协议(8 位)字段——指出此数据包携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理进程。
(8)源 IP 地址,表示数据包从哪里发出。
(9)目的 IP 地址,表示数据包将要发向哪里。

其中我们比较关心的是 Flags、TTL、Src、Dst

IP 分片

我们知道之所以要对 IP 数据包进行分片,是因为存在 MTU(最大传输单元)
由于以太网传输电气方面的限制,以太网帧的大小都有限制每个以太网帧最小也要 64 Bytes,最大不能超过 1518 Bytes。
刨去以太网帧的帧头(DMAC 6 Bytes + SMAC 6 Bytes+Type 2 bytes)14 Bytes 和帧尾 CRC 校验部分 4 Bytes(这个部分有时候也被称作 FCS),那么剩下承载上层协议的地方也就是 Data 域最大就只能有 1500 Bytes,这个值我们就把它称之为 MTU。这也就是我们几乎所有设备的 MTU 值都为 1500 字节的原因。
所以当我们要传输的信息大小超过 1500 字节的时候,就需要分片。

IP 包的 Flags

由同一个信息拆开的报文,他们的标识 identification 是一样的。
比如这里的第 8、9 报文的标志是一样的

drop002

Flags 前两位好像没什么用,第三位 More fragment,如果是1,表示后面还有,如果为0,表示为最后一个数据包。后面 13 位 Fragment offset 表示偏移量。
以 ping.pcapng 为例:
第二个数据包的偏移量为第一个数据包的数据长度
(数据长度=整个包的长度-以太网帧头-IP帧头)
drop004

1514 - 14 - 20 = 1480 bytes

如果忘记帧头大小,可以点击帧,然后在状态栏查看:

drop005

第二个包的偏移量:

后面几个包也是类似的。

泪滴攻击

泪滴攻击原理

泪滴攻击是基于数据分片传送进行的攻击手段。
在 IP 报头中有一个偏移字段和一个分片标志(MF, More fragments),如果 MF 标志设置为 1,则表明这个 IP 包是一个大 IP 包的片断,其中偏移字段指出了这个片断在整个 IP 包中的位置。例如,对一个 4200Bytes 的 IP包进行分片(MTU 为 1480),则 3 个片断中偏移字段的值依次为:0、1480、2960。这样接收端就可以根据这些信息成功的组装该 IP 包。而如果一个攻击者打破这种正常情况,把偏移字段设置成不正确的值,即可能出现重合或断开的情况,就可能导致目标操作系统崩溃。比如,把上述偏移设置为 0、1000、2000。
图中阴影部分的就是两个数据包有重合的地方,目标设备在接收到这种分片之后就无法重新组合成一个数据包,这就是所谓的泪滴攻击。

image-20200702211747039

这种攻击方式在以前曾经给计算机用户带来了很大的困扰,但是对如今的操作系统基本无效,只是有时攻击者会将其与泛洪相结合来作为一种攻击手段。

分析泪滴攻击

teardrop.pcap

概览

这个数据包看起来没有特别明显问题,但是点到第9个包的时候,就能看到很明显的问题:
drop001

它伪造了 Length,和长度相关的,会想到是泪滴攻击。

分析

查看到它的 Fragment offset: 24
而我们查看 8 的数据包的数据长度:36

确定是泪滴攻击。
结束。

是不是有点意犹未尽 😅

------ The end ------

本文标题:【Wireshark 系列】泪滴攻击分析

文章作者:Andy Wu

发布时间:2020年07月02日 - 21:07

最后更新:2021年01月04日 - 10:01

原始链接:https://zer0-nu1l.github.io/2020/07/02/%E3%80%90Wireshark%20%E7%B3%BB%E5%88%97%E3%80%91%E6%B3%AA%E6%BB%B4%E6%94%BB%E5%87%BB%E5%88%86%E6%9E%90/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。