2.4 网络协议的安全问题

当今的Internet就是建立在TCP/IP这个协议体系之上的,虽然与OSI模型相比它简单而高效,但是TCP/IP协议体系的这种开放性使得它存在诸多安全隐患。TCP/IP在设计之初就缺乏对安全因素的考虑。例如:在Internet中很容易被欺骗,信息也很容易被窃听。这些协议本身存在的漏洞,使Internet很容易受到恶意地攻击。

2.4.1 IP协议

1. 协议简介

IP(Internet Protocol)即网际协议,它是一个无连接的协议,提供不可靠、无连接的数据报传送服务。在数据传输之前该协议把要传输的一个文件分成一个个的单元,这些单元被称之为IP数据报文,每个IP数据报文都含有源地址和目的地址,这些地址表示了该数据报要从某台具有源地址的主机正确地传送到具有目的地址的主机上去。IP协议主要功能是在主机之间寻址并为IP数据报设定路由。在数据被收到时,IP协议不需要接收确认,因此它不保证传递的正确性,所以IP协议是不可靠的。另外,IP协议在传输时不存储连接状态的信息,所以说IP协议是一个无连接的协议。IP协议具有分组交换的功能,因此不会因为一台计算机传输数据而造成独占通信线路的情况出现。

IP报头中包含了一些控制字段和信息,当数据从传输层传下来时,这些信息会被附加到数据包中。如图2-3所示描述了IP报头的格式。

图2-3 IP报头格式

IP地址是TCP/IP协议所用的网络地址,它能在TCP/IP网络中唯一标识一台主机。所有的IP地址都分为两部分,高位对应网络地址和低位对应主机地址。如果IP数据报的目的地址为本地网络地址时,IP将数据报将直接传给该主机;如果目的地址为远程地址,将在本地的路由表中查找远程主机的路由,如果找到一个路由,则向它传送数据包;如果没找到,数据报将被发送到源主机的设置的默认网关,依此类推直至把IP数据报传送到目的地址。无法传送到目的地的IP数据报将被丢弃。

2. 安全问题

在因特网层的攻击主要有以下几种:

IP欺骗是指侵入者向一台主机发送带有某一IP地址的消息(这个IP地址并非入侵者自身的IP地址),表明该消息来自于一台受信任主机,以便获得对该主机或其他主机的非授权访问的一种欺骗技术。在进行IP欺骗攻击时,侵入者首先必须找到一个受信任主机的IP地址,然后修改数据包的信息头,使得该数据包好像来自于那台主机。

另一种攻击叫做路由选择信息协议攻击。路由选择信息协议(RIP)用于在网络中发布路由选择信息,如最短路径,并从本地网络向外广播路径。RIP没有内置的验证机制,RIP数据包中所提供的信息通常未经检验就已经被使用。攻击者可以伪造RIP数据包,宣称其主机“A”拥有最快的连接网络外部的路径。然后,所有需要从那个网络发出的数据包都会经A转发,而在A中,这些数据包既可以被检查,也可以被修改。攻击者也可以使用RIP来有效地模仿任何主机,使得所有应该发送到那台主机的通信都被发送到攻击者的计算机中。

在因特网层中,凭借任何一种单一的防范机制是无法达到有效保障该层安全的目的的。因此,Internet工程特遣组(IETF)已经特许Internet协议安全协议(IPSEC)工作组对IP安全协议(IPSP)和对应的Internet密钥管理协议(IKMP)进行标准化工作。IPSP的主要目的是使需要安全措施的用户能够使用相应的加密安全体制。关于IPSEC的内容,将在以后的章节进行详细介绍。总之,Internet层是非常适合提供基于主机对主机的安全服务的。相应的安全协议可以用来在Internet上建立安全的IP通道和虚拟私有网。

2.4.2 TCP和UDP协议

1. 协议简介

(1)TCP协议

TCP(Transport control Protocol)传输控制协议主要功能是在主机之间实现高可靠性的包交换和传输,TCP是面向连接的端到端的可靠的协议。它的下层是IP协议,可以根据IP协议提供的服务传送大小不定的数据。TCP协议具有重排IP数据包顺序和超时确认等功能。由于IP数据包可能从不同的传输线路到达目的主机,因此IP数据包很可能不是顺序到达的,TCP协议会根据IP数据包正确的顺序对其进行重排。IP协议是不可靠的,IP数据包很可能在传输过程中损坏或丢失,如果目的主机在规定的时间内收不到这些IP数据包,TCP协议规定源主机要重新发送这些IP数据包,直到目的主机收到确认信息为止。

如图2-4所示描述了TCP报头的具体结构。

图2-4 TCP报头格式

● 端口号:主机上不同的协议有不同的端口号,相应的应用程序进程通过这个端口号进行通信。网络的IP地址和端口号组合成为唯一的标识,称之为“套接字”或“端点”。TCP在端点间建立连接进行可靠通信,即连接是由一对套接字定义的。

提示:IP地址在网络中可以唯一标识一台计算机,但是这台计算机中的不同网络应用程序进程可能同时进行通信,这时TCP协议会使用端口号来区分目的计算机接收到的数据报应该发给哪个应用进程。

● 序号:在TCP协议发送报文的报头中都有一个序列号字段。因为提供了这个编号,使确认报文是被正确收到还是丢失成为了可能。如果用户收到对序号为N的报文的确认信息,这表明N以前的数据都收到了。

● 确认序号:如果设置了ACK控制位,这个值表示一个准备接收的包的序列号。

● 标志:6位标志域,分别为紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。

● 数据偏移量:指示数据从何处开始的偏移量。

● 窗口:表示想要收到的每个TCP数据段的大小。

要建立一个TCP连接,需要经历三次握手的过程。其具体过程如下:

首先,其中一方(通常是客户端),发送一个SYN=1,ACK=0的数据段到目的端,并且明确指出目的端的IP地址、端口号、能够接收的TCP数据段的最大值,以及其他一些可选数据,随后等待对方的响应。

接下来目的端接收到来自源端的请求,如果同意接收,它将发送一个确认的数据段。这个确认数据段包括:同步标志置位、即将发送的数据段的起始字节的顺序号、应答并带有将收到的下一个数据段的字节顺序号。

最后,最初发出请求主机将再返回一个带有确认顺序号和确认号数据段。

提示:SYN数据段使用了顺序的空间,因此可以得到明确的确认。

三次握手的具体过程,如图2-5所示。

图2-5 三次握手一般情况

警告:

无论发生何种情况,三次握手的通信过程保证了最终只能有一个连接被建立起来。

(2)UDP协议

无连接的传输协议UDP(User Datagram Protocol)与TCP同处于传输层。UDP协议与TCP协议的主要区别在于两者在实现信息传送的可靠性方面的考虑不同。TCP协议中包含了针对传输可靠性的保证机制,与TCP不同,UDP协议并不提供针对数据传输可靠性的保证机制。如果在从源端到目的端的传输过程中出现数据报的丢失,UDP协议并不能做出任何反应。因此,通常UDP协议被称为不可靠的传输协议。UDP协议与TCP协议的另一个不同之处在于UDP并不能保证数据的发送和接收的顺序。

如图2-6所示描述了UDP报头的具体格式。

图2-6 UDP报头格式

UDP数据报由5个域组成:数据、源端口、目的端口、UDP长度和UDP校验和。

提示:可以看出,欺骗UDP包比欺骗TCP包更加容易,因为UDP没有建立初始化连接,即UDP没有经历三次握手这一过程。因此,与UDP相关的服务将要面临更大的安全风险。

2. 安全问题

首先,将介绍一下DoS攻击。DoS的英文全称是Denial of Service,也就是“拒绝服务”的意思。与网络中各种其他的攻击方法相比,DoS是比较简单、有效的一种进攻方式。DoS攻击的目的就是使目标服务器拒绝用户的服务访问,从而破坏系统的正常运行,最终它会使部分Internet连接和网络系统失效。DoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务。

DoS攻击的基本过程如下:首先攻击者向服务器发送众多的带有虚假地址的请求,服务器发送回复信息后等待回传信息,由于地址是伪造的,所以服务器一直等不到回传的消息,分配给这次请求的资源就始终没有被释放。当服务器等待一定的时间后,连接会因超时而被切断,攻击者会不断传送新的请求,在这种反复发送伪地址请求的情况下,服务器资源最终将会被耗尽。

DDoS即分布式拒绝服务,它的英文全称为Distributed Denial of Service,它是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布、协作的大规模攻击方式,主要瞄准比较大的站点,像商业公司,搜索引擎和政府部门的站点。DoS攻击只要一台单机和一个modem就可实现,与之不同的是DDoS攻击是利用一批受控制的计算机向一台计算机发起攻击,这样来势迅猛的攻击令人难以防备,因此具有较大的破坏性。

SYN Flood是当前最流行的DoS与DDoS的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

在上文中已经提到,TCP与UDP不同,它是基于连接的,也就是说,为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是通过三次握手来建立TCP连接。

在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的,这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒~2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源,即使是简单的保存并遍历半连接列表也会消耗非常多的CPU时间和内存,此时服务器还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃;如果TCP/IP栈足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应,这种情况称做SYN Flood攻击。

2.4.3 因特网控制报文协议(ICMP)

1. 协议简介

ICMP即因特网控制报文协议,它是IP协议的一部分,任何实现了IP协议的设备同时也被要求实现ICMP协议。ICMP目的在于保证在源主机、路由器和目的主机之间能够实现正常地通信。该协议允许路由器目的主机给数据的发送方提供反馈控制消息。这些控制消息对于数据在网络中传输起着非常重要的作用。例如,当使用Ping命令来检查网络是否连通时,就产生了一条ICMP消息;另外还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。

提示:IP报头如果不包括可选项,则为20字节。

如图2-7所示,ICMP报头位于IP数据报头之后,并与IP数据报封装在一起。在ICMP报头中,使用类型和代码字段来区分控制消息的类型。在图2-8中具体描述了ICMP报文的具体格式。

图2-7 ICMP消息实例

图2-8 ICMP报文格式

2. 安全问题

ICMP对于维护网络信息安全具有极其重要的意义。ICMP本身的特点决定了它很容易被黑客利用,来攻击网络上的主机和路由器。

(1)Ping of Death攻击

当TYPE字段取值为8时,表示此报文是一个应答(ICMP echo reply);当TYPE字段取值为0时,表示此报文是一个请求(ICMP echo request)。ICMP的回送请求和应答报文通常用来检查网络的连通问题。对大多数系统而言,发送ICMP echo request报文的命令为Ping。

用于IP数据报的最大长度为65535字节,而ICMP报头位于IP数据报头之后,并与IP数据报封装在一起,因此ICMP数据包的最大尺寸不超过65515(65535-20)字节,利用这一规定可以向主机发起“Ping of Death”攻击。“Ping of Death”攻击是通过在最后分段中,改变正确的偏移量和段长度的组合,使系统在接收到全部分段并重组报文时总长度大于65535字节,导致内存溢出。这时主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使死机。

提示:对于“Ping of Death”攻击,一个能执行详细数据包完整性检测的防火墙可以防止所有这种类型的攻击。方法就是在主机上设置ICMP数据包的处理规则,最好是设定拒绝所有的ICMP数据包。

(2)基于重定向(redirect)的路由欺骗技术

在ICMP报头中,当TYPE字段取值为5时,意味着此报文是一个重定向报文。为了适应网络中拓扑结构的改变,网络中的主机会根据路由器向其发送的重定向消息来更新主机中的路由表,这一过程就是ICMP重定向。

网络中的主机(除路由器以外)要遵守ICMP的重定向报文。黑客可以利用ICMP重定向报文破坏主机中的路由表。如果一台计算机向网络中的另一台计算机发送了一个ICMP重定向消息,这就可能引起其他计算机具有一张无效的路由表。利用这张路由表,一台计算机就可以伪装成路由器并截获所有要发送到某一特定目标网络的IP数据包,这样就形成了窃听。

提示:与应对“Ping of Death”攻击的方法相同,对于这种攻击,用户只要为使用的防火墙配置一个合理的安全策略,就可以进行有效的防范。

2.4.4 远程登录协议(Telnet)

1. 协议简介

Telnet协议,即远程登录协议,是TCP/IP协议族中的一员。Telnet协议是Internet远程登录服务的标准协议。Telnet协议能使一个计算机可以通过TCP的23号端口用命令的形式操作另一台远程主机,这相当于把本地用户所使用的计算机变成远程主机系统的一个终端。在Telnet协议中有3个重要的概念:

● 网络虚拟终端:Telnet协议能提供一个标准的接口,使客户机程序不必了解远程主机系统,客户机只需构造使用标准接口的程序。

● 可协商选项的机制:Telnet协议允许客户机和服务器通过协商来确定一组标准选项的状态。

● 连接处理的对称性:Telnet协议尽可能地使客户端和服务器之间的操作保持对称的关系。

提示:这里客户机是指提出连接的物理终端设备,即初始化连接一端的主机;服务器是指能够提供远程登录服务的主机。

2. 安全问题

值得注意的是,Telnet协议没有口令保护,并且是用明文的形式在网络中传输用户登录的用户名、密码和数据的,这使得用户信息很容易被截获。另外,在Telnet协议中没有规定有效认证过程,而只是简单验证用户的用户名和密码。Telnet协议也没有提供完整性检查,这使得无法获知传输的数据是否已被修改过、是否完整。

由于Telnet协议本身不具有有力的保护机制,因此需要借助外部措施来提供对远程登录保护。其中SSH就是一个很好的telnet安全保护系统,它是一个能提供安全登录和远程命令执行的软件包,是为替代UNIX下的rlogin/rsh系列程序而设计的。SSH是基于主机密码加密的一个安全连接。

除了对远程登录操作过程本身的保护以外,还需要防范黑客利用Telnet协议进行攻击。利用Telnet可以获得很多的关于服务器的情况,例如服务器端使用操作系统的种类。Telnet不仅可以使用端口23,也可以连接到服务器的其他端口,如端口21(FTP)、端口25(SMTP)、端口80(HTTP)等。只要该端口没有被屏蔽,这种情况就有可能会发生。

提示:应该在服务器端设置登录的次数和登录的延时限制,这样可以防止攻击者使用强攻法来破译口令。

2.4.5 文件传输协议(FTP)

1. 协议简介

FTP即文件传输协议,是一个在IP网络上系统之间文件传输的协议,主要用于在两台计算机之间实现文件的上传与下载,其中一台计算机作为FTP的客户端,另一台作为FTP的服务器端。采用FTP协议可使用户能高效地在因特网的FTP服务器上上传、下载大信息量的数据文件,这些数据文件几乎包括所有的文件类型,如:TXT、EXE、DOC、MP3、ZIP、RAR等。由于FTP的使用使得因特网上出现了大量为用户提供的下载服务,从而达到了资源共享和传递信息的目的。FTP促进了文件的共享、向用户屏蔽了不同主机中各种文件存储系统的差异,提高了数据传输的效率和可靠性。

FTP服务通常使用20和21这两个端口。端口21用于建立传输控制信息的连接,也是向FTP服务器发出命令的入口;端口20用于在客户端和服务器之间建立临时的数据传输连接。当数据通过数据连接传输时,控制连接处于空闲状态。如图2-9所示描述了FTP服务的过程。

图2-9 FTP服务过程

在图2-9中:

● DTP数据传输过程:主要功能是建立和管理数据连接,DTP分为主动和被动两种。

● PI:即为协议解释器。

提示:图2-9中的控制连接使用的是Telnet协议,数据连接是双向的、临时的,它只在需要时才被创建,并不是在整个FTP服务过程中都存在。

首先,用户PI开始控制连接,标准的FTP命令由用户PI产生并通过控制连接传送到服务器进程。服务器PI向用户PI返回标准应答,这个FTP命令指定数据连接参数和文件系统操作。用户DTP在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。数据端口不必在开始FTP命令的计算机上,但用户或用户FTP进程必须确定它在指定的数据端口上侦听,这个数据连接是全双工的,如图2-10所示。

图2-10 FTP传输过程

提供FTP服务的许多站点都开放匿名服务(AnonymousService)。用户不需要账号就可以登录服务器,在默认情况下匿名用户的用户名是:“anonymous”,这个账号不需要密码。这种服务方式虽然方便了用户,但也不可避免地带来了安全隐患。

2. 安全问题

在FTP规范中,用户名、用户密码和文件内容都使用明文传输,可能产生不希望发生的窃听。这就需要读者使用有效的加密系统。

当FTP服务器允许匿名登录,并且赋予匿名用户写的权限时,这样黑客就可以通过上传大量错误的数据消耗硬盘空间,以达到其攻击该FTP服务器的目的。虽然许多FTP服务器都限制匿名用户的执行权限,但是许多FTP服务器与HTTP服务器都同时装在一台计算机上,这样一来匿名用户完全可以利用匿名用户的可写目录运行命令来调用HTTP服务器执行。

2.4.6 简单邮件传输协议(SMTP)

1. 协议简介

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是定义邮件传输的协议。该协议是基于TCP服务的应用层协议,其主要功能是向用户提供高效、可靠的邮件传输服务。在SMPT协议中规定的命令是以明文方式进行传输的。它的一个特点是可以在交互通信系统中转发邮件,即以接力的方式传送邮件的。

SMTP的具体过程如下:首先,针对用户的邮件请求,在发送SMTP与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。当收件方和发件方同时处在一个网络上时,可以把邮件直接传给收件方;当收发双方不在同一个网络上时,需要通过一个或几个中间服务器来转发邮件。也就是说邮件的传输会出现以下两种情况:一是电子邮件从客户机传输到服务器;二是邮件从某一个服务器传输到另一个服务器。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。如图2-11所示描述了SMTP服务的过程。

图2-11 SMTP服务

邮件服务器一般具有一个或若干个域名,邮件服务器在运行时会监听端口25,等待远程的发送邮件的请求。当邮件在收件方和发件方之间经过毫不相干的第三方服务器,这就是邮件转发,即Relay。

2. 安全问题

涉及SMTP的安全问题主要是电子邮件服务器的安全问题。随着因特网的迅速发展,邮件服务器受攻击的机会也大大增加了。目前邮件服务器受到的攻击主要有两类:

一类就是中继利用(Relay)攻击,即远程计算机通过第三方服务器来发送电子邮件,任何人都可以利用这台服务器向任何地址发送邮件,这会使这台服务器成为发送垃圾邮件的帮凶,同时也会使网络中的国际流量激增,甚至被网上的其他邮件服务器拒绝。

提示:系统管理员应当注意不要设置自己的邮件服务器为open relay。

另一类攻击是垃圾邮件(Spam),即人们常说的邮件炸弹,它是指在很短时间内服务器可能接收大量无用的邮件,最终耗尽系统资源,从而使邮件服务器因不堪重负而瘫痪。

这两种攻击都可能使邮件服务器无法正常工作。

目前对于邮件服务器,阻止邮件攻击的方法有两种。第一种是升级高版本的服务器软件,利用软件自身的安全功能;第二种是采用第三方软件利用其动态中继验证控制功能来实现服务器的安全。

2.4.7 超文本传输协议(HTTP)

1. 协议简介

HTTP即超文本传输协议,是因特网上应用最为广泛的一种网络传输协议。所有的WWW文件都必须遵守这个标准。HTTP是定义从WWW服务器传输超文本到本地浏览器的传送协议。它可以提高浏览器的效率,减少网络中的传输。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪一部分内容首先显示等。HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。

一个HTTP的客户端,例如一个Web浏览器,通过建立一个到远程主机特殊端口(默认为端口80)的连接,初始化一个请求。一个HTTP服务器通过监听特殊端口等待客户端发送一个请求序列。接收到请求序列后,服务器会发回一个应答消息,同时发回一个它自己的消息,此消息的主体可能是被请求的文件、错误消息或者其他的一些信息。与其他基于TCP的协议不同,在HTTP中一旦一个特殊的请求处理完成,连接通常被中断。

HTTP是无状态的协议,这既是优点也是缺点。一方面,由于缺少状态使得HTTP很简洁,系统运行效率高,服务器应答快;另一方面,由于没有状态,协议对事务处理没有记忆能力,若后续事务处理需要有关前面处理的信息,那么这些信息必须在协议外面保存。另外,缺少状态意味着所需的前面信息必须重现,导致每次连接需要传送较多的信息。

另外,有一个HTTP的安全版本称为HTTPS,HTTPS支持加密算法,使用TCP的443端口。安全版本提供128位的密钥,这就提高了敏感信息在网络中传输的安全性。

2. 安全问题

HTTP所面临的安全威胁主要是由恶意代码带来的安全问题。恶意的代码威胁主要是指利用Web浏览器的漏洞,在网页中嵌入恶意代码。当该网页被浏览时,这些恶意代码将会破坏系统的正常使用。

2.4.8 域名系统(DNS)

1. 协议简介

DNS即域名系统协议,是一种分布式网络目录服务,主要用于域名与IP地址的相互转换,以及控制因特网的电子邮件的发送。大多数因特网服务依赖于DNS而工作,一旦DNS出现问题,用户就无法连接Web站点,电子邮件的发送也会中止。

DNS是分层的结构,在Internet根域以下分布了若干顶级域,顶级域下又分布有二级域。这个分层结构构成了Internet资源命名机制。通过使用DNS的命名方式可以为遍布在全球的网络设备分配域名,而这一工作是由分散在世界各地的服务器实现的。

DNS的机制支持有效、可靠的由域名到IP地址的映射。多数域名字可以在本地映射,不同站点的DNS服务器相互合作能够解决整个网络的域名与IP地址的映射问题。而且,单个服务器的故障不会影响到DNS的正常工作。

2. 安全问题

在DNS服务过程中,如果攻击者能够截获用户的查询请求,那么他就可以返回一个虚假的信息。收到查询响应中的虚假地址的DNS客户端就会被定位到一个伪装成合法网站的站点去。如果非法的站点是一个假的银行网站,那么它就可以收集到大量类似于用户名、密码等敏感的信息。因为这些查询都是使用UDP来完成的,攻击甚至都不需要去阻塞发送到合法目标的请求。攻击者只需要比合法服务器更快地响应即可。发出请求的人就会接收到非法站点的响应,并忽略随后的合法相应。

提示:通过限制授权服务器之间的域通信,就能清除发生在DNS服务器之间的不重要的通信;而且,这样做还可以防止黑客获得网络中所包含的内容的清单。