IPSec协议簇(含Cisco实验配置)

什么是IPSec

早期的网络并不像现在这样,使用者大部分都是科学家并且一般是组织内部成员进行通信,所以在设计之初并没有考虑其安全性。但对于现在的网络,保障通信安全是非常重要的,而IPSec协议簇可以保障网络层的安全性。

IPSec是一组基于网络层的应用密码学的安全通信协议簇。它是VPN中常用的一种技术。

设计目标:为IPv4和IPv6提供客户操作的、高质量的、基于密码学的安全保护。

功能:工作在网络层,提供身份认证、机密性、完整性三个安全服务,并防止重放攻击和提供有限通信流机密性保护。

IP协议是唯一一个由所有高层协议共享的协议。在IP层实现安全可以为上层应用提供安全保障,各种应用程序可共享IP层提供的安全服务和密钥管理,不必设计自己的安全机制,减少密钥协商的开销,有利于降低安全漏洞产生的可能。

IPSec有四种典型应用:

  • 端到端安全
  • 基本的VPN支持
  • 保护移动用户访问内部网
  • 嵌套式隧道

IPSec架构

IPSec VPN体系结构如下图:

  • DOI:将IPSec与RFC文档联系一起,批准加密和认证算法标识、运行参数等。
  • 密钥管理:IPSec密钥管理主要由IKE完成。定义了通信实体间进行身份认证、协商加密算法以及生成共享的会话密钥的方法。IKE将密钥协商的结果保留在安全关联(SA)中,供AH和ESP以后通信使用。
  • AH协议:使用认证报文包格式和一般性问题。
  • ESP协议:使用ESP进行包加密的报文包格式和一般性问题,以及可选的认证。

IPSec工作模式

IPSec工作模式分为两种:

  • 传输模式
  • 隧道模式

传输模式

传输模式将IPSec协议头插入到原IP头部与传输层头部之间,只对有效载荷进行加密或认证

即使在子网内部中的其他用户也不能理解上面拓扑中两台主机之间的通信内容。

由于每个需要实验传输模式的 主机都必须安装并实现IPsec协议,因此不能实现对端用户的透明服务。用户为了获得IPsec提供的安全服务,必须消耗内存、花费处理时间。

由于传输模式仅对有效载荷进行保护,而对于原IP包头部不会进行修改(缺乏保护),所以会暴露内网拓扑结构。

隧道模式

隧道模式会创建新的IP包头部,并把原来的部分都当作有效载荷封装。

如此,子网内部所有用户都可以享受网关提供的安全保护,不会暴露内网拓扑结构,而且主机可以使用私有IP地址。

但子网内部以明文方式进行,无法控制内部发生的安全性问题。而且,由于IPSec主要集中在网关上(解封装更换IP头部等),增加了网关的负担,容易造成通信瓶颈。

注意

上图不讨论所使用的协议,示意图是抽象的。

实际来讲,对于ESP协议,上图的数据包还包含一个ESP尾部,这个请看下文。

AH协议

工作原理

工作原理是在每个数据包上添加一个身份验证报头。此报头包含一个带密钥的hash散列,此hash散列在整个数据包中计算,因此对数据的任何更改将致使散列无效,这样就提供了完整性保护。

AH协议对整个数据包进行验证,但本身不提供任何形式加密。

在计算认证数据时,AH会把前面的IP首部中的部分字段也包含在内。必须保证计算认证数据时,输入在传输中不变,或者变化但可以预测。变化的字段不考虑,不变的字段加入,变化但可预测的的字段则使用预测到的、到达目的端后变化的值。

AH协议下的IPSec头部为AH头部,其结构如下图。

  • 认证数据:变长字段,是AH使用消息认证码(MAC)对IP数据包进行认证,生成认证数据即完整性校验值ICV。(顺带提一点,原IP协议的校验和对于数据完整性能力有限)
  • 序列号:对于一个包,外出情况,则外出SA计数器增加1;接收的话,则进入SA计数器增加1。用于抗重放攻击。

处理过程

处理过程主要讨论设备在拿到一个包的时候,对于外出和进入时的数据包的处理。

外出处理

  • 检索SPD,查找应用于该数据包的策略:以选择符为索引
  • 查找对应的SA:SPD通过SPI指向SAD中的一个相应SA,从SA中得到相关安全参数;若SA尚未建立,则调用IKE协商一个SA,并将其连接到该SPD条目上。
  • 构造AH载荷:按照SA中给出的处理模式填充AH载荷的各个字段(复制IP头、计算载荷长度、填入SPI值、产生或增加序列号值、计算ICV并填入)
  • 为AH载荷添加IP头:传输模式添加原IP头;隧道模式构造新的IP头
  • 其他处理:重新计算外部IP头校验和;若分组长度大于MTU(Maximum Transmission Unit)则进行IP分段。
    处理完的数据包交给数据链路层(传输模式)发送或IP层(隧道模式)重新路由。

进入处理

  • 分段重组,检查MF位,若存在分段,则重组。
  • 查找对应的SA:使用外部IP头中的<SPI,目的IP地址,协议号>作为索引检索SAD,以找到处理该分组的SA。若查找失败,则丢弃。
  • 抗重放处理:若启用了抗重放功能,则使用SA的抗重放窗口检查是否是重放包。若是重放,则丢弃。
  • 完整性检查:使用SA指定的MAC算法计算数据包的ICV,将它与认证数据字段中的值进行比较。若不匹配,则丢弃。
  • 嵌套处理:若是嵌套包则返回第二步,循环处理。
  • 检验策略的一致性。使用IP头(隧道模式中是内部头)中的选择符进入SPD查找一条与选择符匹配的策略,检查该策略与SA指向的SPD条目的安全策略是否一致;若不匹配则丢弃。

传输流程

传输流程主要关注数据包在网络中的传递和处理数据包的设备。而这个设备,其处置数据包的方式细节为上文中的处理过程。

传输模式

在传输模式下(通常P2P),数据包格式如下:

处理流程如下图所示:

AH在传输模式下认证工作原理图

隧道模式

隧道模式数据包格式如下:

其传输流程如下图:

ESP协议

工作原理

AH协议不提供加密。而ESP协议提供数据完整性、数据源发认证、抗重放攻击、机密性和有限的传输流机密性。

报文内容机密性保护通过密码算法加密数据包相关部分实现;流机密性保护通过隧道模式下的机密性保护范围提供。

在使用ESP时,IPSec头部为ESP头,与AH不同的是,ESP会在数据(有效载荷)后面添加一个ESP尾。

我们来看下使用ESP协议的IP数据包除去IP头部以后的部分(注意,这里不仅仅是ESP头部,之所以这样写是因为ESP会对数据部分进行填充并且添加尾部

  • 认证数据:长度不固定,存放ICV,通过对认证数据字段外的ESP包进行计算获得

处理过程

外出处理

  • 检索SPD,查找应用于该数据包的策略
  • 查找对应的SA:SPD通过SPI指向SAD中的一个相应SA,从SA中得到相关安全参数若SA尚未建立,则调用IKE协商一个SA,并将其连接到该SPD条目上。
  • 构造ESP载荷:按照SA中给出的处理模式填充ESP载荷的各个字段
  • 为ESP载荷添加IP头:传输模式添加原IP头;隧道模式构造新的IP头
  • 对ESP进行加密和认证处理
  • 其他处理:重新计算外部IP头校验和;若分组长度大于MTU(Maximum Transmission Unit)则进行IP分段。处理完的数据包交给数据链路层(传输模式)发送或IP层(隧道模式)重新路由。

进入处理

  • 分段重组,检查MF位,若存在分段,则重组。
  • 查找对应的SA:使用外部IP头中的<SPI,目的IP地址,协议号>作为
  • 引检索SAD,以找到处理该分组的SA。若查找失败,则丢弃。
  • 抗重放处理:若启用了抗重放功能,则使用SA的抗重放窗口检查是否是重放包。若是重放,则丢弃。
  • 完整性检查:使用SA指定的MAC算法计算数据包的ICV,将它与认证数据字段中的值进行比较。若不匹配,则丢弃。
  • 解密数据包
  • 恢复IP数据包
  • 检验策略的一致性。使用IP头(隧道模式中是内部头)中的选择符进入SPD查找一条与选择符匹配的策略,检查该策略与数据包实际收到的安全保护是否一致;若不匹配则丢弃。

传输流程

传输模式

传输模式下的包格式:

ESP头部由SPI和序列号组成,尾部由填充项、填充项长度和下一个头字段组成,并标明了数据包被加密和认证的部分。ESP不对整个IP包进行认证。

隧道模式

AH与ESP嵌套使用

AH和ESP同时使用的时候,AH包头在前,ESP头部在后,并且数据部分后面有个ESP尾部和ESP认证。

在处理的时候,按照传输模式或者隧道模式下的各协议约定来进行即可。比如AH协议几乎是认证整个数据包,那就把ESP的部分看为数据部分,然后到处理ESP的时候,再按照ESP协议的处理流程来。

安全策略SP与安全策略数据库SPD

概念

安全策略(SP)是针对安全需求给出的一系列解决方案,它决定了对什么样的通信实施安全保护,以及提供何种安全保护。

安全策略表示:

  • 一般而言,不存在一个映射方式,可以将自然语言表达式无损的映射到形式语言表达式中。
  • 从基本流程上来说,IPSec安全策略管理需要提供一个人机接口,以安全管理员用尽可能自然的方式输入非形式化的安全策略表达式。
  • 安全策略通常以安全策略库(SPD)的形式表现出来,库中每条记录对应一个安全策略。

安全策略的管理:

  • 网络安全是非常复杂的领域,网络规模越大,描述如何保障安全的策略就越复杂。
  • 随着网络规模的扩大,必须集中管理安全策略。
  • IPSec系统所使用的SPD一般保存在一个策略服务中。
  • 该服务器为域中的所有节点(主机和路由器)维护策略库。
  • 各节点可将策略拷贝得本地,也可使用轻目录访问协议(Lightweight Directory Access Protocol, LDAP)动态获取策略

安全策略的要素:

  • IPSec规定了两个策略组件:SPD和安全关联库(Security Association Database, SAD)
  • 对于外出数据报,必须先检索SPD,决定提供给它的安全服务。对进入数据报,也要检索SPD,判断为其提供的安全保护是否与策略规定的安全保护相符。
  • SPD是有序的,每次查找的顺序应相同。

通信特征

IPSec规定可以使用以下元素描述通信特征

  • 目的IP地址
  • 源IP地址
  • 名字
  • 传输层协议
  • 源和目标端口
  • 数据敏感等级

因此在SPD中对于SP的属性就有如下图所示几种:

  • 系统名:完整的DNS或E-mail地址
  • 用户ID:完整的DNS用户名
  • 上层端口:TCP或UDP端口号,可为单个端口、端口列表或通配端口
  • 标志:采取的动作,如Discard/Bypass IPSec/Apply IPSec
  • SA指针:包括SA或SA集的指针、IPSec协议、运用的密码算法。

安全关联SA与安全关联数据库SAD

安全参数索引SPI唯一标识SA,在AH和ESP头中传输,因此IPSec数据包的接收方很容易识别出SPI,组合成三元组来搜索SAD,以确定与该数据包相关联的SA。

安全关联库(SAD)维护了IPSec协议用来保障数据保安全的SA记录。每个SA都在SAD中有一条记录相对应。对于外出处理,应在SPD中查找指向SAD中SA的指针,如SA未建立,则应激活IKE建立SA,并同SPD和SAD的记录关联起来。SAD通过Hash表来构造。

SAD的查找是通过一个三元组(SAID):协议、目的地址、SPI来进行的,三元组标识了唯一的SA。通过对SAID的散列找到SA头,然后再进行详细匹配找到相应的SA。

  • SPI:安全参数索引,32位整数,唯一标识SA,1-255被IANA保留为将来使用,0被保留用于本地实现。
  • 协议:AH或ESP
  • 序列号计数器:32位整数,初始值位0,每次用SA来保护一个包时增加1,用于生成AH或ESP头中的序列号域。溢出前SA会重新协商。
  • 序列号溢出:用于外出包处理,表示序列号计数器溢出的时候,一个SA是否仍可以用来处理其余的包。
  • 抗重放窗口:使用32位计数器和Bitmap来确定一个输入的AH或ESP数据包是否是一个重放包。
  • ESP加密算法:加密算法(不是认证)所需密钥、初始化向量IV和IV模式(ECB、CBC、CFB、OFB)。
  • 操作模式:传输模式、隧道模式。
  • PMTU:路径最大传输单元,可测量和变化,是IP数据报经过特定的源host到目的host的网络路由而无需分段的IP数据包最大长度。
  • SA生存周期:包含一个时间间隔,外加一个当SA过期时是否被替代还是终止。采用软存活时间和硬存活时间(二者同时存在)。软存活时间在SA到期前通知内核,便于在硬存活时间到来前内核能及时协商新的SA。

IP分组

外出IP分组:

进入IP分组:

IKE协议

概念

IKE( Internet Key Exchange ,RFC2409):因特网密钥交换协议,是一个以受保护的方式动态协商和维护SA的协议。

IKE协商分为两个阶段:

  • 阶段1:主要是协商安全策略、认证模式,以及所有的必须参数,在通信主体间创建IKE SA,用于保护阶段2的交换
  • 阶段2:
  • l阶段2中,主要为IPSec和其他一些安全服务创建SA。

IKE定义了四种模式:

  • 阶段1提供主模式野蛮模式
  • 阶段2提供快速模式新群模式

IKE使用D-H交换生成共享的会话密钥,通信双方可利用新群模式协商如何使用一个新的D-H群。

IKE功能如下:

  • SA协商
  • 密钥生成
  • 身份认证

SA协商是IKE协商的一项核心内容,它规定的SA属性包括加密算法、散列算法、认证方法、D-H群信息、伪随机函数、群描述、群类型、生命期类型、生命期以及密钥长度。

IKE加密算法

属性名标识取值含义
加密算法11DES-CBC
2IDEA-CBC
3Blowfish-CBC
4RC5-R16-B64-CBC
53DES-CBC
6CAST-CBC
7-65000保留
65001-65535私有使用

IKE群相关属性

群相关属性:

  • D-H群决定了在进行一次D-H交换时通信双方需要使用的参数是什么。IKE定义了4个具体的群,表示群属性的数字是指群号。
  • 对一个指定的群号,其对应的群参数是固定的。所以,当一方给出一个群号时,对方与其使用的参数相同。

IKE与定义群:

  • MODP群(模指数群):768Bits、1024Bits
  • EC2N群:155Bits、185Bits

MODP的768Bits群是必须实现的,它和EC2N的155Bits群为密钥交换提供了强度类似的安全保护。

伪随机函数PRF

伪随机函数PRF以秘密信息和其他信息作为输入,并产生随机的比特流。

IKE使用PRF产生以下四种秘密信息来对数据进行验证和保护

  • SKEYID:用于推导其他秘密信息;
  • SKEYID-d:用于衍生出IPSec报文加密、验证密钥;
  • SKEYID-a: ISAKMP消息完整性验证密钥;
  • SKEYID-e: ISAKMP消息加密密钥,用于数据加密。

SKEYID的生成方式取决于认证方法,其他三种则以SKEYID为基础进行推导,与认证方法无关。

其中PRF是伪随机函数,gxy是D-H交换中的共享秘密,CKY是Cookie,0,1,2分别是字符“0”、 “1” 、“2”
如果不协商PRF,则默认使用HMAC,其中的散列算法使用通信双方协商SA时所协定的算法。

IKE认证方法

IKE的认证方法直接影响了协商报文的内容和密钥生成的输入。

IKE定义了四种认证方法:

  • 基于数字签名的方法:通信双方互相交换证书和签名信息。
  • 基于公钥加密的方法:通信双方在用对方的公钥对身份、随机数等信息进行加密处理后,将这些加密信息发送给对等端。之后,双方要将身份、随机数等信息作为输入生成认证信息。
  • 改进的基于公钥加密的方法:对某些信息采用公钥加密机制处理,其他信息采用对称密码体制处理,提高通信效率。
  • 基于预共享密钥的方法:要求双方预共享一个密钥,作为生成认证信息时的输入之一。

我们主要讨论预共享密钥认证主模式交换

  • 消息1、2:协商好IKE SA需要的各项参数,以明文方式传输,没有身份认证
  • 消息3、4:用于协商Diffie-Hellman密钥材料,为通信双方生成一个共享的秘密,以明文方式传输,没有身份认证
  • 在对阶段1协商的SA和Diffie-Hellman共享秘密进行认证之前,双方会生成4种秘密:SKEYID、SKEYID_d、SKEYID_a和SKEYID_e.
  • SKEYID=PRF (Kpre (I,R),Ni|Nr): 使用预主密钥和消息的伪随机数函数,如HMAC。
  • SKEYID_d =PRF(SKEYID, gir|CKY-i|CKY-r|0)
  • SKEYID_a =PRF(SKEYID, SKEYID_d|g^{ir}|CKY-i|CKY-r|1)
  • SKEYID_e =PRF(SKEYID, SKEYID_a|g^{ir}|CKY-i|CKY-r|2)
  • 消息5、6:认证双方身份,HDR后的*表明,最后两条消息是用SKEYID_e 加密的。
  • 双方各自计算一个散列结果:HASH_I和HASH_R。这两个哈希函数的输入中包含SKEYID,意味着预共享密钥生成的SKEYID影响了这两个散列函数的计算,如果散列值验证通过,则说明对等端拥有正确的预共享密钥,从而验证了身份。

IKE作用过程

  • IPSec启动过程——由配置在 IPSec对等体中的IPSec安全策略指定要被加密的数据流启动IKE过程
  • IKE阶段1——创建安全通道IKE SA。IKE认证IPSec对等体,为建立IKE本身使用的安全信道而相互交换SA(双向) ;
  • IKE阶段2——利用已建立的IKE SA,建立交换IPSec通信中使用的IPSec SA(单向);
  • 数据传送——数据根据存储在SA数据库中的IPSec参数和密钥在IPSec对等体间传送;
  • IPSec隧道终止——通过删除或超时机制结束IPSec SA。

Cisco路由或三层交换配置IPSec

前提

由于Cisco Packet Tracer功能不完善,此处使用PNET模拟器加载Cisco IOS镜像来进行实验。

拓扑结构

对于R1路由器:

我们配置回环接口loopback0来模拟PC,地址为192.168.1.1/24

它的e0/0接口为192.168.10.1/24

对于R2路由器:

我们配置回环接口loopback0来模拟PC,地址为192.168.2.1/24

它的e0/0接口为192.168.20.1/24

我们故意使两个e0/0不在同网段下,来模拟经过多个网络的情况。(因为这种情况下需要开启动态路由或者配置静态路由)

配置

基础配置

我们首先配置好网络环境并确保能够Ping通

对于路由器R1

en
conf t
int lo 0
ip addr 192.168.1.1 255.255.255.0
int e0/0
ip addr 192.168.10.1 255.255.255.0
no shut
exit

配置默认路由,流量都走e0/0:

ip route 0.0.0.0 0.0.0.0 e0/0

对于R2同理

en
conf t
int lo 0
ip addr 192.168.2.1 255.255.255.0
int e0/0
ip addr 192.168.20.1 255.255.255.0
no shut
exit
ip route 0.0.0.0 0.0.0.0 e0/0

isakmp协商配置

前半部分R1与R2相同:

定义策略

crypto isakmp policy 1

配置加密算法为3DES

encry 3des

hash算法为MD5

hash md5

验证方式为预共享密钥

auth pre-share

组值为5

group 5

配置lifetime,然后回到config模式下

lifetime 120
exit

下面R1和R2在地址配置方面有些不同:

R1,配置密钥为cisco,指定地址为192.168.20.1

cry isa key 0 cisco addr 192.168.20.1

R2类似,只不过地址为192.168.10.1

cry isa key 0 cisco addr 192.168.10.1

配置IPSec

定义IP数据的保护策略,主要是ESP还是AH、加密算法、验证算法、传输模式还是隧道模式,以及被IPSec保护的数据流。

我们加密算法使用3DES,并且认证使用SHA哈希的HMAC,并设置为隧道模式,然后保护192.168.1.1/24192.168.2.1/24通信的数据

对于R1

cry ipsec tran IPSEC esp-3des esp-sha-hmac
mode tunnel
exit
ac 100 per ip host 192.168.1.1 host 192.168.2.1
cry map MAP 1 ipsec-isa

设置对端,并匹配第二阶段的IPSec策略

set peer 192.168.20.1
set tran IPSEC
match addr 100

对于R2同理:

cry ipsec tran IPSEC esp-3des esp-sha-hmac
mode tunnel
exit
ac 100 per ip host 192.168.2.1 host 192.168.1.1
cry map MAP 1 ipsec-isa
set peer 192.168.10.1
set tran IPSEC
match addr 100

配置接口MAP,R1与R2一样都是e0/0

int e0/0
crypto map MAP
exit

检查协商是否正常

特权模式下查看isakmp SA

show crypto isakmp sa

特权模式下查看ipsec SA

show crypto ipsec sa

抓包测试

PNET提供内置Wireshark可以很方便的进行抓包,我们对R1的e0/0抓包

开启抓包后在R1控制台特权模式下使用192.168.1.1地址去ping R2的192.168.2.1

ping 192.168.2.1 source 192.168.1.1

wireshark窗口可看到出现ESP协议的包

关于IKE与ISAKMP

IPsec协议族中IKE(Internet Key Exchange)是一种基于ISAKMP的协议,它为建立IPSec安全通信隧道提供了一种无痕密钥交换的机制。简单来说,IKE就是ISAKMP的扩展,为ISAKMP提供了更加高效、灵活和安全的密钥协商机制。

最后修改:2024 年 04 月 20 日
如果觉得我的文章对你有用,请随意赞赏