网络服务安全与监控
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.2 传输安全

在介绍完网络边界安全之后,下面介绍网络层传输安全。

5.2.1 VPN

虚拟专用网络(Virtual Private Network,VPN)通过加密通信在公用网络上建立专用网络,使不同网络区域之间的资源能够跨过防火墙互访,实现员工的企业远程访问和应用的云网互通等业务场景。VPN可通过服务器、硬件、软件等多种方式实现,主要的通信协议主要有PPTP、L2TP和IPSec。其中,PPTP和L2TP协议工作在OSI模型的第二层(又称为二层隧道协议),IPSec是第三层隧道协议。

1. IPSec(Internet Protocol Security)

1)IPSec VPN概述

(1)IPSec VPN是IP层也就是第三层VPN,封装时IP头为明文,IP头之后是加密的密文。

(2)IPSec VPN可以实现源认证和不可否认性、完整性、私密性,以及防重放攻击的功能。

(3)IPSec VPN数据封装协议可以使用负载安全封装协议(ESP)或认证头协议(AH),也可以两者共同使用。如果两者共同使用建议ESP协议头在里层,AH协议头在外层。

(4)IPSec VPN可以实现私网与私网之间跨互联网的安全通信。

2)IPSec VPN加密点与通信点

IPSec VPN加密点与通信点的描述如下,同时可以参考图5-6来理解。

图5-6 加密点与通信点

(1)通信点:实际通信实体。

(2)加密点:负责加密解密的设备。

3)IPSec VPN的工作模式

IPSec VPN的两种工作模式如下。

(1)传输模式:IPSec VPN的可选模式。传输模式下加密包产生新的可路由IP头,可解决不同私有网络之间跨越互联网的数据包加密传输问题,当加密点等于通信点时可以使用此模式,如GRE Over IPSec VPN可以选择传输模式。

(2)隧道模式:IPSec VPN的默认模式。此模式下加密包不产生新的IP头部,要求原IP包可在互联网路由,要求通信点和加密点为同一IP,所有IPSec VPN都可以使用此模式。

IPSec的两种工作模式如图5-7所示。

图5-7 IPSec的两种工作模式

在传输模式下,原始IP数据包在进行IPSec封装时,会在原始IP头与IP数据之间插入ESP协议头。在隧道模式下,原始IP包将整个被加密,前面打上新的ESP头部和新的IP头部。所以通常在加密点等于通信点的情况下,建议将模式修改为传输模型,因为这样可以节省一个IP头的空间作为有效负载。

4)SA安全联盟

(1)“安全联盟”(IPSec术语,常简称为SA)是构成IPSec的基础。SA是两个通信实体经协商建立起来的一种协定。它们决定了用来保护数据包安全的IPSec协议、转码方式、密钥及密钥的有效期等。任何IPSec实施方案始终会构建一个SA数据库(SADB),由它来维护IPSec协议用来保障数据包安全的SA记录。

(2)SA是单向的。如果两个主机(如A和B)正在通过ESP进行安全通信,那么主机A就需要一个SA,即SA(out),用来处理外发的数据包;另外,还需要一个不同的SA,即SA(in),用来处理进入的数据包。主机A的SA(out)和主机B的SA(in)将共享相同的加密参数(如密钥),也就是说,主机A由什么策略加密出去,从主机B进来时就用什么策略解密。

(3)SA还是与“协议相关”的。每种协议都有一个SA。如果主机A和B同时通过AH和ESP进行安全通信,那么每个主机都会针对每种协议来构建一个独立的SA。

(4)一般来说,如果只是用了ESP进行IPSec封装,当一端加密点完成IPSec VPN协商以后,应该存在3个SA,一个Isakmp SA,两个IPSec SA,其中一个ESP Out,一个ESP In。

5)SPD安全策略数据库

关于SPD检索的输出,可能有下面几种情况。

(1)丢弃这个包。此时包不会被处理,只是简单地丢掉。(能够在PC上采用)一般是无法向外转发的包,如没有路由的包。

(2)绕过安全服务。在这种情况下,IP层会在载荷内增添IP头,然后分发IP包(也就是没有被感兴趣的流量匹配的包)。

(3)应用安全服务。(被感兴趣流量匹配的包)在这种情况下,假如已建立了一个SA,就会返回指向这个SA的指针。假如尚未建立SA,就会调用IKE,将这个SA建立起来;如果SA已经建立,SPD内便会包含指向SA或SA集束的一个指针(具体由策略决定)。如果策略的输出规定强行将IPSec应用于数据包,那么在SA正式建立之前,包是不会传送出去的。这也是IPSec VPN的特性,数据包一旦被感兴趣的流量匹配,要么加密转发出去,要么没有加密丢弃。

6)封装安全负载协议(Encapsulation Security Payload,ESP)

(1)ESP的模式与包结构。

ESP主要包括两种运行模型,即隧道模式和传输模式,这两种模式的包结构分别如图5-8和图5-9所示。

图5-8 隧道模式ESP包结构

图5-9 传输模式ESP包结构

① IP头部:最外围IP头部是后加的加密点IP头部。

② 安全标识(SPI):是IPSec SA的ID和目标IP一起标示一个IPSec包,在出向封装时,应用出向SPID,当入向检查时应该检查对端IP且检查在本端的入向SPI中是否可以找到这个ID。如果可以找到,则认为合法,否则将会报告错误的SPI并丢弃这个包。例如,如果A和B建立了IPSec VPN,A有SA out和SA in,B有SA out和SA in,当A加密一个包发给B时,会将自己的SA out的ID写在SPI这个位置上,当B收到这个包时,在自己的SA in里面寻找这个ID是否存在。

③ 序列号:也就是SN码,可以用于防重放攻击。当A加密一个数据包时,将IPSec进程的下一个序列号放在SN这个位置上,当B收到这个包时,检查SN码是否是期待的下一个ID,假如当前序列已经收到了100,而A发给B的SN码还是100,那么这时B会认为是重放攻击,将这个包丢弃。

④ 初始化向量(IV):也就是初始化向量,也称为CBC的加密种子,我们知道IPSec VPN使用了CBC(加密块链接)的块加密类型,IV是用于和第一个明文数据块做异或的种子。

⑤ (内部的)IP头部:原始数据包的IP头也就是通信的IP头。在隧道模式中被封装在加密数据中。

⑥ TCP头部:原始IP包上层协议。

⑦ 数据:原始数据包的数据部分,被封装在加密数据中。

⑧ 填充物:由于IPSec VPN使用了块加密类型,一个数据在进行切块加密封装时有可能尾部不足56比特,因此需要填充为56比特进行加密,而填充物部分就是填充的数据。

⑨ 填充物长度:用于描述尾部填充了多少比特。

⑩ 下一个头:下一个头协议,用于描述加密包经过解密后露出的最外面的头协议,如在隧道模式下,如果将数据包解密,出现明文数据头或IP包头,那么这时的“下一个头”就应该是4,表示IP in IP。

11 认证数据:用于容纳Hash的验证结果。

与隧道模式不同的是,传输模式少了一个IP头部,而“下一个头”部分在传输模式下,应该是解密后的明文数据头,在这里明文数据头解密后是TCP,也就是说这里的“下一个头”应该是6;如果上层协议是UDP,那么“下一个头”在这里就应该是17;如果上层协议是ICMP,那么这里就是1。

(2)关于ESP包的出向处理。

① 传送模式:ESP头紧跟在IP头(包括IP头可能有的任何选项)之后,插入一个出向的IP包中。IP头的协议字段被复制到ESP头的“下一个头”字段中,ESP头的其余字段则被填满——SPI字段分配到的是来自SADB的用来对这个包进行出向处理的特定SA的SPI;填充序列号字段的是序列中的下一个值;填充数据会被插入,其值被分配;同时分配的还有填充长度值。随后,IP头的协议字段得到的是ESP的值或51。

② 通道模式:ESP头是加在IP包前面的。一个IPv4包,ESP头的“下一个头”字段分配到值4;其他字段的填充方式和在传送模式中一样。随后,在ESP头的前面新增了一个IP头,并对相应的字段进行填充(赋值)——源地址对应于应用ESP的设备本身;目标地址来自应用ESP的SA;协议设为51;其他字段的值则参照本地的IP处理加以填充。

③ 从恰当的SA中选择加密器(加密算法),对包进行加密(从载荷数据的开头,一直到“下一个头”字段)。

④ 使用恰当的SA中的验证器(Hash算法),对包进行验证(自ESP头开始,中间经过加密的密文,一直到ESP尾)。随后,将验证器的结果插入ESP尾的“验证数据”字段中。

⑤ 重新计算位于ESP前面的IP头的校验和。

(3)关于ESP包的入向处理。

① 检查收到包的SPID在本地入向SPI中是否存在。如果有就继续处理;如果没有就丢弃。

② 检查序列号是否有效,并且检查包大小是否小于我的Window Size。

③ 对数据包完整性和来源进行验证,也就是对数据包进行Hash运算,并与Authentication Data部分抽出的Hash进行比对。如果比对成功就继续处理;如果比对失败就丢弃。

④ 对数据包解密(根据相关SA的策略选择相应的密钥和算法对包进行解密)。

⑤ 对数据包进行初步的有效性检验(如在L2L VPN中解密后流量需要再使用本地的感兴趣流量列表反向检查一遍)。

⑥ 验证模式是否匹配。

⑦ 传送模式:上层协议头与IP头是同步的,ESP头的“下一个头”字段被复制到IP头的协议字段中,并计算出一个新的IP校验和。

⑧ 通道模式:抛开外部IP头和ESP头,这里需要的是这个解开封装的包。这时,必须进行另一个有效性检验。如果这个包和所要求的协议(SA)不相符,就必须将它丢弃。

⑨ 传送模式:转送到一个高一级的协议层,如TCP或UDP,由它们对这个包进行处理。

⑩ 通道模式包:重新插入IP处理流中,继续转发到它的最终目的地(也许在同一个主机上)。

2. PPTP

点对点隧道协议PPTP(Point to Point Tunneling Protocol)是实现VPN的方式之一,PPTP使用TCP创建控制通道来发送控制命令,并利用通用路由封装GRE通道来封装点对点协议PPP数据包以发送数据。

PPTP的协议规范本身并未描述加密或身份验证的部分,它依靠PPP来实现这些安全性功能。因为PPTP协议内置在微软视窗系统家族的各个产品中,在微软点对点协议PPP协议堆栈中,提供了各种标准的身份验证与加密机制来支持PPTP。在微软视窗系统中,它可以搭配PAP、CHAP、MS-CHAPv1/v2或EAP-TLS来进行身份验证。通常也可以搭配微软点对点加密MPPE或IPSec的加密机制来提高安全性。

3. L2TP

L2TP(Layer Two Tunneling Protocol)是一种工业标准的互联网隧道协议,功能大致与PPTP协议类似,如同样可以对网络数据流进行加密。不过也有不同之处,如PPTP要求网络为IP网络,L2TP要求面向数据包的点对点连接;PPTP使用单一隧道,L2TP使用多隧道;L2TP提供包头压缩、隧道验证,而PPTP不支持这些功能。

L2TP通常用于VPN,L2TP协议自身不提供加密与可靠性验证的功能,可以与加密协议搭配使用,从而实现数据的加密传输。经常与L2TP协议搭配的加密协议是IPSec,当这两个协议搭配使用时,通常合称L2TP/IPSec。

5.2.2 SSL

SSL(Secure Socket Layer)最早由Netscape发明,用以保障互联网上数据传输的安全,利用数据加密技术,可确保数据在网络上的传输过程中不会被截取及窃听。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol)和SSL握手协议(SSL Handshake Protocol)。SSL记录协议建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议建立在SSL记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。

SSL的应用包括HTTPS(Hypertext Transfer Protocol Secure)安全超文本传输协议(可以说是HTTP的安全版),Extended Validation SSL Certificates扩展验证EV SSL证书,以及各种网络应用之间的数据传输。