闵 慧,李 鹏,刘镇国
(1. 湖南信息职业技术学院软件学院,湖南 长沙 410200;2. 湖南中医药大学信息科学与工程学院,湖南 长沙 410208)
TCP/IP模型作为当下最流行的网络协议栈[1],是国际互联网络的基础。由于在协议设计之初,对安全性的考虑不足,在TCP/IP协议栈中,绝大多数协议没有提供必要的安全机制,例如不提供认证服务;明文传输,缺乏机密性保障;不提供抗抵赖服务;服务质量保障较差。因为其本身存在的这些脆弱性,导致各种攻击手法层出不穷,例如基于应用层的DNS欺骗、基于传输层的TCP连接欺骗。本文将会对TCP/IP协议栈各层协议做简要分析,并着重探究各层较为常见的网络攻击类型和其解决办法。
TCP/IP协议在一定程度上参考了OSI的体系结构。共有四层,从下到上分别是网络接入层、网络层、传输层和应用层,如图1所示。其中,应用层是 TCP/IP的顶层,它直接与用户进行交互,通过套接字将主机进程需要的消息传给下层,并通过进程寻址和五元组向目的主机的进程发起通信,常见协议有FTP、HTTP、SMTP等[2]。
图1 TCP/IP 协议Fig.1 TCP/IP protocol
传输层为两台计算机之间的通信提供传输链路,主要协议为UDP和TCP。其中UDP是面向无连接协议,它不会引入建立连接的时延;TCP是面向连接的协议,它通过滑动窗口机制和指数加权平均移动来实现拥塞控制和定时器管理,这两种协议分别适用在不同的场景。Internet层又称为网络层,它定义了数据包在网络中转发的机制,可以分为数据平面和控制平面,数据平面负责进行流量转发,控制平面负责路由选择,并且提供相关的路由算法,确保数据包高效、准确的发送到目的主机上。网络接入层又称为链路层,通常将它与实际的物理介质与硬件放在一起讨论,链路层负责将数据划分为一种帧格式,媒体访问控制(MAC)协议定义了帧传输的规则,并通过二维奇偶检验,循环冗余检测(CRC)编码提供差错检测和纠正功能,向下交由物理硬件以比特流的形式进行数据转发。主要协议有ARP,PPP[3]。
ARP病毒攻击的工作原理是通过伪造通信双方一端的IP地址或MAC地址,让另一端误以为该主机为正确主机从而达到欺骗目的。如图2所示,当网络中源主机A想和目的主机B进行通信,A会先广播ARP请求报文,期望B能收到并返回给A自己的MAC地址。但由于报文采用的是广播形式,因此攻击者C在收到A的请求报文时会将自己的IP地址伪造成B的IP地址[4],这在ARP请求报文中可以很容易获得,接着攻击者C向A发送带有B的IP地址,C的MAC地址的返回消息,让A误以为C就是合法的目的主机B,从而C就达到了盗取信息的目的。
图2 ARP 病毒攻击过程Fig.2 ARP virus attack process
RIP是一种基于距离(跳数)的路由选择协议,它的作用是计算数据包在网络中路由的最佳路径,因为RIP基于跳数且规定了最大跳数不可以超过15,因此它只适用于中小型的网络。基于RIP的攻击实际上是攻击网络中路由器的路由表。因为RIP是基于UDP协议进行传输,而UDP是一种不可靠,不需要建立连接的传输层协议。因此运行着RIP协议的路由器会无条件的接受任何来自网路中的报文,包括一些非法的路由表更新报文。路由器在接受这些报文时会在没有执行路由表更新命令的情况下改变自身的路由表[5]。从而导致该路由器的路由表紊乱,甚至可能影响该路由器的邻接路由器,继而导致整个网络瘫痪,带来严重的后果。
DNS(Domain name resolution)又称域名解析协议,它用来将域名和IP地址进行相互转换,从而让用户在上网的时候可以直接输入域名而不是冗长繁琐的IP地址。在DNS欺骗中,攻击者通常会先攻击DNS服务器并取而代之,并改变原先DNS服务器中的IP地址和域名的映射关系。当用户访问相应的域名时返回的实际上是一个错误的网页,而攻击者可以通过这个网页向用户植入病毒或直接展开攻击。DNS欺骗的手段分为两种[6],一种是篡改本地主机的 Hosts文件,Hosts文件实现的就是 DNS服务器的功能。例如将Hosts文件中的一个域名对应的IP地址改成本机的回环地址(127.0.0.1),这样用户在访问这个域名时就无法到达想要的网页。另一种是 DNS劫持,即劫持用户使用的DNS服务器 ,通常来说黑客会将自己已经建立好的攻击网站的 IP地址映射到用户经常访问的网站的域名,而该攻击网站和原网站看上去相差无几,这样用户即使被攻击也毫不知情。以访问www.baidu.com为例,攻击过程如图3所示。
虽然TCP协议是一种可靠的链路层协议,但是由于每台主机的 IP地址在每次上网的时候都可能发生改变,因此攻击者可以通过这个漏洞扰乱两台主机的TCP连接。TCP连接欺骗[7]中,攻击者C会一直对主机A进行攻击(例如Dos攻击)使其瘫痪,从而阻止 A与 B进行通信,然后自己再伪造成主机A与B建立TCP连接。过程如下:
图3 DNS 欺骗攻击过程Fig.3 DNS spoofing attack process
C→B:SYN=1,seq=a
B→A:SYN=1,ACK=1,seq=b,ack=a+1
C→B:ACK=1,seq=a+1,ack=b+1
攻击者C首先向 B发送连接请求报文,同步位SYN置为1,序列号seq为a。B收到请求报文后,向A发出确认报文,确认号ack为a+1,序号seq为b,由于A处于瘫痪中因此不会发送响应报文。C通过网络嗅探工具得到B向A发送的ack和seq,对B发送确认报文,将ACK置为1,序号seq为a+1,确认号ack为b+1。这样B和攻击者C之间就直接建立了TCP连接,并可以直接向B发送指令,而B还认为指令是由合法主机A发送过来的,将执行这些命令。从而导致C可以任意地向B发送攻击命令,致使B瘫痪。攻击过程如图4所示。
为了解决TCP/IP协议中存在的安全漏洞,常用的安全措施主要有以下几种:
IPSec是一组用来在网络层提高数据包传输安全的协议族统称,它通过在原有的IP报文中加入一些特定的检测头来达到安全确认的目的。IPSec有两种工作模式,分别是传输模式和隧道模式,前者适用于端到端(End to End),即两台主机之间的 IPSec通信,后者适用于站点到站点(Site to Site),即两个网关之间的IPSec通信,IPSec由AH协议、ESP协议和一些复杂的安全验证算法组成[8],这些基本的算法为 IPSec中的协议服务。下面将主要介绍AH和ESP两个协议:
图4 TCP 连接欺骗攻击过程Fig.4 TCP connection spoofing attack process
(1)AH协议提供的安全服务
AH的工作模式是在每一个数据包中的IP报头后添加一个AH头,这个AH头有自己独特的字段用于提供安全服务,AH可以保证数据的完整性不被篡改,但不能防止数据被盗窃。AH使用的IP协议号是51,当IP报文的协议号部分为51时,代表IP头后面是一个AH报头,AH报头结构如图5所示。
图5 AH 头Fig.5 AH header
图6 AH 的认证封装过程Fig.6 AH authentication encapsulation process
AH提供的安全服务主要有数据源认证,加入一个双方协商好的密文,来对对方身份以及数据的有效性进行验证;第二个是数据完整性校验,因为AH协议需要防止数据被非法篡改,因此该协议会通过引入一个单向 Hash函数来创建一个散列值或者摘要信息,将该散列值与文本结合向接收方传输,同时接受方用同样的单向Hash函数对接受内容进行解密,验证结果是否一致,以此来保护数据的完整性;第三个是防报文重放攻击,所谓重放攻击就是攻击者虽然不知道加密过的数据包里面到底是什么,但是可以通过截取这个数据包再发给接受方从而使接收方无法判别哪个才是正确的发送者,而AH协议会校验序列号字段中的数值是否重复过,若重复,则直接丢弃。图 6展示了AH在不同模式下的认证封装过程。
(2)ESP协议提供的安全服务
ESP与AH不同的是ESP会先把数据段加密,然后再存放到IP报文中,从而达到防止窃听的目的。ESP除了在 IP报头的后面会加上一个 ESP报头以外,还会在报文最后加上一个ESP报尾,该报尾用来提供加密服务。这样攻击者即使获取了该数据包,在没解开ESP加密的情况下也无法获知其中的信息。ESP报头的结构如图7所示。
图7 ESP 头Fig.7 ESP header
ESP提供的安全服务和 AH有所重合,ESP使用序列号字段来防止重放攻击,ESP通常使用HMAC-MD5或HMAC-SHA-1算法对加密后的载荷进行 Hash计算来完成认证和保证数据完整性的功能。但因为ESP会把数据加密之后再传输,因此会提供保密性服务,在传输机密性数据的时候ESP有很大优势。此外,在NAT模式下,由于AH会对IP地址也做Hash运算,因此在地址转换之后AH的Hash值会被破坏,而ESP的IP协议号是50,在进行NAT转换时没有相应的TCP或UDP端口号的概念。为了使ESP能够满足NAT环境下的地址转换,这时就需要引进一个新的方法,即在 ESP报文和 IP报头之间加入一个新的UDP报头,具体NAT转换过程如图8所示。
TLS协议工作在传输层,由于 TCP和 UDP都有可被利用的漏洞,因此它是为了解决传输层链路安全问题而出现的。TLS分为两种协议,分别是TLS记录协议和TLS握手协议。TLS记录协议根据TLS握手协议协商的参数,对上层所交付的数据进行各种操作,从而使数据通过密文的形式传输,而接收方则通过解密的方式来接受数据。通过这种方式就可以大大加强数据传输的安全性。
另一种协议是TLS握手协议,他让客户端和服务端进行协商,确定一组用于数据传输加密的密钥串,相互认证对方,这样当攻击者没有通过密钥认证时,就无法与另一端进行数据通信,具体握手过程如图9所示。
图8 IPSec穿越NAT的数据封装Fig.8 Data encapsulation of IPSec traversing NAT
首先,客户端向服务端发送ClientHello消息,其中含有一个客户端生成的随机数,我们假设为R1和可供选择的版本号清单等信息;第二步,根据客户端发来的Client Hello,服务端回复Server Hello消息,其中会根据客户端发来的清单数据确定两端通信将会使用的版本号,密码套件,压缩方式等等协议需要的重要信息,并产生一个服务端随机数R2,当服务器认证时,服务器会发给客户端自己的证书;第三步,当要求客户端认证时,客户端会先发送自己的证书,同时根据之前客户端和服务器端产生的随机数公用一种算法计算出密钥。最后相互发送了 Finished消息后就代表握手结束,可以开始传输数据。
图9 TLS 握手过程Fig.9 TLS handshake process
本文对 TCP/IP协议族中存在的问题和解决方法进行了归纳和分析。总的来说,TCP/IP上的安全问题主要集中于网络层上的攻击、传输层上的攻击和应用层上的攻击。攻击者利用各种欺骗手段或强制攻击使目的机瘫痪来盗取信息。对此,可以利用IPSec、SSL/TLS等安全架构在不同的协议层来保护数据传输的安全性。