SD-WAN技术详解之IPsec协议

摘要

通常 IP 协议是没有任何的安全措施的,其中各字段都以明文形式在互联网传播,虽然有“首部校验和”这样的字段来提供极其简易的完整性验证,但也无力抗拒对数据的意外或者故意修改,更无法阻止信息的泄露等问题。IPSec(Internet Protocol Security)能够很好解决上述问题,它是由 IEIF 设计的一种端到端的确保 IP 层通信安全的机制,它是一组协议而不是一个单独的协议,是 IPv6 的组成部分也是IPv4的可选扩展协议。目前 IPSec 最主要的应用是构造虚拟专用网(VPN),它作为一个第三层隧道协议实现了 VPN 通信,可以为 IP 网络通信提供透明的安全服务,保证数据的完整性和机密性,有效抵御网络攻击。本文详细介绍了 IPsec 的意义和特性,研究了其核心子协议 IKE、AH、ESP 的主要内容和作用,分析了 IPsec 多种运行模式及其各自特点和应用场景。

协议框架和特性

IPsec 通过 AH 协议、ESP 协议来提供安全保障,核心算法包括密钥协商算法、加密算法、认证算法,包括传输模式、隧道模式等两种认证模式,其协议框架如下图所示:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/IPSec_protocol_explain-2023-10-11-17-35-18.jpg
IPsec 协议框架

IPsec 协议具有以下优良特性:

  • 数据机密性:IPSec 发送方将包加密后再通过网络发送,可以保证在传输过程中,即使数据包遭截取,信息也无法被读取。
  • 数据完整性:IPSec 可以验证IPSec发送方发送过来的数据包,以确保数据传输时没有被改变。若数据包遭篡改导致检查不相符,将会被丢弃。
  • 可身份验证:IPSec 接受方能够鉴别IPSec包的发送起源,此服务依赖数据的完整性。
  • 抗重放攻击:确保每个 IP 包的唯一性,保证信息万一被截取复制后不能再被重新利用,不能重新传输回目的地址。该特性可以防止攻击者截取破译信息后,再用相同的信息包获取非法访问权。

术语表

缩写/名称 全称 解释
IPsec Internet Protocol Security 安全网络协议套件
SA Security Associations 安全联盟,约定IPsec中的安全协议(AH、ESP)、核心算法、封装模式、系统参数等
AH Authentication Headers 认证头协议,提供完整性校验、数据源认证、抗重放攻击
ESP Encapsulating Security Payloads 封装安全有效负载,提供加密、数据完整性、数据源认证、抗重放攻击
IKE Internet Key Exchange 网络密钥交换协议,动态协商算法所用密钥

核心子协议

SA 安全联盟

SA 是要建立 IPSec 通信双方对隧道参数的约定,包括隧道两端的IP地址、隧道采用的验证方式、验证算法、验证密钥、加密算法、共享密钥以及生命周期等一系列参数。SA 由三元组来唯一标识,这个三元组包括安全参数索引 SPI(Security Parameter Index)、目的 IP 地址和使用的安全协议号(AH 或 ESP),其中 SPI 是为唯一标识 SA 而生成的一个32位比特的数值,它在 AH 和 ESP 头中传输。SA 在逻辑上是单向连接,因此两个IPSec对等体之间的双向通信,最少需要建立两个SA来分别对两个方向的数据流进行安全保护,并且双方得互相维护它的状态,所以说IPsec是面向连接的,而IP是无连接的;SA 在算法上是单向的,何人根据SA的信息是无法逆推出,加密算法、密钥、鉴别算法。建立 SA 主要有两种方式:
手工方式(manual):建立 SA 所需的全部参数,包括 SPI、加密、验证密钥,都需要用户手工配置,也只能手工刷新,在中大型网络中,这种方式的密钥管理成本很高,且一经建立永久存在。
IKE 动态协商(isakmp):建立SA需要的加密、验证密钥是通过DH算法生成的,可以动态刷新,因而密钥管理成本低、安全性较高,且其生存周期由双方配置的生存周期参数控制。

IKE 协议

IKE(Internet Key Exchange,因特网密钥交换)常用来确保 VPN 与远端网络或者宿主机进行交流时的数据安全,其建立在 SA 和密钥管理协议 ISAKMP 定义的框架上,是基于 UDP 协议 500 端口号的应用层协议。IKE 在 IPSec 中主要提供了自动协商密钥、建立 IPSec 安全联盟服务、简化IPSec的使用和管理服务,以大大简化 IPSec 的配置和维护工作。IKE 通过身份认证(预共享密钥PSK认证/数字证书RSA认证/数字信封认证)、DH公共密钥交换算法、公共密钥交换方法PFS等技术来提供服务,具体可分为 IKE SA 协商阶段和 IPsec SA 协商阶段,主要包含以下三个组件:

  • SKEME:实现公钥加密认证的机制
  • Oakley:基于到达两个对等体间的加密密钥的机制
  • ISAKMP:在两个实体间进行分组格式及状态转换的消息交换的体系结构。

IKE SA 协商阶段

第一阶段 IKE SA 协商阶段提供主模式、野蛮模式等两种可选模式,前者安全性高但流程较多效率低,后者安全性稍低但流程较少效率高。主模式详细流程如下图所示:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/IPSec_protocol_explain-2023-10-12-11-12-17.jpg
主模式详细流程

由上图可知,主模式主要完成了三次交换:

  • 消息1和2用于策略交换 发起方发送一个或多个IKE安全提议,响应方查找最先匹配的IKE安全提议(协商过程中用到的加密算法、认证算法、Diffie-Hellman组等),并将这个IKE安全提议回应给发起方。匹配的原则为协商双方具有相同的加密算法、认证算法、认证方法和Diffie-Hellman组标识。
  • 消息3和4用于密钥信息交换 双方交换Diffie-Hellman公共值和nonce值(随机数,用于保证 IKE SA 存活和抗重放攻击),用于IKE SA的认证和加密密钥在这个阶段产生。
  • 消息5和6用于身份和认证信息交换 双方进行身份认证和对整个主模式交换内容的认证。

野蛮模式详细流程如下图所示:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/IPSec_protocol_explain-2023-10-12-11-12-39.jpg
野蛮模式详细流程

由上图可知,野蛮模式只用到三条信息:消息1和2用于协商IKE安全提议,交换Diffie-Hellman公共值、必需的辅助信息以及身份信息,并且消息2中还包括响应方发送身份信息供发起方认证,消息3用于响应方认证发起方。
综上,第一阶段主要协商了 IKE:

  • 参数配置:认证方法算法,选择预共享密钥或数字证书认证,Diffie-Hellman 组的选择。
  • 加密算法:DES、3DES、AES-128、AES-192 或AES-256。
  • HASH算法:MD5、SHA。
  • DH 交换:交换 DH 算法生成共享密钥所需要的基本材料信息,通信双方可以根据密钥材料生成出完全一样的共享“主密钥”以保护紧接其后的认证过程。
  • 认证:“主密钥”结合前面协商确定的认证算法,对通信实体和通信信道进行认证,过程中整个待认证的实体载荷(实体类型、端口号、协议等)均由前一步生成的“主密钥”提供机密性和完整性保证。

IPsec SA 协商阶段

第二阶段是在第一阶段的基础上,协商用于最终 IPsec 数据保护的 IPsec SA,本阶段所有消息受 IKE SA 保护,没有被保护的消息将会被拒收。IPsec SA 协商详细流程如下图所示:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/IPSec_protocol_explain-2023-10-12-11-13-12.jpg
IPsec SA 协商详细流程

由上图可知,第二阶段主要协商了 IPsec:

  • 使用哪种 IPSec 协议:AH 或ESP
  • 是否使用 hash 算法:MD5、SHA 或NULL
  • 是否要求加密,若是,选择加密算法:DES 或 3DES、AES-128、NULL、AES-192 或 AES-256

在上述两阶段完成后,双方即建立起了两个 IPsec SA 用于发送/接受通信。

AH 协议

AH(Authentication Header)协议使用 HMAC 算法为 IP 报文提供完整性校验、数据源认证服务。HMAC 是一种需要对称密钥的 Hash 算法,采用相同 HMAC 算法和共享密钥的双方才能产生相同的验证数据,因此 IPSec 必须实现 HMAC-MD5 和 HMAC-SHA1 算法。一般在验证过程中,验证失败的IP报文将被丢弃而不交给上层协议解密,这种操作模式可以减少拒绝服务攻击成功的机会。
AH 协议是被 IP 协议封装的协议之一,如果 IP 协议头部的“下一个头”字段是51,则IP包的载荷就是 AH 协议,在IP包头后面跟的就是AH协议头部。AH报文头结构如下图所示:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/IPSec_protocol_explain-2023-10-12-11-06-07.jpg
AH报文头结构

上图中各个字段含义如下:

  • 下一个头(8位):表示紧跟在 AH 头部后面的协议类型。在传输模式下,该字段是处于保护中的传输层协议的值,如6(TCP)、17(UDP)或50(ESP)。在隧道模式下,AH保护整个IP包,该值是4,表示是 IP-in-IP 协议。
  • 有效载荷长度(8位):表示 AH 报头的长度,其值是以32位(4字节)为单位的整个 AH 数据(包括头部和变长验证数据)的长度再减2。
  • 保留(16位):准备将来对 AH 协议扩展时使用,目前协议规定这个字段应该被置为0。
  • 安全参数索引 SPI(32位):用于唯一标识 SA,用来标识发送方在处理 IP 数据包时使用了哪些安全策略(AH 或 ESP),当接收方看到这个字段后就知道如何处理收到的 IPsec 包。一般是在IKE交换过程中由目标主机选定的。
  • 序列号(32位):一个单调递增的计数器,为每个 AH 包赋予一个序号。当通信双方建立 SA 时,初始化为0。SA 是单向的,每发送/接收一个包,外出/进入 SA 的计数器增1。该字段可用于抗重放攻击。
  • 验证数据:可变长,HMAC算法生成的完整性验证码,是通过 IP 报头、AH 报头与 IP 负载来计算的,它的生成算法由 SA 指定,即完整性校验值 (ICV)。AH可对整个数据包(IP 报头与数据负载)提供保护,所以不论是传输模式还是隧道模式,AH协议都不能穿越nat设备

在使用 AH 协议时,AH 协议首先在原数据前生成一个 AH 报文头,报文头中包括一个递增的序列号与验证字段(空)、安全参数索引(SPI)等。AH 协议将对新的数据包进行离散运算,生成一个验证数据(authentication data)并填入自身。在传输模式下,AH 协议验证 IP 报文的数据部分和 IP 头中的不变部分。在隧道模式下,A H协议验证全部的内部 IP 报文和外部 IP 头中的不变部分。

ESP 协议

ESP 协议提供数据完整性验证和数据源身份认证的原理和 AH 一样,只是和 AH 比 ESP 的验证范围要小些。ESP 协议规定了所有 IPSec 系统必须实现的验证算法有HMAC-MD5、HMAC-SHA1、NULL,必须实现的对称加密算法是 DES-CBC 和 NULL,其中 NULL 是指实际上不进行加密或验证。和 L2TP、GRE、AH 等其他技术相比,ESP 具有特有的安全机制——加密,而且可以和其他隧道协议结合使用,为用户的远程通信提供更强大的安全支持。
ESP 协议是被 IP 协议封装的协议之一,如果 IP 协议头部的“下一个头”字段是50,则IP包的载荷就是 ESP 协议,在IP包头后面跟的就是 ESP 协议头部。ESP 报文头结构如下图所示:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/IPSec_protocol_explain-2023-10-12-11-09-42.jpg
ESP 报文头结构

上图中各个字段含义如下:

  • 安全参数索引SPI(32位):用于唯一标识 SA,用来标识发送方在处理 IP 数据包时使用了哪些安全策略(AH 或 ESP),当接收方看到这个字段后就知道如何处理收到的 IPsec 包。一般是在IKE交换过程中由目标主机选定的。
  • 序列号(32位):一个单调递增的计数器,为每个 ESP 包赋予一个序号。当通信双方建立 SA 时,初始化为0。SA 是单向的,每发送/接收一个包,外出/进入 SA 的计数器增1。该字段可用于抗重放攻击。
  • 报文有效载荷:是变长的字段,如果 SA 采用加密,该部分是加密后的密文;如果没有加密,该部分就是明文。
  • 填充项:是可选的字段,为了对齐待加密数据而根据需要将其填充到4字节边界。
  • 填充长度:以字节为单位指示填充项长度,范围为[0,255]。保证加密数据的长度适应分组加密算法的长度,也可以用以掩饰载荷的真实长度对抗流量分析。
  • 下一个头:表示紧跟在ESP头部后面的协议,其中值为6表示后面封装的是 TCP。
  • 验证数据:是变长字段,是通过 ESP 报头、负载数据与 ESP 尾端计算,包含完整性校验值(ICV),只有选择了验证服务时才需要有该字段。

ESP 在传输模式时会保护 TCP/UDP 头,但是并不保护 IP 头,因此修改 IP 地址并不会破坏整个数据包的完整性。但是如果数据包是TCP/UDP数据包,NAT设备就需要修改数据包的校验值,而这个校验值是被ESP 所保护的,这样却会导致完整性校验失败,所以ESP在传输模式不能用于NAT穿越。ESP 在隧道模式下,NAT 会修改新增的IP头,新增IP协议的数据时 ESP,就不需要像 TCP/UDP 一样修改 ESP 的验证,所以ESP在隧道模式下可以用于NAT穿越

AH 和 ESP 主要区别是:一个是 AH 不提供加密服务,另一个是它们验证的范围不同,ESP 不验证 IP 报头,而 AH 同时验证部分报头,所以需要结合使用 AH 和 ESP 才能保证 IP 报头的机密性和完整性。很多情况下,AH 的功能已经能满足安全的需要,ESP 由于需要使用高强度的加密算法,需要消耗更多的计算机运算资源,使用上受到一定限制。

IPsec 协议模式

  • 传输模式
    传输模式(Transport Mode)是 IPSec 的默认模式,又称端到端(End-to-End)模式,适用于两台主机之间进行 IPSec 通信。传输模式下只对 IP 上层协议(负载)进行保护,可以是 TCP/UDP/ICMP/AH/ESP 协议。在此种模式下,通信双方主机都必须安装 IPSec 协议,而且它不能隐藏主机的 IP 地址。启用 IPSec 传输模式后,发送方会先在传输层包的前面增加 AH/ESP 头部或同时增加两种头部以构成一个 AH/ESP 数据包,然后添加 IP 头部组成 IP 包;接收方先按 IP 协议解包然后再做 IPSec 处理,最后再将载荷数据交给上层协议。传输模式报文结构如下图所示:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/IPSec_protocol_explain-2023-10-12-10-59-27.jpg
传输模式报文结构

  • 隧道模式
    隧道模式(Tunnel Mode)适用在两台网关之间,又称站点到站点(Site-to-Site)的通信,参与通信的两个网关实际是为了两个以其为边界的网络中的计算机提供安全通信的服务。隧道模式为 IP 协议本身而不只是上层协议提供安全保护,通常情况下只要通信双方有一方是网关就必须使用隧道模式。隧道模式的一个优点是可以隐藏内部主机和服务器的 IP 地址,因此被广泛用于 VPN,因为它对通信的源地址和目的地址进行部分和全部加密,且只需要在安全网关安装 VPN 软件,期间所有加密和解密以及协商操作均由网关负责完成。启用 IPSec 隧道模式后,IPSec 将原始 IP 看作一个整体作为要保护的内容,在前面加上 AH/ESP 头部后再加上新IP头部组成新IP包。隧道模式的数据包有两个 IP 头,内部头由路由器背后的主机创建,是通信终点;外部头由提供 IPSec 的设备(如路由器)创建,是 IPSec 的终点。事实上,IPSec的传输模式和隧道模式分别类似于其他隧道协议(如 L2TP)的自愿隧道和强制隧道,即一个是由用户实施,另一个由网络设备实施。隧道模式报文结构如下图所示:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/IPSec_protocol_explain-2023-10-12-11-00-13.jpg
隧道模式报文结构

综上,传输模式和隧道模式主要有以下区别:

  • 安全性:隧道模式优于传输模式,它可以完全对原始IP数据包进行验证和加密,且能够隐藏内部IP地址、协议类型、端口。
  • 性能:隧道模式有一个额外的 IP 头,所以它将比传输模式占用更多的带宽。
  • 使用场景:传输模式主要应用于两台主机之间通信;隧道模式主要应用于两台VPN网关之间或一台主机与一台VPN网关之间的通信。

参考