IPSec和SSL国密数据包分析
0x01 IPSec
IPSec协议实际上是一套协议集合,包括IKE协议、认证头(AuthenticationHeader,AH)协议、封装安全载荷(Encapsulating Security Payload,ESP)协议和用于网络身份鉴别及加密的一些算法等。
从工作流程上看,IPSec协议可分为两个环节:IKE是第一个环节,完成通信双方的身份鉴别、确定通信时使用的IPSec安全策略和密钥;第二个环节是使用数据报文封装协议和IKE中协定的IPSec安全策略和密钥,实现对通信数据的安全传输。
IPSec工作模式分为传输模式和隧道模式。传输模式一般用于端到端的应用场景;隧道模式一般用于创建虚拟专用网隧道链路。
1、IKE协议
通过数据包对IKE进行详细分析和介绍
IKE协议用于鉴别通信双方身份、创建安全联盟(Security Association,SA)、协商加密算法以及生成共享会话密钥等,其中ISAKMP是IKE的核心协议,定义了建立、协商、修改和删除SA的过程和报文格式,并定义了密钥交换数据和身份鉴别数据的载荷格式。ISAKMP的一个核心功能就是创建和维护SA。SA作为通信双方之间对某些要素的一种协定,是IPSec的基础,协定的内容包括数据报文封装协议、IPSec工作模式、密码算法等安全策略和密钥。IPSec的两种封装协议(AH和ESP)均使用SA中协定的内容保护通信安全。另外,SA是单向的,一个SA为单一通信方向上传输的数据提供一种安全服务,通信双方需要产生属于自己的SA。若使用多个安全服务保护数据流,例如,同时提供认证和加密服务,那么应该创建多个SA来分别实现不同安全服务对数据的保护,即每个SA对应一个安全服务。
IP Sec 9个包分析 主模式(前6个包)+ 快速模式(后3个包)
第一阶段主模式:ISAKMP协商阶段
工作流程如下图所示:
下面针对数据包来分析主模式的协商过程
包一:发起端协商SA,使用的是UDP协议,端口号是500,上层协议是ISAKMP,该协议提供的是一个框架,里面的负载Next payload类似模块(SA载荷),可以自由使用。可以看到发起端提供了自己的SPI值,以及SA的加密套件,加密套件主要是加密算法、杂凑算法、认证算法、秘钥长度、生存时间等。
包二:响应端收到发送端发送的加密套件后,对比自己是否有相对应的加密套件,如果有就使用和发送端相同的加密套件加密数据,把自己的SPI值和选择好的加密套件发送给发送端。如果没有相同加密套件则IKE建立失败响应。
在包二中响应方同时还发送自己的签名证书和加密证书(双证书)
包三和包四:
在包三和包四中,双方进行数据交换,交换的内容包括Nonce载荷(Ni和Nr)、身份标识载荷(IDi和IDr)等,其中Nonce载荷是生成工作密钥所必需的参数。这些数据使用双方各自随机生成的临时密钥SK进行对称加密保护,SK用对方的加密证书中的公钥进行加密保护。双方各自对交换数据进行数字签名,这一过程使用签名证书对应的私钥来完成,并将签名结果发给对方。同时,发送端的双证书也在包三中发给响应端,这样发送端和响应端都有了对方的签名和加密证书,可以使用对方的公钥。
包三和包四完成后,参与通信的双方利用Nonce载荷等交换数据经伪随机函数(PRF)派生出基本密钥参数,并通过PRF用基本密钥参数派生出三个对称密钥,分别是用于产生会话密钥的密钥参数、用于验证完整性和数据源身份的工作密钥及用于加密的工作密钥(注意这里没有生成会话密钥)。
包五和包六:发送端和响应端对前面协商过程内容进行鉴别确认。这两个消息中传递的信息使用包三和包四产生的用于机密的工作密钥来做对称加密保护。对称密码算法由一开始双方协商的算法,这里使用的是SM4-CBC。为了检查交换内容,双方通过计算HMAC验证身份和协定的SA信息。第一阶段主模式到此结束。
第二阶段快速模式:IPSec SA协商阶段
第二阶段快速模式的工作流程如下图所示:
快速模式用于协商建立通信时使用的IPSec SA,包括IPSec安全策略和会话密钥(会话密钥在快速模式中产生)。
会话密钥有两个,均为对称密钥,分别用于通信数据加密,以及完整性校验和数据源身份鉴别。
快速模式交换的数据由主模式协定的ISAKMP SA提供保护,即除了ISAKMP头外所有的载荷都是加密的,加密密钥选用用于加密的工作密钥。同时,在ISAKMP头之后会紧跟一个HMAC载荷,用于验证交换数据的完整性和数据源身份。
在快速模式中,数据包都是加密的,简单放一张快速模式数据包的图片看下吧
最后,将主模式包三和包四中派生出的用于产生会话密钥的密钥参数经PRF计算得到会话密钥。PRF的输入还包括双方的Nonce载荷、从主模式建立的ISAKMP SA中获得的协议值和安全参数索引(SPI),其中SPI用于唯一标识一个数据报文对应的SA。用于加密的会话密钥与用于验证完整性和数据源身份的会话密钥则按照密码算法要求的长度,从会话密钥素材中依次选取。
野蛮模式
除IKE模式外,还有野蛮模式
书上没有对野蛮模式进行讲解,我这也没有野蛮模式数据包,就简单说下
野蛮模式只用到三条信息:前两条消息1和2用于协商IKE安全提议,交换Diffie-Hellman公共值、必需的辅助信息以及身份信息,并且消息2中还包括响应方发送身份信息供发起方认证,消息3用于响应方认证发起方。
2、AH协议
AH协议提供了数据源身份鉴别、完整性和抗重放等安全功能,没有提供加密服务。因此AH协议不能单独用于封装IP数据报文,应和ESP协议一起使用。AH协议不支持NAT穿越。
AH协议的主要作用是为整个IP数据报文(IP头和IP载荷)提供高强度完整性校验,以确保被篡改过的数据包可以被检查出来。在传输模式和隧道模式下有不同的放置位置,如下图所示。
3、ESP协议
ESP协议相对于AH协议增加了对数据报文的加密功能,ESP协议可以单独使用。在ESP协议和AH协议结合使用时,无需开启ESP提供数据源身份鉴别服务。ESP协议支持NAT穿越。
ESP头在传输模式和隧道模式中分别有不同的放置位置,保护范围也有所不同,如下图所示:
4、IPSec VPN产品
IPSec VPN产品工作在网络层,对应用层协议完全透明。
IPSec VPN产品主要用于站到站和端到站模式,也用于端到端模式(较少)。其中站到站和端到站采用隧道模式,端到端可以采用隧道模式或者传输模式。
前面在分析数据包时,可以看到算法对应的属性值,如下表所示:
IPSec VPN产品的密钥体系也分为三层:设备密钥、工作密钥和会话密钥。
①设备密钥:非对称密钥对,包括签名密钥对(设备内部产生)和加密密钥对(外部密钥管理机构产生),用于实体身份鉴别、数字签名和数字信封等。其中,用于签名的设备密钥对在IKE第一阶段提供基于数字签名的身份鉴别服务;用于加密的设备密钥对在IKE第一阶段对交换数据提供保密性保护。
②工作密钥:对称密钥,在IKE第一阶段经密钥协商派生得到,用于对会话密钥交换过程的保护。其中,用于加密的工作密钥为IKE第二阶段交换的数据提供保密性保护;用于完整性校验的工作密钥为IKE第二阶段传输的数据提供完整性保护及对数据源进行身份鉴别。
③会话密钥:对称密钥,在IKE第二阶段经密钥协商派生得到,直接用于数据报文及报文MAC的加密和完整性保护。其中,用于加密的会话密钥为通信数据和MAC值提供保密性保护;用于完整性校验的会话密钥为通信数据提供完整性保护。
0x02 SSL
1、SSL协议
SSL协议是由多个协议组成的两层协议集合,如下图所示:
下层协议包括记录层协议,主要用于封装不同的更高层协议的数据,为数据提供保密性、完整性和数据分段等服务,特别是它可为B/S的交互提供传输服务的超文本传输协议(HTTP)提供安全服务。
上层协议分为:握手协议、密码规格变更协议和报警协议
其中,握手协议实现了服务端和客户端之间相互的身份鉴别、交互过程中密码套件(公钥密码算法、对称密码算法和密码杂凑算法的集合)与密钥的协商;密码规格变更协议则是用于通知对方其后的通信消息将用刚刚协商的密码规格及相关联的密钥来保护;报警协议用于关闭连接的通知,以及对整个连接过程中出现的错误进行报警,其中关闭通知由发起者发送,错误报警由错误的发现者发送,报警消息中包含报警级别和报警内容。
(1)握手协议分析
握手协议的主要作用有两点:一是通信双方对彼此进行身份鉴别;二是协商连接会话所需的密码参数(如密码算法、密钥),其中各类密码算法组成的集合称为密码套件。
握手协议工作流程如下图所示,主要分为四个阶段,如下图所示:
下面通过抓取的国密SSL数据进行分析
数据包为抓取使用密信浏览器访问沃通GM SSL专用测试页面所得
阶段一:首先客户端向服务端发送Client Hello消息,其中包含国密协议版本号、随机数、Seesion ID和客户端所能使用的密码套件等信息。
若服务端未回应,则产生一个致命错误并断开连接
服务端返回Server hello信息,包含随机数和协商的密码套件等信息,这里双方协商的密码套件为ECC_SM4_SM3。
在第一阶段中客户端和服务端完成了密码套件的协商以及确定安全传输能力(包括协议版本、会话标识等属性),并且产生和交换随机数。
阶段二:身份鉴别和秘钥交换,服务端发送证书Server Certificate(双证书:签名证书和加密证书)、服务端密钥交换消息Server Key Exchange(签名值,用于生成预主秘钥)。
在阶段二中,服务端如果要验证客户端的身份,会在发送Server Key Exchange后向客户端发送证书请求消息Certificate Request(这里没有进行验证,采用的是单向鉴别),完成后发送Hello完成消息 Server Hello Done,表示Hello消息阶段已经结束。
阶段三:在阶段二中,如果服务端对客户端进行了身份验证,客户端需要在阶段三中返回一个证书消息Client Certificate(这里服务端未对客户端进行身份验证)。
客户端发送密钥交换消息Client Key Exchange,消息内容取决于双方Hello消息协商出的密钥交换算法,在这里双方Hello消息协商出来的密钥交换算法为ECC,则客户端产生46字节随机数与版本号一起构成预主密钥,采用服务端的加密公钥进行加密并放在Client Key Exchange消息中发送给服务端。
在阶段三中如果客户端和服务端使用的是双向鉴别,客户端返回证书消息Client Certificate,那么也应发送一个带数字签名的消息Certificate Verify供服务端验证客户端的身份(这里采用的单向鉴别,没有发送)。
在对交换数据进行加密和签名计算时,数据的加密运算采用对方加密证书中的公钥来进行加密;签名采用自己的签名私钥进行签名。
阶段四:Change Cipher Spec 密码规格变更协议
客户端发送密码规格变更消息(加密传输中每隔一段时间必须改变其加解密参数的协议,因为后续的报文都会采用刚刚协商好的加密秘钥进行加密传输,因此会发送该报文),发送加密的握手结束消息。
Encrypted handshake Message 加密握手消息
客户端告诉服务端,自己在整个握手过程中收到了什么数据,发送了什么数据。来保证中间没人篡改报文。该数据采用刚才协商好的秘钥进行加密,顺带验证秘钥。
服务端回应密码规格变更消息,使用刚协商的算法和密钥,发送加密的握手结束消息。
握手过程结束,双方开始进行数据传输。
SSL VPN密码套件的属性值定义,如下表所示。
在GM/T 38636-2020 传输层密码协议(TLCP)中,增加了GCM分组模式的密码套件,删除了SHA1密码套件(SHA1被认为是有风险的密码算法),如下表所示:
(2)记录层协议
当客户端和服务端握手成功后,待传输的应用数据通过记录层协议封装,并得到保密性和完整性保护,分为数据分段、数据压缩、数据添加MAC、对数据和MAC加密、附加SSL记录报头五步,整体流程如下图所示:
2、SSL VPN 产品
SSL VPN产品采用工作在应用层和传输层之间的VPN技术。
基于B/S的架构是SSL VPN最为常见的应用方式。
SSLVPN产品用于端到站和站到站两种,其中端到站是常用的,是产品必须支持的;站到站是可选支持的。
SSL VPN产品的密钥体系分为三层:①用于管理的设备密钥;②用于生成工作密钥的预主密钥和主密钥;③用于保护通信数据的工作密钥。
①设备密钥:非对称密钥对,包括签名密钥对(设备内部产生)和加密密钥对(外部密钥管理机构产生)。其中,签名密钥对用于握手协议中通信双方的身份鉴别;加密密钥对用于预主密钥协商时所用交换参数的保密性保护。(在这里签名密钥对和加密密钥对分别由设备内部和外部密钥管理机构产生,但是签名证书和加密证书均应由外部认证机构签发)。
②预主密钥、主密钥:对称密钥,其中预主密钥是双方协商通过伪随机函数(PRF)生成的密钥素材,用于生成主密钥;主密钥(48字节)由预主密钥、双方随机数等交换参数,经PRF计算生成的密钥素材,用于生成工作密钥。
③工作密钥:对称密钥,对通信数据安全性提供保护,由主密钥、客户端随机数、服务端随机数、常量字符串经PRF计算生成。工作密钥包括两个对称密钥:数据加密密钥用于数据的加密和解密;校验密钥用于数据的完整性计算和校验。
0x03 总结
SSL和IPSec在商用密码应用与安全性评估中涉及的内容比较多,能出的考点也是很多,本文简单对一些重要内容进行了罗列和总结,结合真实数据包对IPSec和SSL协议进行了分析,包括SSL握手协议过程、IPSec IKE协商过程和三层密钥体系及产出的位置,希望可以帮助大家理解学习。
参考:
《商用密码应用与安全性评估》
GM/T 0022-2014 IPSec VPN 技术规范
GM/T 0024-2014 SSL VPN 技术规范
IPSec VPN之IKE协议详解(https://cshihong.github.io/2019/04/03/IPSec-VPN%E4%B9%8BIKE%E5%8D%8F%E8%AE%AE%E8%AF%A6%E8%A7%A3/)
潮密密码应用安全检测平台包括通信协议检测、随机数检测、密码算法检测、数字证书检测、电子印章检测、国密SSL通道检测,可以实现多种密码的加解密等。
会员用户在登录SSO平台后,可直接跳转。
统一登录认证平台 http://sso.tidesec.com
往期推荐
E
N
D
微信扫码关注该文公众号作者