1.2 互联网与现代计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。计算机网络的发展已经有几十年的历史,发展到今天,最大也最为大家熟知的计算机网络就是互联网。本节我们简单叙述一下互联网的发展过程、Internet的分层结构、Internet协议簇的主要协议简介、Internet协议簇的安全缺陷等。
1.2.1 Internet的发展简史
从某种意义上说,Internet是美苏冷战的产物。20世纪60年代初,在美苏冷战最严重的时候,美国国防部提出需要构建一套在遭受苏联第一次核打击的情况下仍能保持正常通讯的指挥系统。为此,美国国防部高级研究项目署(Advanced Research Projects Agency, ARPA)就开始投资支持一些大学和研究机构进行分布式的网络互连的研究,正是这一研究产生了TCP/IP协议簇,并因此使全球互连成为可能。
1969年12月,第一个分组交换网ARPANET(当时仅4个结点)投入运行,从此计算机网络的发展进入了一个崭新的纪元。在以后的几年里,ARPANET互连的结点每年都以指数增长的速度在发展。ARPA作为分组交换网络研究的重要资助机构,以著名的ARPANET为代表,主导了许多分组交换的思想。ARPANET本身是使用传统的点到点专用租用线路来互连的,ARPA也资助研究在无线网络和卫星通信信道上进行分组交换。事实上,网络硬件技术的多样化也促使ARPA开始资助网络互连的研究,并推动了网际互连的发展。
20世纪70年代中期,ARPA开始了互联网技术方向的研究,并着手设计有关的互联协议,即现在的TCP/IP。TCP/IP设计的初衷是要能互连来自不同厂家的产品,并能运行在不同类型的介质和数据链路上,此外,它还必须能将被互连的各种不同的网络统一到一个“唯一”的互联网中,其中的所有用户都能彼此互相访问各种通用的资源。更进一步地,赞助研究TCP/IP的学术机构、军方和政府部门还希望TCP/IP具有在不中断网络其他部分所提供的服务的基础上随时加入新网络的能力。
正是这些需求构成了TCP/IP的体系结构。可移植性和介质技术的独立性的要求自然使这种体系结构具有分层性,其中一层用于为数据选择路径和数据的转发。受ARPANET网络分组交换模型的鼓励和启发,TCP/IP的设计者也决定采用分组交换的技术,即将来自上层的数据分成小片,并对每一个数据分组分别选择路由,然后进行转发。另一层则包含保证可靠数据传输的有关功能,当然,这些功能只在源和目的主机中实现。
到1979年左右,TCP/IP基本设计完成,并很快得到实现。与此同时,由于一大批的研究人员都在努力致力于TCP/IP的研究,为了协调他们的工作,ARPA出面组成了一个非正式的委员会来协调和引导Internet协议和体系结构的设计。这个工作组当时被称为Internet控制和配置委员会(Internet Control and Configuration Board, ICCB),定期举行会议。1983年ICCB被重新组织和命名为Internet体系结构委员会(Internet Architecture Board, IAB)。
1983年1月,当时的美国国防部要求所有连接到远程网的计算机都使用TCP/IP,并要求所有想与ARPANET互连的网络全部采用TCP/IP。至此,彻底完成了从ARPANET到互联网,到TCP/IP技术的转变,全球互联网从此拉开序幕。
为鼓励大学的研究人员采纳和使用新的协议,ARPA把价格压到最低限度。那时,许多大学的计算机科学系都运行加州伯克利大学的伯克利软件发布BSD的一个UNIX版本,即通常所说的BSD UNIX。通过资助BBN(Bolt, Beranek & Newman)公司将TCP/IP实现到UNIX中,以及投资给加州伯克利大学,将协议集成到它的软件发布,而运行该软件系统的主机通过TCP/IP能够很容易地接入网络,ARPA很快就覆盖了90%以上的大学计算机科学系。
TCP/IP的成功,鼓舞了ARPA及TCP/IP的研究者和使用者,也吸引了更多的投资者,各大小公司以及更多研究者的加入壮大了TCP/IP的研究队伍,使TCP/IP的研究更加深入和完善。同时,围绕着TCP/IP,一大批网络应用及相应的协议标准相继问世,进一步巩固了TCP/IP的地位。
80年代中期,为了满足各大学及政府机构促进研究工作的迫切要求,美国国家科学基金会(NSF)在全美国建立了6个超级计算机中心,包括位于新泽西州普林斯顿的John von Neuman国家超级计算机中心、位于加州大学的圣地亚哥超级计算机中心、位于伊利诺伊大学的国家超级计算应用中心、位于康奈尔大学的康奈尔国家超级计算机研究室、由西屋电气公司,卡内基·梅隆大学和匹兹堡大学联合运作的匹兹堡超级计算机中心、美国国立大气研究中心的科学计算分部等。1986年7月,NSF资助了一个直接连接这些中心的主干网络,并且允许研究人员对外部网络进行访问,以使他们能够共享研究成果并查找信息,这就是NSFNET的雏形。最初,NSFNET采用的是56kbit/s的线路,1988年7月升级为1.5Mbit/s线路,并且连接了13个主干节点。从1986年到1991年,NSFNET的网络规模迅速扩大,与其他外部网络连接的数量也急剧增加,奠定了其作为Internet的基础。
20世纪80年代,Internet的扩张不仅仅带来了量的改变,同时也带来某些质的变化。由于众多学术团体、企业研究机构,甚至个人用户的接入,Internet的使用者不再限于纯计算机专业人员。基于Internet的网络通信不仅仅局限于专业人士用于共享超级计算机的运算能力,更成为人与人之间的交流与通信工具。
1991年9月位于瑞士的CERN研究中心的Tim Berners-Lee发明了World Wide Web(WWW)。WWW技术的出现带来了Internet的巨大发展,也促使美国有关当局下决心于1994年4月将Internet转入商业化运营,从此Internet进入了高速增长的时期。
1.2.2 Internet分层结构
计算机网络系统是一个十分复杂的系统,它将一个复杂系统分解为若干个容易处理的子系统,然后分而治之,这种结构化设计方法是工程设计中常见的手段。分层就是系统分解的最好方法之一。事实上,分层次的体系结构是计算机网络中最基本的概念。
在一般的分层结构中,下层向上层提供服务,同时又利用其下一层向它提供的服务。层次结构具有以下要点:
(1)在物理介质上进行的是实实在在的物理通信,其他各对等实体间进行的都是逻辑通信;
(2)每个对等实体之间都有各自的对等通信协议,对等层的逻辑通信必须遵循该层的协议;
(3)第n层的逻辑通信是通过第n-1层在其服务访问点提供的服务以及第n-1层的通信来实现的。
层次结构划分需要遵循如下的原则:
(1)每层的功能应该是明确的,并且是相互独立的。当某一层的具体实现方法发生变化时,只要保持上、下层的接口不变,就不会对邻居层产生影响;
(2)层间接口必须清晰,跨越接口的信息量应尽可能少;
(3)层数应当适中。如果层数太少,会造成某些层的协议过于复杂(早期TCP/IP体系结构中将网络控制协议NCP一分为二,拆为TCP和IP,就是一个很好的例子);而如果层数太多,则会导致体系结构过于复杂,使得描述和实现各层功能变得困难。
因此,层次化的网络体系结构应具有以下的特点:
(1)以功能作为划分层次的基础;
(2)第n层的实体在实现自身定义的功能时,只能使用第n-1层提供的服务;
(3)而第n层在向第n+1层提供服务时,该服务不仅包含第n层本身的功能,还包含由下层(即n-1层及以下层次)服务提供的功能;
(4)仅在相邻层间有接口(服务访问点),且所提供服务的具体实现细节对上一层屏蔽。
除了上面谈及的原则和特点,Internet体系结构及TCP/IP协议簇(简称TCP/IP体系结构)中使用的特定分层模型还源于其资助者ARPA的需求。因为已经有多种局域的网络通信技术发展起来了,IP要做的是将各种不同的网络类型无缝地连接成一个单一的互联网,而TCP则提供可靠的数据传输。
事实上,后来的ISO/OSI参考模型很大程度上受了TCP/IP体系结构的影响,而OSI的分层模型和OSI的术语已经成了数据通信领域的标准的一部分。在ISO/OSI参考模型中,将通信会话需要的各种进程划分成7个相对独立的功能层次,自下而上依次为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。关于ISO/OSI参考模型的更详细论述,读者可参考和计算机网络相关的读物。
在TCP/IP体系结构中,通信实体逻辑上被分成4个层次。图1-5所示为TCP/IP体系结构和OSI参考模型的对应关系。它把OSI参考模型中的第一层(物理层)和第二层(数据链路层)统称为低层或网络接口层;网络层和传输层与OSI模型相对应;应用层对应于OSI模型中的会话层、表示层和应用层。
图1-5 TCP/IP体系结构和OSI参考模型的对应关系
1.网络接口层
网络接口层负责处理设备驱动、介质访问控制、物理连接以及物理信号等,它们将数据封装成称为帧或分组的单元,并将数据从本地系统的一个接口发送到连在同一物理网段上的目的系统的接口上。
2.网络层(或IP层)
IP层协议用来在两个主机之间运载数据,数据也许只穿过一个网络,也有可能在整个互联网中穿越多个网络,在IP层数据是以数据报为单位被载运的。IP层协议被称为是无连接的,因为每个数据报都是单独选择路由,而且IP也不保证数据传输的可靠性和顺序性。IP层协议对应于OSI中的网络层,即第三层,事实上,OSI提供一种非常类似于IP的无连接网络服务,当然OSI还定义了面向连接的网络服务。
IP层和低层协议的边界是非常重要的。因为如果能很好地实现这个边界功能,新的网络接口类型和介质就能很容易地加到一个主机上,并为IP所用;而且IP也可以和其他协议共享一个网络接口和介质,如TCP/IP和其他非IP流量都可以共享单个以太网接口;又或者IPv4和IPv6流量也可以很好地共享单个以太网接口。
3.传输层
TCP/IP体系结构的传输层对应于OSI参考模型的传输层,包括两个主要的传输协议,即TCP和UDP。TCP向应用层提供面向连接的可靠数据传输服务,在TCP中定义了用于确保数据无误、完整和有序的机制。TCP的协议数据单元被称为数据段(Segments),在发送数据时,TCP把数据段交给IP,由IP为其选择合适的路由并负责转发,当TCP接收到来自IP的数据时,它首先决定数据是属于哪个应用进程的,然后按照顺序将数据递交给对应的进程。尽管面向连接的OSI传输层协议也保证数据的可靠传输,但是它并不直接和应用程序打交道,因为其中还有其他的协议层次。
为了满足某些特定应用的需要,TCP/IP体系结构在提供面向连接的传输服务的同时,也提供了无连接的数据报服务,即UDP, UDP用于彼此发送一些孤立的报文。UDP的协议数据单元称为用户数据报,UDP将数据封装成用户数据报以后传给IP,由于UDP是无连接的数据通信服务,因此经常用于简单的数据库查询等。
4.应用层
TCP/IP协议簇包括了大量标准的应用服务,如文件传输协议FTP,简单邮件传输服务SMTP,远程虚终端服务TELNET,域名和目录服务DNS和简单网络管理协议SNMP等。这些服务在OSI当中也有定义,而且从功能上来说还更强更全面,如OSI的邮件服务就有许多吸引人的特性,但是因为OSI的功能繁复,以至于没有太多用户支持和实现它。
1.2.3 TCP/IP协议簇
如图1-6所示,TCP/IP协议簇包含非常丰富的协议,这里只选择部分与网络安全漏洞和攻击相关的协议进行介绍,更详细的内容建议读者参考与计算机网络相关的其他读物。
图1-6 TCP/IP协议簇
1.IP
IP是Internet最基本的协议,几乎所有其他的TCP/IP功能都是构建于IP层之上的。IP是基于分组的无连接协议,其对每一个数据分组都是单独选择路由并进行转发的,因此IP的每一个数据报都由IP数据报头和待发送的数据本身组成,IP报头包含完整的地址信息以及其他协助分组处理的信息。IP不会确定分组是否到达目的地,是否按顺序到达目的地,当然也不会在分组没有到达目的地时采取任何措施。IP不会对其携带的数据内容进行校验而只校验IP头,因此,IP的传输是不可靠的,它不对上层数据是否送达以及是否正确的送达做出承诺。
下面我们来具体地讨论一下IP数据报的格式。IP数据报的报头由两部分组成,包括一个20字节的固定部分和一个可变长度的任选部分。IP数据报头的具体格式如图1-7所示。
图1-7 IP数据报头的格式
版本字段用于记录该数据报属于哪个IP版本。如果当前运行的IP版本是IPv4,则每个数据报的版本字段均为4;如果运行的IP是IPv6,则版本字段为6。
报头长度字段用于指示IP数据报头的长度。因为IP数据报的报头可以有任选字段,因此其报头长度是不固定的,需要有这样一个字段用以告知报头长度,以便接收方了解数据部分从哪里开始。需要注意的是,该字段包含32bit(即4字节)。因此,如果报头没有任选项,则IPv4数据报的IHL字段的值应该为5(即20字节的固定报头),这也是该字段的最小值。
服务类型字段允许主机告诉子网它需要什么样的服务类型,即定义IP数据报的处理方法。服务类型字段包含8bit,各比特位的具体含义如表1-1所示。
表1-1 服务类型字段各比特值的具体含义
总长度字段表示该数据报的总长度,包括数据报头和数据本身。注意和IHL字段的区别:该字段是以字节为单位衡量的。该字段包含16bit,因此可表示的最大值是65535。
接下来的3个字段和IP数据报的分段与重组有关。标识、标志位和分段位移字段在IP数据报的分段与重组中起着举足轻重的作用,标识字段有16bit,其中的值用于帮助目的主机识别不同的数据报分片是否属于同一个数据流。标志位字段为3bit,具体含义如表1-2所示。
表1-2 标志位字段3个比特的具体含义
分段位移字段用于指示一个分片在其所属的数据报中所处的位置。IP规定,除了最后一个分片,所有的分片都必须是8字节的整数倍,也就是说8字节是分片的基本单位。由于该字段占用13个比特位,因此可表示的最大值为8192,也就是说,理论上可将一个数据报分成8192个基本分片,这和IP数据报的最大长度65535是吻合的。
TTL字段是一个计数器,用于限制分组在网络中的生存时间。该字段占用8bit,可表示的最大值为255。该字段的初始值由发送方设置,在数据报每经过一个路由器时,其值减1,当一个数据报的TTL值被减到0,而数据报还未到达目的地时,它将被丢弃。
协议字段用于表示网络服务的用户。TCP和UDP是两个重要的网络服务用户,ICMP也基于IP进行转发。具体情况为TCP协议号为6, UDP是17, ICMP协议号为1。
校验和字段只用于校验IP数据报头,可用于由于路由器内存出错等因素引起的位出错检测。该字段的长度为16bit。源地址和目的地址字段用于指示源主机和目的主机的IP地址,IPv4定义其地址为32bit,而IPv6定义其地址为128bit。
IP规定IP数据报头最长可以定义40字节的任选字段,这些字段的取舍是由通信软件来决定的。目前可用的选项包括限制性源路由、松散源路由、记录路由和时间戳等。
2.TCP
TCP是传输层的重要协议,是面向连接的协议。TCP操作涉及3个状态,即建立连接、数据传送和终止连接。
TCP采用三次握手过程来建立连接。一般情况下,当一个客户端需要和某个服务器建立通信的时候,它首先向该服务器发送一个SYN控制报文;随后服务器回应一个SYN/ACK报文;最后客户端再发送一个ACK报文,这样就完成了三次握手过程,并建立了一个正常的通信连接。特殊情况下,由服务器端打开一个套接字然后监听来自另一方的连接,这种情况也是存在的,这就是所谓的被动打开连接。
在TCP连接建立以后就进入了数据传送状态。在数据传送阶段需要解决面向连接的传输协议涉及的许多基本功能特性,包括可靠性、健壮性、安全性和流量(拥塞)控制等。事实上,在TCP连接建立的过程中,两个主机的TCP实体间就要交换初始序列号ISN,这些序列号用于标识字节流中的数据,同时也是对应用层的数据字节进行计数的整数。
在数据传送状态,TCP通过校验和字段来保障报文的完整性和正确性,但TCP的16bit校验和字段的校验能力相对是较弱的,具有高出错率的数据链路层需要额外的连接错误检测和纠正能力。TCP也通过拥塞控制(或称流量控制)来提升其通信的可靠性。TCP通信双方通过对接收数据的确认或不予确认来显式地表示通信双方之间的网络状态;基于对网络状态的感知,TCP使用超时机制、超时重传机制、滑动窗口机制、慢启动算法、拥塞避免算法、快速重启和快速恢复算法等机制实现通信的持续性和高可靠性。
当TCP数据通信结束以后,为了及时释放连接所占的系统资源,需及时终止连接。通信的任何一方都可以通过向对方发送FIN控制报文来终止连接,另一方回复以FIN/ACK控制报文,完成终止连接的过程。
最后,我们再简单介绍一下关于TCP端口的概念。TCP用端口号来标识通信双方的应用层实体,也就是说,每个TCP连接的一端都有一个16bit的整数值(端口号)和它们关联。端口号大致分为两类,一类是预留的周知号,另一类是动态(私有)的。周知号作为一种资源,和IP地址一样由互联网号码分配管理权威机构IANA管理。许多常用的应用服务都已经被赋予了固定的周知号,如FTP(21/20)、SMTP(25)、HTTP(80)等。
3.UDP
UDP是传输层的另一个重要协议,近些年来越来越多的应用层服务用UDP进行传输。UDP是无连接的用户数据报文协议,它为网络层以下和应用层以上提供了一个简单的接口,只在IP的数据报服务之上增加了一点功能,即端口的功能和数据校验的功能。UDP只提供数据的不可靠投递,所以本质上是不可靠的数据报协议。
UDP报头字段由4个部分组成:各16bit的源端口和目的端口号用于标识发送和接收的应用进程;长度固定的以字节为单位的长度字段,用以指定UDP数据报的长度;最后是16bit的校验和字段。此外,由于UDP不需要应答,所以源端口是可选的(如果不用,该字段被置为0);校验和字段也是可选的。
由于缺乏可靠性,UDP应用一般必须允许一定量的丢包、出错和重复。事实上大多数UDP应用正是为了效率和实时性而选择牺牲一点可靠性,如流媒体、网络游戏、VoIP等。
由于缺乏拥塞避免和控制机制,需要基于网络的机制来抑制因高速UDP流量负荷而导致的拥塞崩溃效应。基于包队列和丢弃技术的路由器等网络基础设施是此类抑制UDP过大通信量的有效工具。
4.ICMP
IP软件通过安排路由器转发数据报来提供一种无连接数据报投递服务,数据报从一个路由器传送到另一个路由器上,直到它到达某个路由器并被直接投递到最终目的地。在这个过程中,每个路由器都是自主地进行选路或投递到达的数据报,并未与发送方协调。这种协议在假设所有主机和路由器都运行正常并且同意所选路由的情况下工作得很好,但情况并非总是如此。此时,路由器应该通知发送方采取相应的措施来避免或纠正问题。互联网控制报文协议ICMP正是为了让网络中的路由器报告错误或提供有关意外情况的信息而设计的。ICMP是IP的一部分,任何实现IP的系统也必须同时实现它。
ICMP允许路由器向其他路由器或主机发送差错或控制报文。ICMP报文是放在一个IP数据报的数据部分中通过网络的。需要注意的是,尽管ICMP报文是用IP数据报来封装和发送的,我们也不能将其视为高层协议,它只是IP的一个必要部分。
ICMP定义了十几种具有不同用途的报文类型。尽管每种报文类型有自己不同的格式,但它们都以相同的3个字段开始:一个8bit整数的报文类型字段用来标识不同的报文;一个8bit整数的代码字段提供有关报文类型的进一步信息,以及一个16bit的校验和字段。此外,报告差错的ICMP报文总是包括产生问题的数据报的首部及其开始的64bit数据。这样做的原因是,让接收方能够更精确地判断是哪个协议及哪个应用程序对该数据报负责。因为在TCP/IP协议族的高层协议中,最重要的信息基本上都包含在前64bit的编码中。ICMP类型字段定义了报文的类型、格式及意义,主要类型如表1-3所示。
表1-3 ICMP报文类型
5.ARP/RARP
地址解析协议ARP用于将IP地址转换为相应的物理网络地址,而反向地址解析协议RARP则用于将物理网络地址转换为IP地址。为了简化IP本身,和ICMP的设置一样,ARP/RARP也被设计为独立但又和IP协议有密切关系的协议组。
在进行报文发送时,如果源主机网络层给的报文只有IP地址,而没有对应的以太网地址,则网络层在本地物理网络上广播ARP请求以获取目的主机信息,而拥有指定IP地址的目的主机必须以其以太网地址来回答该ARP的请求。这样源主机就可以收到目的主机的48bit以太网地址,并将该地址放入相应的地址映射缓存表中。下一次源主机对同一目的主机的访问就可以直接引用地址映射表的内容。ARP使主机可以找出同一物理网络中任何一台主机的物理地址,只需给出目的主机的IP地址即可。
在跨物理网络或者广域网环境下,为了将报文送达另一个网络的主机,数据包需要先定向发送到连接发送方网络的路由器。因此,发送主机首先必须确定路由器的物理地址,然后,由路由器依次将数据发往数据包的最终接收端。除基本的ARP机制外,有时还需在路由器上设置代理ARP,其目的是由IP路由器代替目的主机对发送方ARP请求做出响应。
在某些特殊的情况下,也需要反向地址转换服务,比如早期的无盘工作站的情况。站点初始化以后,只有自己的物理地址而没有IP地址,此时它就可以通过RARP协议,发出带有物理地址的广播请求,以征求自己的IP地址,而RARP服务器将负责回答。这样,无IP地址的站点也可以通过RARP取得自己的IP地址。
1.2.4 Internet协议簇的安全缺陷
TCP/IP体系结构在设计之初就遵循了若干基本原则,开放性和简单性是其中两个重要的原则。这样的原则一方面成就了互联网30年的辉煌,另一方面也给后来的互联网留下了许多安全缺陷和隐患。而且这样的缺陷大多数是TCP/IP协议簇本身所固有的,与具体的实现无关,而这也正是多种网络攻击得以成功的根本原因。本小节我们简单讨论一下TCP/IP协议簇部分主要协议的缺陷。
1.TCP的缺陷
TCP有很多缺陷,TCP序列号的可预测性就是其重要缺陷之一。
为了提高TCP的可靠性和健壮性,TCP把通过连接而传输的数据看成是字节流,用一个32位整数对传送的字节编号。在TCP连接建立的过程中,通信双方会交换初始序列号ISN。攻击者只要向目标主机发送一个连接请求,即可获得上次连接的ISN,再通过多次测量往返传输路径,得到攻击主机到目标主机之间数据包传送的往返时间RTT。已知上次连接的ISN和RTT,很容易就能预测下一次连接的ISN。若攻击者假冒信任主机向目标主机发出TCP连接,并预测到目标主机的TCP序列号,攻击者就能伪造有害数据包,并使之被目标主机接受。这类攻击统称为TCP序列号攻击。
与此类似的另一种情形和TCP协议的三次握手机制相关。假设A为连接请求发起方,B为响应方,三次握手的正常过程应该是这样的:A向B发送一个SYN控制报文;B向A回应一个SYN/ACK控制报文,表明它应答第一个SYN包同时继续握手的过程;然后A再向B应答一个ACK报文,完成连接建立的过程。其间可能的威胁如下:
(1)攻击者监听B方发出的SYN/ACK报文;
(2)攻击者向B方发送RST包,接着发送SYN包,假冒A方向B发起新的连接;
(3)B方响应新连接,并发送连接响应报文SYN/ACK;
(4)攻击者再假冒A方对B方发送ACK包。
这样攻击者就“劫持”了A与B的通信,达到了破坏连接的目的,若攻击者再趁机插入有害数据包,则后果更严重。
2.IP的缺陷
IP是无连接、无状态、无认证的分组转发协议,因此它本身具有很多易被攻击者所利用的缺陷。
(1)IP源地址欺骗。
IP协议在互连的网络之间提供无连接的分组数据传输。TCP/IP协议簇在设计之初假设通信双方是完全可以信任的,因此IP只根据IP报头中的目的地址字段来转发IP分组,不对IP报头中的源地址作任何检查,并且认为IP头中的源地址即为发送该分组的主机的IP地址。这样,许多依靠IP源地址确认的服务将产生问题并且会被非法入侵,此即为IP源地址欺骗攻击。简单地说,就是一台主机设备冒充另外一台主机的IP地址,与其他设备通信,由此导致DDoS攻击泛滥成灾且难以追踪。
(2)数据报分片。
由于IP协议最早的设计动机就是为了实现网际互连,因此,IP分组通常要跨越多个物理网段;由于每个物理网络所支持的最大传输单元MTU是不一样的,因此就需要IP协议支持数据报分片的功能。这样,一个大的IP数据报在传输途中就可以根据所经过的物理网络的限定进行分片,在到达目的地后再进行重组。但是,由于IP是无状态的,IP数据报被分片后也可能不按发送的顺序到达目的地。这样,数据报的分片就有可能被用于绕过访问控制检测(防火墙的检测)和入侵检测。此外,数据报分片还可能被用于攻击那些不能正确处理数据报分片异常的主机,导致拒绝服务[3]。
(3)数据报篡改。
IP没有认证机制,虽然有一个报头校验和字段,但它只是对数据报头计算校验和,且只有16bit,因此报头校验和很容易伪造或者重新计算以使目标主机不会丢弃数据报,因此IP数据报是可以被篡改的。事实上,由于IP没有来源认证,IP报文中的所有内容几乎都可以伪造。与TCP的序列号可预测等缺陷一起,IP伪造被广泛用于会话劫持攻击、中间人攻击和伪造攻击等。
(4)寻址与协议选项信息泄露。
IP规定IP数据报头最长可以定义40字节的任选字段,这些字段的取舍是由通信软件来决定的。目前可用的选项包括限制性/松散源路由、记录路由和时间戳等。事实上,数据报的源路由和记录路由等选项信息连同其源地址、目的地址信息有可能泄露特定网络的部分拓扑信息。而选项中的记录路由和时间戳等信息也可以由攻击者控制,用作网络侦察。
3.ARP/RARP的缺陷
ARP是建立在彼此信任的局域网内所有结点的基础上的,它很高效,但不安全。它是无状态的协议,不会检查自己是否发过请求包,也不管是否是合法的应答。当主机收到一个ARP应答报文后,只要该报文的目标MAC是自己的,都会接受并将应答包里的MAC地址与IP对应的关系替换掉原有的ARP缓存表里的相应信息。这就为ARP欺骗提供了可能,恶意节点可以发布虚假的ARP报文从而影响网内结点的通信,甚至可以做“中间人”截获正常通信节点之间的通信内容。ARP欺骗正是利用了这一点。
ARP缓存表可以被远程更新也是ARP的一个缺陷。由于ARP缺乏验证ARP请求或回应消息来源的机制,当一个主机收到一个删除或修改ARP缓存记录的消息时,由于无法验证消息的真实性,主机往往选择执行该操作。
此外,当一个IP主机要与位于另一个物理网络的IP主机通信时,就需要引入某种ARP代理的技术。ARP代理一般位于互连多个物理网络的网关或者防火墙上,由其代表目标主机回应本地主机的ARP广播请求。ARP代理也存在被利用来进行ARP重定向等缺陷。
RARP也存在和ARP类似的严重缺陷,可用来实现服务器劫持及中间人攻击等。