您的位置:首页 > 其它

基于IP分片的攻击方法!

2009-01-09 14:25 288 查看
IP分片是在网络上传输IP报文时常采用的一种技术手段,但是其中存在一些安全隐患。Ping of Death, teardrop等攻击可能导致某些系统在重组IP分片的过程中宕机或者重新启动。最近,一些IP分片攻击除了用于进行拒绝服务攻击之外,还经常用于躲避防火墙或者网络入侵检测系统的一种手段。部分路由器或者基于网络的入侵检测系统(NIDS),由于IP分片重组能力的欠缺,导致无法进行正常的过滤或者检测。在本文中将从 IP分片的基本概念介绍入手,详细探讨基于IP分片的攻击和迂回入侵检测系统所采用的一些手段。 IP分片的理解 IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组。这一过程称为分片( fragmentation)。 IP 分片(Fragmentation)发生在要传输的IP报文大小超过最大传输单位MTU(Maximum TransmissionUnit)的情况。比如说,在以太网(Ethernet)环境中可传输最大IP报文大小(MTU)为1500字节。如果要传输的报文大小超过1500字节,则需要分片之后进行传输。由此可以看出,IP分片在网络环境中是经常发生的事件。但是,如果经过人为的恶意操作的分片,将会导致拒绝服务攻击或者迂回路由器、防火墙或者网络入侵检测系统(NIDS)的一种攻击手段。 为到达目标主机之后能够正常重组,各分片报文具有如下信息: * 各IP分片基于IP分片识别号进行重组,识别号相同的重组为相同的IP报文。IP分片识别号长度为16位,叫做“IPidentification number”或者“fragment ID”。 * 各分片具有从原始报文进行分片之前的分片偏移量以确定其位置。 * 各分片具有分片数据长度,其中20字节IP包头不包含在该数据长度中。即,传输1500字节的数据时,实际数据长度为1480(1500-20)字节。 * 当每个分片之后还存在后续的分片时,该分片的ME(More Fragment)标志位为1。 为了更加深入地了解IP分片原理,下面观察一下4,000字节的 ICMP 数据传输时的分片情况。 首先发送4000字节的 ICMP数据。(通常 ping 报文传输大小为56字节的ICMP报文。为了测试,我们利用 -s 选项发送4000字节的 ICMP报文以便发生分片。) [root@linux /root]#ping -s 4000 192.168.0.25PING 192.168.0.25 (192.168.0.25): 4000 data bytes4008 bytes from 192.168.0.25: icmp_seq=0ttl=254 time=20.7 ms4008 bytes from 192.168.0.25: icmp_seq=1ttl=254 time=20.1 ms 利用 tcpdump 进行抓包分析结果如下。 20:55:56.548630 linux.test.com >test.com.cn: (frag 30338:1048@2960)20:55:56.558095 linux.test.com >test.com.cn: (frag 30338:1480@1480+)20:55:56.565466 linux.test.com >test.com.cn: icmp: echo request (frag30338:1480@0+) 传输之前的数据报文长度为20字节,IP报头+ 8字节,ICMP报头+ 4000字节,ICMP之和为4028字节。由于数据长度超过以太网的MTU 1500字节,因此必须进行分片传输。上图是通过以太网传输的3个分片的情况。上一篇《基于IP分片的攻击方法(一)》讲了IP分片的理解。本文就通过Tcpdump进行监听并分析分片的整个过程和基于分片的攻击技术做讨论。 下面通过Tcpdump进行监听并分析分片的整个过程。 首先第一个分片中包含20字节的IP报头和8字节的ICMP报头及1472(=1500-20-8)字节的 ICMP数据。 其中IP 报头中包含如下内容。 Protocol = ICMPFragment ID = 30338 More Fragments Flag = 1 Fragment Offset = 0 Data Length = 1480 下面由tcpdump监听到的分片内容中,30338代表fragment ID。1480代表数据长度,0代表分片偏移量,+代表MF标志位为 1。 20:55:56.565466 linux.test.com >test.com.cn: icmp: echo request (frag 30338:1480@0+) IP 报头中封装的数据可能为TCP、UDP或者ICMP等IP协议数据。在这里发送的是ICMP报文,通过 tcpdump 中监听到的 ICMP报头信息中可以看出该报文为 ICMP echo request报文。 第二个分片由20字节的IP报头和1480字节的ICMP数据组成。所有的分片中都包含20字节的IP报头,第二个分片的IP报头中包含如下信息。 Protocol = ICMPFragment ID = 30338 More Fragments Flag = 1 Fragment Offset = 1480 Data Length = 1480 可以看出该分片的偏移量为1480,但是不包含ICMP报头,因此无法获知ICMP报文类型。 从tcpdump监听到的数据中可以看出,除了第一个分片中包含"ICMPecho request"报文类型之外,后续的分片中看不到相应的报文类型。对于TCP及UDP数据也存在类似的情况。只有第一个分片中包含TCP、UDP及 ICMP报头,因此对于数据包过滤设备来说,可能只阻断第一个分片,因此需要根据分片 ID来维持各会话的状态。智能的包过滤系统可以阻断含有相同分片识别号的所有数据包。 最后一个分片由20字节的IP报头和剩余的ICMP数据组成。相应的IP报头中包含如下信息。 Protocol = ICMPFragment ID = 30338 More Fragments Flag = 0 Fragment Offset = 2960 Data Length = 1048 因为不存在后续的分片,因此MF标志位为0。 我们观察了一下4000字节的ICMP数据传输时,分片的整个过程。 基于分片的攻击技术 如上所述,IP报文分片是一个正常的过程,但是一些攻击者恰恰利用分片过程中的一些漏洞,迂回防火墙或者入侵检测系统进行各种攻击。 Tiny fragment 攻击 所谓Tinyfragment攻击是指通过恶意操作,发送极小的分片来绕过包过滤系统或者入侵检测系统的一种攻击手段。 攻击者通过恶意操作,可将TCP报头(通常为20字节)分布在2个分片中,这样一来,目的端口号可以包含在第二个分片中。 对于包过滤设备或者入侵检测系统来说,首先通过判断目的端口号来采取允许/禁止措施。但是由于通过恶意分片使目的端口号位于第二个分片中,因此包过滤设备通过判断第一个分片,决定后续的分片是否允许通过。但是这些分片在目标主机上进行重组之后将形成各种攻击。通过这种方法可以迂回一些入侵检测系统及一些安全过滤系统。目前一些智能的包过滤设备直接丢掉报头中未包含端口信息的分片。 通过大家熟知的nmap工具也可以进行一定的Tiny fragment攻击。通过nmap的-f选项可以将TCP报头分在多个小碎片中。 [root@linux /root]# nmap -f -sS -p 23192.168.0.25 Starting nmap V. 2.54BETA1 byfyodor@insecure.org ( www.insecure.org/nmap/ ) Interesting ports on test.com.cn(192.168.0.25): Port State Service 23/tcp open telnet Nmap run completed -- 1 IP address (1 hostup) scanned in 0 seconds 此时通过tcpdump监听的结果如下。 02:57:25.633885 truncated-tcp 16 (frag19350:16@0+) 02:57:25.634375 linux.test.com >test.com.cn: (frag 19350:4@16) 02:57:25.635071 test.com.cn.telnet >linux.test.com.34326: - S1348389859:1348389859(0) ack 3078700240 win 32696 (DF) 02:57:25.639159 linux.test.com.34326 >test.com.cn.telnet: - R3078700240:3078700240(0)win 0 可以看出通过nmap成功执行了TCP SYN扫描。但是第一个分片大小为16字节,小于TCP报头长度20字节,而TCP报头的剩余 4字节包含在第二个分片中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: