密评 | IPSec流量包分析以及对各个消息的手工解析
2024-5-19 14:36:58 Author: www.freebuf.com(查看原文) 阅读量:21 收藏

在密码测评过程的过程中,我们经常会接触到SSL VPN和IPSec VPN,目前对于IPSec VPN的流量在密评中怎么分析,怎么去验证也是一个重要的知识点,我们在看相关标准GB/T 36968-2018《信息安全技术 IPSec VPN技术规范》的时候难免感觉到枯燥,并且此标准对于理解IPSec VPN非常重要,所以本文以标准和通过实例一起探索IPSec VPN流量在密评中怎么进行分析。

准备工作:

GB/T 36968-2018 《信息安全技术 IPSec VPN技术规范》

IPSec VPN流量包

发送方和响应方的私钥

SM2加解密与签名验签工具

SM4加解密工具

SM3计算工具

相关标准和流量包以及工具等下载链接会放在文章最后

IPSec协议

IPSec的解释在网上很容易查到,这里我们不多做解释,只是简单的概括一下:

IPSec是通过将秘密消息封装在数字信封中,并对整个数字信封进行加密,来确保消息在传输过程中的安全性。

IPSec协议是套协议,由多个协议组成:IKE(密钥交换协议)、AH(封装)鉴别头、ESP(封装安全载荷)

IPSec的数据一般由两个阶段构成,主模式和快速模式,主模式有6个数据包,快速模式有3个数据包。这个点在标准中6.1.3.2章节与6.1.3.3章节中体现

第一阶段主模式主要是由设备密钥(非对称算法)协商出工作密钥,在协商过程中有一个重要作用SA(安全联盟),在数据包中体现ISAKMP协商,所以我们需要协议筛选出ISAKMP

下面我们对应标准对两个阶段9个数据包做详细分析,并进行相应的签名验证。

第一阶段主模式6个数据包:

第一个消息:

发起方给响应方发送一个SA载荷,这里需要注意的是对于两端通信,双方都可以发起请求。

我们看一下6.1.5.1消息头的格式,携带双方cookie,下一载荷,版本号,交换类型,标志等参数

在数据包中构成:

这里下一载荷的值为1,在载荷类型中表示安全联盟

交换类型的值为2,在标准中为身份保护类型

同理,变换载荷也是可以通过数据包中结构对应标准进行一个分析

对于完第一个消息分析到此为止,我们来看第二个消息。

第二个消息:

对方发回来SA载荷和2个证书,签名证书在前,加密证书在后,同样对于消息头的分析与第一个消息一样,我们可以发现,第二个消息响应方的cookie有了值,浏览所有的数据包,发现在一组IPSec VPN流量中他们的cookie值相同。所以在实际生产环境中,可能我们抓取的数据包存在很多ISAKMP协议数据,这里我们可以通过双方cookie值来确定是同一组的流量数据。

第二个消息从标准看主要是响应端收到发送端发送的加密套件后,对比自己是否有相对应的加密套件,如果有就使用和发送端相同的加密套件加密数据,把自己的SPI值和选择好的加密套件发送给发送端。并且在这个过程携带响应方自己的双证书。在这个消息中我们重点关注的是证书信息。

我们可以通过在Certifcate Data中右键--复制--as hex stream,将获取到的值进行hex转base64,保存后查看证书信息,而获取证书是为了公钥信息为后面的解密及验签提供数据。

其实对于在流量包中,我们能很快的找到证书公钥,这里我们保存的是签名证书的值,他的公钥信息如下

在数据包中,我们将Certifcate Data展开2层,可以看到subjectpulickey的值就是公钥信息,同理我们使用私钥可以获取到公钥信息,这里我使用签名证书的私钥进行获取。

同理加密证书的相关值也可以进行提取,这里我们不多做赘述。

第三个消息,第四个消息:

标准中讲到发起方和响应方交换数据,交换的数据内容包括 Nonce、身份标识(ID)等载荷。 Nonce 是生成加密密钥和认证密钥所必需的参数;ID 是发起方或响应方的标识。这些数据使用临时密 钥 Sk 进行加密保护,Sk 用对方加密证书中的公钥加密保护,并且,双方各自对数据进行数字签名。使 用SM2 算法进行加解密和数字签名验签的具体要求见 GB/T 35276。

我们先来看消息三在数据包中的构造,主要关注点在载荷值上

我们再来看看标准中过程中都是怎么说的:

前面我们通过消息1和消息2能获取到双方用的对称加密为SM4,用的非对称加密为SM2

用响应方私钥对ski进行一个非对称的运算,用ski对noce的密文进行一个对称算法的运算,用ski对id的密文进行一个对称运算。

解密SK

第一个载荷:Payload: Private Use (128),在标准我们发现128是对称密钥载荷(SK),但是在数据包中显示私有使用,这里我们以国内标准为指导。

载荷的值的加密的,我们提取出值来

307902210083e6ecef3fb62d7d4683132d920a298dd88efc8342256fb751987a5c37300cd30220398674a09fc955c21d9218a5016994738d9eddb2939b133e8ed2273aa3a215d30420cf1f2e14abe2de8c81fc9f2fbf028648570af88dcdaa98659a4c3eb1f96975100410ac34d8306c55b五0003a96045184deb81

30表示类型,79转10进制为121,代表后面的字符数为121位。同理02是类型,后面21表示长度,我们将证书数据进行切割开

3079 0221 0083e6ecef3fb62d7d4683132d920a298dd88efc8342256fb751987a5c37300cd30220 398674a09fc955c21d9218a5016994738d9eddb2939b133e8ed2273aa3a215d30420 cf1f2e14abe2de8c81fc9f2fbf028648570af88dcdaa98659a4c3eb1f96975100410 ac34d8306c55b五0003a96045184deb81

我们对这一串字符进行解密,由于这是用公钥加密,我们需要用到私钥解密,先出处理上述数据,将标识全部删除后,获得最终需要解密的数据

83e6ecef3fb62d7d4683132d920a298dd88efc8342256fb751987a5c37300cd3398674a09fc955c21d9218a5016994738d9eddb2939b133e8ed2273aa3a215d3cf1f2e14abe2de8c81fc9f2fbf028648570af88dcdaa98659a4c3eb1f9697510ac34d8306c55b五0003a96045184deb81

这个数据为对称载荷SK的密文,需要注意的是我们解密的发送方的SK的密文

我们先对私钥进行解析,获取私钥因子,这里我们使用的发送方的加密私钥

2eb464dc25937be59938549f4cc6306cea1c2ecdcc491a4e3b4fc0bd29af1f99

我们进行SM2私钥解密,获取到对称载荷SK明文

e6b74813213bfe4759c20225ade2678e


文章来源: https://www.freebuf.com/articles/database/401329.html
如有侵权请联系:admin#unsafe.sh