《[精选]因特网与TCPIP安全37584.pptx》由会员分享,可在线阅读,更多相关《[精选]因特网与TCPIP安全37584.pptx(235页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 因特网与因特网与TCP/IP安全安全 5.1 TCP/IP协议栈协议栈 5.2 互联网地址互联网地址 5.3 协议封装协议封装 5.4 IP协议协议 5.5 TCP协议协议 5.6 UDP协议协议 5.7 ARP/RARP协议协议 5.8 ICMP协议协议 5.9 网络服务的安全性网络服务的安全性 第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 5.1 TCP/IP协议栈协议栈 因特网(Internet)依赖于一组称为TCP/IP的协议组。TCP/IP是一组通信协议集的缩写,它包含了一组互补和合作的协议。所有这
2、些协议共同工作,以便在因特网上传输信息。我们知道,ISO/OSI模型将网络表示为一个垂直的模块(或分层)协议栈,每层完成特定的功能。TCP/IP协议栈只是许多支持ISO/OSI分层模型的协议栈的一种。TCP/IP通常被认为是一个四层协议系统,如图5-1所示。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 ISO/OSI参考模型将网络设计划分成七个功能层,但此模型只起到一个指导作用它本身并不是一个规范。例如,TCP/IP网络只使用ISO/OSI模型的五层。图5-2显示了一个简单的五层网络模型,其中每层都采用了TCP/IP协议。网络层和相应的协议层组成了该模型,数据通过此模型在应
3、用程序和网络硬件之间进行传递。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-2中,有箭头的线表示不同的网络软件和硬件之间可能的通信信道。例如,为了和传输层通信,应用程序必须与用户数据报协议(UDP)或传输控制协议(TCP)模块对话;为了和网络层通信,应用程序必须与互联网控制报文协议(ICMP)或者互联网协议(IP)模块对话。但是,不管数据通过什么路径从应用层到网络层,数据都必须经过IP模块才能到达网络硬件。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-1ISO/OSI模型与TCP/IP协议栈第第5 5章章 因特网与因特网与TCP/IPTCP/
4、IP安全安全 图5-2TCP/IP协议栈各相关协议第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 在TCP/IP协议体系结构中,每层负责不同的网络通信功能:(1)链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其它任何传输媒介)的物理接口细节以及数据帧(Frame)的组装。(2)网络层,有时也称作互联网层,处理分组(Packet)在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP协议、ICMP协议以及IGMP协议(因特网组管理协议)。第第5 5章章 因特网与因特网与TCP/IP
5、TCP/IP安全安全 (3)传输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块(段:Segment)交给下面的网络层、确认接收到的分组报文、设置发送的最后确认分组的超时时钟等。由于传输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报(Datagram)的分组
6、从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必要的可靠性必须由应用层自己负责提供。这两种传输层协议在不同的应用程序中分别有不同的用途,这一点将在后面看到。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 (4)应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:Telnet(远程登录)FTP(文件传输协议)SMTP(简单邮件传输协议)SNMP(简单网络管理协议)第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 5.2 互互 联联 网网 地地 址址互联网上的每个接口必须有一个惟一的互联网地址(也称作I
7、P地址),长32比特。互联网地址并不采用平面形式的地址空间,如1、2、3等,它具有一定的层次结构。五类不同的互联网地址格式如图5-3所示。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-3五类互联网地址第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-4各类IP地址的范围第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 这些32位的地址通常写成四个十进制的数,其中每个整数对应一个字节。这种表示方法称作“点分十进制表示法”(DottedDecimalNotation)。例如,作者的系统就是一个B类地址,它表示为:140.252.13.
8、33。区分各类地址的最简单方法是看它的第一个十进制整数。图5-4列出了各类地址的起止范围,其中第一个十进制整数用加黑字体表示。需要注意的是,多接口主机(例如路由器)具有多个IP地址,其中每个接口都对应一个IP地址。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 5.3 协协 议议 封封 装装当应用程序用TCP/IP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些头部信息(有时还要增加尾部信息),该过程如图5-5所示。TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCPSegment)。IP传给网络接
9、口层的数据单元称作IP分组(IPDatagram)。通过以太网传输的比特流称作帧(Frame)。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-5中帧头和帧尾下面所标注的数字是典型以太网帧头部的字节长度。以太网数据帧的物理特性是其长度必须在461500字节之间。有些TCP/IP协议文献也使用octet这个术语来表示字节。更准确地说,图5-5中IP和网络接口层之间传送的数据单元应该是包(Packet)。包既可以是一个IP数据报,也可以是IP数据报的一个片(Fragment)。我们将在下一节讨论IP数据报分片的详细情况。第第5 5章章 因特网与因特网与TCP/IPTCP/I
10、P安全安全 图5-5在以太网上使用TCP进行数据封装第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 UDP数据与TCP数据基本一致。惟一的不同是UDP传给IP的信息单元称作UDP数据报(UDPDatagram),而且UDP的首部长为8字节。回想前面的图5-2,由于TCP、UDP、ICMP和IGMP都要向IP传送数据,因此IP必须在生成的IP首部中加入某种标识,以表明数据属于哪一层。为此,IP在首部中存入一个长度为8比特的字段,称作协议域。1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。第第5 5章章 因特网与因特网与TCP/IPTCP/I
11、P安全安全 类似地,许多应用程序都可以使用TCP或UDP来传送数据。传输层协议在生成报文首部时要存入一个应用程序的标识符。TCP和UDP都用一个16比特的端口号来表示不同的应用程序。TCP和UDP把源端口号和目的端口号分别存入传输层报文首部中。网络接口分别要发送和接收IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16比特的帧类型域。以下简单介绍TCP/IP中的各协议具备的功能及其工作原理。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 5.4 IP 协协 议议网际协议IP是TCP/IP的核心
12、,也是网络层中最重要的协议。IP层接收由更低层(网络接口层,例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP协议是不可靠的协议,因为IP并没有做任何事情来确认数据包是否按顺序发送或者有没有被破坏。IP数据包中含有发送它的主机的IP地址(源地址)和接收它的主机的IP地址(目的地址)。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 IP数据包的格式如图5-6所示。普通的IP首部字段包含20个字节,除非含有选项部分。分析图5-6中的首部。最高位在左边,记为第0比特;最低位在右边,记为第
13、31比特。四个字节的32比特值以下面的次序传输:首先是07比特,其次是815比特,然后是1623比特,最后是2431比特。这种传输次序称作大字节(BigEndian)顺序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其它形式存储二进制整数的机器,如小字节(LittleEndian)格式,则必须在传输数据之前把首部转换成网络字节序。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-6IP数据包格式及首部中的各字段第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 目前的协议版本号(Version)是4,因此I
14、P有时也称作IPv4。首部长度(HeaderLength)指的是首部以32比特为单位的长度,其中包括任何选项。由于它是一个4比特字段,因此首部最长为60个字节。普通IP数据报(没有任何选择项)字段的值是5。总长度(TotalLength)字段是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据包最长可达65535字节。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 总长度字段是IP首部中必需的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。尽管以太网的最小帧长
15、为46字节(见图5-5),但是IP数据可能会更短,如果没有总长度字段,那么IP层就不知道46字节中有多少是IP数据报的内容。标识(Identifier)字段惟一地标识主机发送的每一份数据报。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 TTL(TimeToLive,生存时间)字段设置了数据报可以经过的最多路由器数。它指定了数据包的生存时间。TTL的初始值由源主机设置(通常为128或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据包就被丢弃,并发送ICMP报文通知源主机。常用的网络工具Traceroute就是利用的该字段。第第5 5章章 因特网与因
16、特网与TCP/IPTCP/IP安全安全 高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP协议包含一个选项,叫作IP源路由选项(SourceRouting),可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而设计的,利用该选项可以欺骗系统,使之放行那些通常是被禁止的网络连接。因此,许多依靠IP源地址进行身份认证的服务将会产生安全问题以至被非法
17、入侵。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 在我们深入讨论各种基于IP的攻击之前,将首先介绍一个很关键的概念欺骗(Spoofing)。也就是说,伪造一个假的源IP地址的包是非常容易的,当另外的主机接收到这个包时,会以为包来自假冒的发送者,这个过程称为欺骗目标机器。使用欺骗技术的原因很多,但是最为重要的要数获得匿名性,通过对包的欺骗,攻击看起来是来自其它地方。同样,当攻击者发现某机器的身份具有访问某些资源的特权时,也会使用欺骗技术。IP协议存在的安全问题不少,下面我们选择一些比较典型的攻击案例来分析其安全性。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全
18、安全 1死亡之ping(pingofdeath)最简单的基于IP的攻击可能要数著名的死亡之ping(pingofdeath),这种攻击主要是由于单个包的长度超过了IP协议规范所规定的包长度。产生这样的包很容易,事实上,许多操作系统都提供了称为ping的网络工具。在WIN98中,开一个DOS窗口,输入ping-l65510the.target.ip.addr就可达到该目的。UNIX系统也有类似情况。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 死亡之ping是如何工作的呢?首先是因为以太网帧长度有限,IP包必须被分片。当一个IP包的长度超过以太网帧的最大尺寸(以太网头部和尾部
19、除外)时,包就会被分片,作为多个帧来发送。接收端的机器提取各个分片,并重组为一个完整的IP包。在正常情况下,IP头包含整个IP包的长度。当一个IP包被分片以后,头只包含各个分片的长度。分片并不包含整个IP包的长度信息,因此IP包一旦被分片,重组后的整个IP包的总的长度只有在所有的分片都接收完毕之后才能确定。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 在IP协议规范中规定了一个IP包的最大尺寸,而大多数的包处理程序又假设包的长度超过这个最大尺寸这种情况是不会出现的。因此,包的重组代码所分配的内存区域也最大不超过这个最大尺寸。这样,超大的包一旦出现,包当中的额外数据就会被写入
20、其它正常内存区域。这很容易导致系统进入非稳定状态,是一种典型的缓存溢出(BufferOverflow)攻击。在防火墙一级对这种攻击进行检测是相当难的,因为每个分片包看起来都很正常。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 由于使用ping工具很容易完成这种攻击,以至于它也成了这种攻击的首选武器,这也是这种攻击名字的由来。当然,还有很多程序都可以做到这一点,因此仅仅阻塞ping的使用并不能够完全解决这个漏洞。预防死亡之ping的最好方法是对操作系统进行补丁,这样,内核将不再对超过规定长度的包进行重组。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 2泪滴
21、(Teardrop)攻击Teardrop攻击同死亡之ping有些类似,在这儿,一个大IP包的各个分片包并非首尾相连,而是存在重叠(Overlap)现象。在图5-7中,分片1的偏移等于0,长度等于15,分片2的偏移为5,这意味着分片2是从分片1的中间位置开始的,即存在10字节的重叠。系统内核将试图消除这种重叠,但是如果存在重叠段的分片包长度小于重叠部分长度(如图5-8所示),内核将无法进行正常处理。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-7正常的两个包重叠处理第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-8分片2没有足够的数据来覆盖重叠区
22、第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 3源路由(SourceRouting)实际中,黑客从来不会直接从自己的机器向目标机器发送一个数据包,这很容易被跟踪。相反,它们会利用其它网络中已经获得非授权使用的机器来进行攻击。这样,对攻击的跟踪将变得困难。另外,通过利用IP协议的某些额外选项可以让黑客的攻击锦上添花,那就是IP源路由选项允许发送者指定包的路由。它有两种形式:第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 (1)严格的(Strict)源路由选项。发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接
23、的网络上,那么它就返回一个“源站路由失败”的ICMP差错报文。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 (2)宽松的(Loose)源站选路。发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其它路由器。源路由选项允许黑客伪装成其它的可信任机器,这使得黑客攻击变得难于跟踪。幸运的是,大多数的主要服务都不使用源路由选项,我们可以使用防火墙来过滤掉任何的源路由选项数据包。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 5.5 TCP 协协 议议 如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向“上”传送到T
24、CP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包含序列号和应答号,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层将它们向下传送到IP层、设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如Telnet、FTP、rlogin、XWindows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但通常使用UDP传送有关单
25、个主机的信息。图5-9所示是TCP首部的数据格式,如果没有任选字段,其长度是20个字节。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-9TCP首部第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 每个TCP段都包含源端和目的端的端口号,用于定位发端和收端的应用进程。这两个值加上IP首部的源IP地址和目的IP地址可以惟一确定一条TCP连接。在TCP首部中有6个标志比特,它们中的多个可同时被设置为1。在此只给出各个比特的功能说明(在随后的章节会有更详细介绍):第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 URG紧急指针有效ACK确认序列
26、号有效PSH接收方应当尽快将这个报文交给应用层RST连接复位SYN同步序列号用来发起一个连接FIN发送端完成发送任务第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 TCP要处理的另外一个问题是当多个服务器同时运行在一个IP地址上时会出现什么问题?许多应用程序使用TCP来提供可靠数据传输。例如同时提供Web服务器、邮件服务器、XWindows服务器等等。所有这些都使用TCP协议来接收其它计算机的连接请求。那么计算机如何确定一个客户想要连接的是什么服务呢?第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 5.5.1端口号IP头包含了目标机器的IP地址,但是包当中没
27、有任何可以表明某个特定应用的信息。由于一个IP地址可以同许多服务相绑定,因此需要额外的头信息。解决方法就是所谓的TCP端口号,TCP端口提供运行在某机器上每个应用服务的地址。当一个应用服务器启动时,它必须告诉机器它所使用的TCP端口号。通过使用TCP端口号可以标识一台机器上的多个目的进程。每个端口都被赋予一个小的整数(端口号)以便识别。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 客户机上的客户端在打开一个TCP连接时(TCP连接称为Socket)也被绑定到一个特定的端口上。客户的端口号和IP地址同样都包含在每个TCP包中(发送的和接收的)。客户端使用的端口号很少被标准化,
28、服务器可以通过查看TCP头的源端口域来获得。有两种方式获得端口号:(1)事先设计,硬编码在小型客户服务器专用软件包内。(2)标准服务,如FTP服务器运行在21号端口。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 TCP使用连接而不是协议端口作为基本的抽象概念;连接是用一对端点来标识。那么,一个连接的端点究竟是什么呢?我们往往认为一个连接是由两个应用程序之间的虚电路组成的,所以把应用程序当作端点的想法很自然。然而这种看法是不正确的。实际情况中,TCP把端点(endpoint)定义为一对整数,即(host,por
29、t),其中,host是主机的IP地址,而port则是主机上的TCP端口号。例如,端点(128.10.2.3,25)表示的是IP地址为128.10.2.3的主机上的25号TCP端口。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 5.5.2TCP安全缺陷LAND攻击是最简单的一种TCP攻击方法:将TCP包的源地址和目的地址,源端口和目的端口都设置成相同即可。其中,地址字段都设置为目标机器的IP地址。需要注意的是,对应的端口所提供的服务器必须是激活的。LAND攻击可以非常有效地使目标机器重新启动或者死机。这种攻击能够奏效的原因在于TCP连接的可靠特性。为了使连接可靠,TCP完成两
30、个关键的任务:第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 (1)初始化连接:也就是在客户和服务器之间进行三次握手(Three-wayHandshake)。三次握手协议完成两个重要功能:确保连接双方做好数据传输准备(而且他们知道对方准备好了),而且使得双方统一了初始序列号。序列号可以帮助TCP确认包的顺序以及包是否丢失。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 (2)应答每个接收到的数据包。如果在规定时间内应答没有被接收到,包被重传。LAND攻击利用TCP初始连接建立期间的应答方式存在的问题,攻击的关键在于服务器端和客户端有各自的序列号。例如,服务器
31、端的序列号可以是1,2,3,4,而客户端的序列号可能是1001,1002,1003,。对于每一次数据传输,接收端都必须发送一个应答包,其中包含期望从发送端所接收的下一个包的序列号。例如,发送端说“我正在给你发送1000个字节,序列号为5000。”接收端则应答:“好,我收到了,我正在等待序列号为6001的字节(5000+1000+1)。”第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 攻击从发送一个包含随机序列号的数据包作为第一次握手开始。目标计算机说,OK,这是我的序列号,然后对其序列号加1(在此没有数据传送)进行应答,并送回给攻击者。这是第二次握手。如果是正常握手过程,攻击
32、者应当能够收到这个包,并且对目标机器的序列号加1进行应答,并发还给目标机器,从而完成第三次握手。这样的话,双方机器都知道了对方的序列号,可以进行数据传输了。图5-10给出了一次典型的三次握手过程。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-10正常TCP三次握手过程第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 此过程的问题在于目标机器把包发送给了自己(源和目的IP地址是相同的)。目标机器等待自己的序列号得到应答,而这个应答却是它自己刚刚才发送出去的,而且其应答序列号是攻击者的序列号(1002)。由于这个序列号同目标机器所期望的序列号差别太大(不在
33、接收窗口范围内),TCP认为这个包有问题,被丢弃。这样目标机器再次重发数据包。这对于TCP来说,意味着“那不是我所期望的包,请重发”。这将导致无限循环:目标机器一直给自己发送错误应答,并希望能够看到具有正确序列号的应答返回。图5-11形象地描绘了此情景。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-11LAND攻击示意图第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 由于TCP是具有高优先权的内核级进程,这也就意味着TCP相对其它非内核应用程序具有更高的权限。基本上,它将中断其它的正常系统操作以声明更多的内核资源来处理进入的数据。这样,无限循环很快会
34、消耗完系统资源,引起大多数系统死机。只有少数系统在内核资源耗尽情况下还可以继续稳定运行。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 LAND攻击相对容易。下面让我们深入探讨TCP问题的另一个严重问题。在前面我们已经对TCP连接初始化过程有了大致的了解。我们同样也提到了TCP在成功进行数据收发以后如何进行应答。或许你已经注意到,在此过程当中没有任何的认证机制。TCP假定只要接收到的数据包包含正确的序列号就认为数据是可以接受的。一旦连接建立,服务器无法确定进入的数据包确实是来自真正的客户机器的而不是来自某一台假冒的机器的。第第5 5章章 因特网与因特网与TCP/IPTCP/I
35、P安全安全 让我们考虑下述情形:一个客户程序通过TCP正在与一台服务器进行通信。攻击者使用ARP技术(后面详述)来截获和重定向客户与服务器之间的数据流,使之经过攻击者的机器。攻击者可以采取被动攻击以免引起注意,即客户的所有命令保持原样被发送到服务器,服务器的响应也不加修改的发送给客户。对于客户和服务器来说,它们都认为是在直接进行通信。由于攻击者可以看到序列号,有必要的话,它可以把伪造的数据包放到TCP流中。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 这将允许攻击者以被欺骗的客户具有的特权来访问服务器。攻击者同样也可以查看所有同攻击相关的输出,而且不把它们送往客户机。这样的
36、攻击是透明的。在这种情况下,攻击者甚至于不需要知道访问机器所需的口令,攻击者只需简单地等待用户登陆到服务器,然后劫持(Hijack)会话数据流即可。图5-12显示了攻击者是如何劫持一个TCP会话的。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-12TCP会话劫持第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 这种攻击的关键在于攻击者可以把自己的机器置于数据通信流的中间(正如本章后续章节所叙述的,这并不是很难)。在众多的TCP/IP实现中存在发动这类攻击的安全漏洞,而TCP协议本身也允许进行类似的假冒。下面我们将讨论一种可以用于TCP会话劫持的攻击技术
37、,称为去同步技术(Desynchronization)。首先,让我们再讨论一下三次握手模型:握手1:客户给服务器发送同步包(SYN),序列号为CLT_SEQ。客户等待服务器应答。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 握手2:服务器发送应答(ACK),其中应答序列号为CLT_SEQ+1,自己的序列号为SVR_SEQ。此时客户处于连接建立状态,而服务器还必须等待来自客户端的应答包,也就是握手3的完成。在完成握手2以后,攻击者跳了出来,他以客户身份向服务器发送连接复位(RST)包。服务器接收到这个包以后,会认为握手过程出错从而断开同客户端的连接,并侦听新的连接请求。但同时
38、真正的客户端却向服务器发送了握手3的应答包,由于攻击者关闭了连接,这个应答包将被服务器所忽略。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 现在我们看一下客户和服务器所处的状态。客户一旦发送握手3的应答包即已经认为连接已经建立,他无需再从服务器得到进一步的应答。客户端也认为服务器是激活的(事实上不是),所以客户端认为连接处于建立状态。对于服务器,他认为客户端出了什么问题,连接被复位以至于关闭,但事实上客户端并没有关闭连接。攻击者现在可以假冒客户端的身份同服务器进行三次握手过程。握手1:攻击者假冒客户机身份向服务器启动连接请求,使用的序列号为Attack_SEQ。第第5 5章
39、章 因特网与因特网与TCP/IPTCP/IP安全安全 握手2:服务器向真正的客户端发送应答:应答序列号为Attack_SEQ+1,自身序列为New_SVR_SEQ。由于应答序列号不符,应答包被客户端忽略。握手3:攻击者再次假冒客户端进行应答,应答序列号为New_SVR_SEQ+1。到此为止,服务器也处于连接建立状态。但是由于客户和服务器之间的序列号无法一致,它们之间并不能真正进行通信,各自发往对方的数据包都将被忽略。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 1去同步状态首先定义以下术语:SVR_SEQ服务器将要发送的下一个字节的序列号SVR_ACK服务器将要接收的下一个
40、字节(所接收到的最后字节的序列号加1)SVR_WIND服务器的接收窗口CLT_SEQ客户将要发送的下一个字节的序列号CLT_ACK客户将要接收的下一个字节CLT_WIND客户的接收窗口SEG_SEQ包序列号SEG_ACK包应答号第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 术语“去同步状态”指双方都处于连接建立(Established)状态,还没有数据要发送(稳定状态)和SVR_SEQ!=CLT_ACKCLT_SEQ!=SVR_ACK第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 此状态只要没有数据发送就是稳定的。如果有数据要发送,可能有两种情况:(1)如
41、果CLT_SEQSVR_ACK包是可接收的,数据也将被存储以备后用(依赖于实现),但不发送给用户,因为数据流的开始部分(从序列号SVR_ACK开始)丢失了。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 (2)如果CLT_SEQSVR_ACK+SVR_WIND或CLT_SEQtftpget/etc/passwd/tmp/passwd.victimtftpquit第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 6RCP在本地站点内,可以用RCP(RemoteCopy,远程拷贝)在UNIX系统间传输文件。RCP是个文件拷贝程序,很像UNIX中CP命令在多主机间的
42、扩展版本。在因特网上使用它是不合适的,因为它使用的是信任主机鉴别模式。它不是在远程机上进行用户认证,而是检查发出请求主机的IP地址。就像BSD的其它r命令(如rlogin和rsh)一样,RCP会带来很多安全风险,最好是禁止使用RCP。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 5.9.3域名系统(DNS)我们知道,因特网是基于TCP/IP协议的,要进行通信必须获得对方的IP地址,这是通过DNS服务器来实现的。域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。第第5 5章章 因特网与因特网与TCP/I
43、PTCP/IP安全安全 DNS是因特网上其它服务的基础。没有DNS,也就不会存在,和等网址。它处理DNS客户机的请求:把名字翻译成IP地址;把IP地址翻译成名字;提供特定主机的其它已公布信息(如MX记录)。它将因特网中计算机列表存放到一个文件,通常为/etc/hosts(UNIX系统),在没有域名服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP地址。该文件包括了计算机名与IP地址的对应表格,如下:第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 1DNS基础DNS的名字空间和UNI
44、X的文件系统相似,也具有层次结构。图5-28显示了这种层次的组织形式。每个节点(图5-28中的圆圈)有一个至多63个字符长的标识。这颗树的树根是没有任何标识的特殊节点。命名标识中一律不区分大写和小写。命名树上任何一个节点的域名就是将从该节点到最高层的域名串连起来,中间使用一个点“.”分隔这些域名(注意,这和UNIX文件系统路径的形成不同,文件路径是由树根依次向下形成的)。域名树中同一个父节点下的每个节点必须有一个惟一的域名,但域名树中的不同节点可使用相同的标识。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 图5-28DNS的层次组织第第5 5章章 因特网与因特网与TCP/I
45、PTCP/IP安全安全 以点“.”结尾的域名称为绝对域名或完全合格的域名FQDN(FullQualifiedDomainName),例如sun.tuc.noao.edu.。如果一个域名不以点结尾,则认为该域名是不完全的。域名的完整依赖于所使用的DNS软件。如果不完整的域名由两个或两个以上的标号组成,则认为它是完整的;或者在该域名的右边加入一个局部后缀。例如,域名sun通过加上局部后缀.tuc.noao.edu.构成完整的域名。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 顶级域名被分为三个部分:(1)arpa是一个用作IP地址到名字转换的特殊域。(2)七个3字符长的普通域。
46、有些书也将这些域称为组织域。(3)所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域,或地理域。一个独立管理的DNS子树称为一个区域(zone)。一个常见的区域是一个二级域,如noao.edu。许多二级域将它们的区域划分成更小的区域。例如,大学可能根据不同的系来划分区域,公司可能根据不同的部门来划分区域。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 如果你熟悉UNIX的文件系统,会注意到DNS树中区域的划分同一个逻辑UNIX文件系统到物理磁盘分区的划分很相似。一旦一个区域的授权机构被委派后,由它负责向该区域提供多个名字服务器。当一个新系统加入到一个区
47、域中,该区域的DNS管理者为该新系统申请一个域名和一个IP地址,并将它们加到名字服务器的数据库中。这就是授权机构存在的必要性。例如,在一个小规模的大学,一个人就能完成每次新系统的加入,但对一个规模较大的大学来说,这一工作必须被专门委派的机构(可能是网络中心)来完成,因为一个人已无法维持这一工作。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 一个名字服务器负责一个或多个区域。一个区域的管理者必须为该区域提供一个主名字服务器和至少一个辅助名字服务器。主、辅名字服务器必须是独立和冗余的,以便当某个名字服务器发生故障时不会影响该区域的名字服务。主、辅名字服务器的主要区别在于主名字服
48、务器从磁盘文件中调入该区域的所有信息,而辅名字服务器则从主服务器调入所有信息。我们将辅名字服务器从主服务器调入信息称为区域传送。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 当一个新主机加入一个区域时,区域管理者将适当的信息(最少包括名字和IP地址)加入到运行在主名字服务器上的一个磁盘文件中,然后通知主名字服务器重新调入它的配置文件。辅名字服务器定时(通常是每隔3小时)向主名字服务器询问是否有新数据。如果有新数据,则通过区域传送方式获得新数据。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 当一个名字服务器没有请求的信息时,它将如何处理?它必须与其它的名字
49、服务器联系。(这正是DNS的分布特性)。然而,并不是每个名字服务器都知道如何同其它名字服务器联系,相反,每个名字服务器必须知道如何同根名字服务器联系。截至1993年4月,有8个根名字服务器,所有的主名字服务器都必须知道根服务器的IP地址,而不是它们的域名(这些IP地址在主名字服务器的配置文件中)。根服务器则知道所有二级域中的每个授权名字服务器的名字和位置(即IP地址)。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 这意味着名字查询过程为:正在处理请求的名字服务器与根服务器联系,根服务器告诉它与另一个名字服务器联系,直到最终能解析该域名的名字服务器为止。在本章的后面我们将通过
50、一些例子来详细了解这一过程。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 你可以通过匿名的FTP获取当前的根服务器清单。具体是从或nic.ddn.mil获取文件netinfo/root-servers.txt。DNS的一个基本特性是使用超高速缓存。即当一个名字服务器收到有关映射的信息(主机名字到IP地址)时,它会将该信息存放在高速缓存中。这样,若以后遇到相同的映射请求,就能直接使用缓存中的结果而无需通过其它服务器查询。第第5 5章章 因特网与因特网与TCP/IPTCP/IP安全安全 2DNS的报文格式DNS定义了一个用于查询和响应的报文格式。图5-29显示了这个报文的总体格