26
2024
03
15:32:16

Wireshark如何解密IPSec报文?




根据网上很多文章(IPSec系列学习)可以学习到很多IPSec知识,列举常用的几个知识重点:

  • 包括AH和ESP两种安全协议,它们定义了对IP报文的封装格式以及可提供的安全服务。

  • 支持两种封装模式:传输模式和隧道模式

  • SA(Security Association,安全联盟)是IPsec的基础,也是IPsec的本质;IPsec在两个端点之间提供安全通信,这类端点被称为IPsec对等体。IPsec隧道实际上就是两个IPsec对等体之间建立的IPsec SA;IPsec SA是单向的,因此出方向的报文由出方向的SA保护,入方向的报文由入方向的SA来保护。

  • 用IPsec保护一个IP数据包之前,必须先建立一个安全联盟(IPsec SA),IPsec SA可以手工创建或动态建立。IKE为IPsec提供了自动建立IPsec SA的服务

  • IKE自动协商方式:IKE首先会在通信双方之间协商建立一个安全通道(IKE SA),并在此安全通道的保护下协商建立IPsec SA;IKE使用了两个阶段为IPsec进行密钥协商以及建立SA:

第一阶段:通信双方彼此间建立了一个已通过双方身份认证和对通信数据安全保护的通道,即建立一个IKE SA(本文中提到的IKE SA都是指第一阶段SA)。

第二阶段:用在第一阶段建立的IKE SA为IPsec协商安全服务,即为IPsec协商IPsec SA,建立用于最终的IP数据安全传输的IPsec SA。

第一阶段的IKE协商模式常用的有:主模式(Main Mode)、野蛮模式(Aggressive Mode)。

可以了解实际对IP数据进行认证加密算法和密钥是由IPSec SA决定的,最近在VPP设备上,想要解封装IPSec看看原始数据,环境有限,今天先来看看网络设备IPSec加密报文如何解密的。

先搭建一个IPSec VPN环境。使用IKE野蛮模式建立IPSec VPN后,发现由于IKE第二阶段协商需要从第一阶段协商出的密钥材料中衍生出用于IPsec SA的密钥,IKE协商用于IPSec SA的encryption key和authentication key两个密钥无法通过命令获取(哪位大佬知道有啥获取方式么),无法进行解密,因此采用手工方式建立IPSec。




1.组网需求


在RTA和RTC之间建立一条IPsec隧道,对PC1所在的子网(10.1.1.0/24)与PC2所在的子网(10.1.2.0/24)之间的数据流进行安全保护。具体要求如下:

· 封装形式为隧道模式。

· 安全协议采用ESP协议。

· 加密算法采用采用128比特的AES,认证算法采用HMAC-SHA1。

· 手工方式建立IPsec SA。



2.组网图






3.配置步骤


(1)配置RTA

interface GigabitEthernet0/0

port link-mode route

ip address 10.1.1.1 255.255.255.0

interface GigabitEthernet0/1

port link-mode route

ip address 12.1.1.1 255.255.255.0

ipsec apply policy map2

//配置到达PC2所在子网的静态路由。12.1.1.2为本例中的直连下一跳地址

ip route-static 10.1.2.0 24 12.1.1.2

ip route-static 13.1.1.0 24 12.1.1.2

//定义要保护由子网10.1.1.0/24去往子网10.1.2.0/24的数据流

acl advanced 3401

rule 0 permit ip source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255

//创建IPsec安全提议tran1

ipsec transform-set tran1

//缺省情况下,安全协议采用隧道模式对IP报文进行封装,因此无需修改。配置ESP协议采用的加密算法为采用128比特的AES,认证算法为HMAC-SHA1

esp encryption-algorithm aes-cbc-128

esp authentication-algorithm sha1

//创建一条手工方式的IPsec安全策略,名称为map2,序列号为10

ipsec policy map2 10 manual

//指定引用的IPsec安全提议为tran1

transform-set tran1

//指定引用ACL 3401

security acl 3401

//指定IPsec隧道对端IP地址为13.1.1.3

remote-address 13.1.1.3

//配置ESP协议的出方向SPI为12345,入方向SPI为54321。SA由一个三元组来唯一标识,这个三元组包括SPI(Security Parameter Index,安全参数索引)、目的IP地址和安全协议号。其中,SPI是用于标识SA的一个32比特的数值,它在AH和ESP头中传输(抓包会发现会转换为16进制)。

sa spi inbound esp 54321

sa spi outbound esp 12345

//配置ESP协议的认证密钥和加密密钥(以十六进制方式、出方向和入方向均需配置)

sa hex-key authentication inbound esp simple 7c4a8d09ca3762af61e59520943dc26494f8941b

sa hex-key encryption inbound esp simple 7c4a8d09ca3762af61e59520943dc262

sa hex-key authentication outboundesp simple 7c4a8d09ca3762af61e59520943dc26494f8941a

sa hex-key encryption outbound esp simple 7c4a8d09ca3762af61e59520943dc261

//配置时注意不同算法对应的字节数,否则配置时会报错:



(2)配置RTB

//仅配置接口地址即可

interface GigabitEthernet0/0

port link-mode route

ip address 12.1.1.2 255.255.255.0

interface GigabitEthernet0/1

port link-mode route

ip address 13.1.1.2 255.255.255.0

(3)配置RTC

配置与RTA类似,此处不做解释,具体配置如下:

interface GigabitEthernet0/0

port link-mode route

ip address 10.1.2.1 255.255.255.0

interface GigabitEthernet0/1

port link-mode route

ip address 13.1.1.3 255.255.255.0

ipsec apply policy map2

ip route-static 10.1.1.0 24 13.1.1.2

ip route-static 12.1.1.0 24 13.1.1.2

acl advanced 3401

rule 0 permit ip source 10.1.2.0 0.0.0.255 destination 10.1.1.0 0.0.0.255

ipsec transform-set tran1

esp encryption-algorithm aes-cbc-128

esp authentication-algorithm sha1

ipsec policy map2 10 manual

transform-set tran1

security acl 3401

remote-address 12.1.1.1

sa spi inbound esp 12345

sa spi outbound esp 54321

sa hex-key authentication inboundesp simple 7c4a8d09ca3762af61e59520943dc26494f8941a

sa hex-key encryption inboundesp simple 7c4a8d09ca3762af61e59520943dc261

sa hex-key authentication outboundesp simple 7c4a8d09ca3762af61e59520943dc26494f8941b

sa hex-key encryption outboundesp simple 7c4a8d09ca3762af61e59520943dc262




4.验证配置


以上配置完成后,RTA和RTC之间的IPsec隧道就建立好了,无需触发。子网10.1.1.0/24与子网10.1.2.0/24之间数据流的传输将受到生成的IPsec SA的保护。可通过以下显示查看RTA上手工创建的IPsec SA。

[RTA] display ipsec sa

-------------------------------

Interface: GigabitEthernet0/1

-------------------------------

-------------------------------

IPsec policy: map2

Sequence number: 10

Mode: Manual

-------------------------------

Tunnel id: 0

Encapsulation mode: tunnel

Path MTU: 1428

Tunnel:

local address: 12.1.1.1

remote address: 13.1.1.3

Flow:

as defined in ACL 3401

[Inbound ESP SA]

SPI: 54321 (0x0000d431)

Connection ID: 38654705666

Transform set: ESP-ENCRYPT-AES-CBC-128 ESP-AUTH-SHA1

No duration limit for this SA

[Outbound ESP SA]

SPI: 12345 (0x00003039)

Connection ID: 38654705667

Transform set: ESP-ENCRYPT-AES-CBC-128 ESP-AUTH-SHA1

No duration limit for this SA

[RTA]

可以看到手工配置的IPSec建立成功,RTC查看方式与RTA同,此处略。




5.解密分析


接下来就可以对RTA的G0/1接口进行抓包分析了,这里解密是指解密ESP加密封装的数据。

抓包工具:Wireshark

参考官网文档:wiki.wireshark.org/ESP_

可以在帮助—关于Wireshark框中查找“with Gcrypt”来查看Wireshark 版本是否支持 ESP 解密。



为了解密 ESP 加密数据,需要提前了解SA元素,根据wireshark版本不同,所需参数有所差异,上图截图版本需要以下元素

SA 的源地址IPv6/IPv4

SA 的目的地址IPv6/IPv4

SPI(安全参数索引)

加密算法和加密密钥

认证算法和验证密钥

查看未解密的文件,显示都是隧道起点和终点的地址,无法看到受保护的流量:





可以看到12.1.1.1—>13.1.1.3的SPI为配置的12345;反向13.1.1.3—>12.1.1.1的SPI为54321;再根据前面的配置获取其他信息:

12.1.1.1—>13.1.1.3

SPI:0x00003039

encryption算法: aes-cbc-128

encryption key:7c4a8d09ca3762af61e59520943dc261

authentication算法:sha1

Authentication key: 7c4a8d09ca3762af61e59520943dc26494f8941a

13.1.1.3—>12.1.1.1

SPI:0x0000d431

encryption算法: aes-cbc-128

encryption key:7c4a8d09ca3762af61e59520943dc262

authentication算法:sha1

Authentication key:7c4a8d09ca3762af61e59520943dc26494f8941b

注意:本端out方向的SA密钥与对端in方向SA密钥相同,对端out方向SA密钥与本端in方向SA密钥相同,即对同一条流量密钥两端须保持一致,否则流量不通:

比如修改RTC设备上in方向(12.1.1.1—>13.1.1.3)的authentication key最后一位从a修改为c,此时会发现IPSec SA虽然成功了,但是流量不通:







点击抓包ESP流量选择ESP—>右键选择协议首选项—>点击ESP SAs:



然后添加SA信息:



如前面提到,SA是单向的,在两个对等体之间的双向通信,最少需要两个SA来分别对两个方向的数据流进行安全保护。因此需要添加两个方向的SA,添加完成后如下:



此时发现流量并未解密,后测试发现密钥前需添加0x表示16进制:



还需在编辑—首选项里设置Protocols,选择ESP协议,勾选 Attempt to detect/decode encrypted ESP payloads,点击OK:



此时解密成功,可以看到内层的ICMP流量:



上面的密钥都是16进制,下面来测试下ESP协议的认证密钥和加密密钥以字符串方式配置是否可以解密。

首先修改两端密钥配置:

RTA:

ipsec policy map2 10 manual

transform-set tran1

security acl 3401

remote-address 13.1.1.3

sa spi inbound esp 54321

sa spi outbound esp 12345

sa string-key outbound esp simple abcdefg

sa string-key inbound esp simple gfedcba

RTC:

ipsec policy map2 10 manual

transform-set tran1

security acl 3401

remote-address 12.1.1.1

sa spi inbound esp 12345

sa spi outbound esp 54321

sa string-key outbound esp simple gfedcba

sa string-key inbound esp simple abcdefg

添加SA后发现无法解密:



abcdefg 16进制:61626364656667

gfedcba 16进制:67666564636261

修改密钥为字符串的16进制也无法解密(无奈):



查询官网给出说明为:对于ESP协议,以字符串方式输入密钥时,系统会自动地同时生成认证算法的密钥和加密算法的密钥。这就不知道系统根据字符串自动生成的密钥是多少了。

对于VPP来说,就简单多了,对于ike自动协商的情况,vppctl show ipsec sa命令就可以直接查看到16进制的SPI和密钥,直接按照上面的方法对抓包流量解密即可。




6.注意事项


  • 本端和对端IPsec SA的SPI及密钥必须是完全匹配的。即,本端的入方向IPsec SA的SPI及密钥必须和对端的出方向IPsec SA的SPI及密钥相同;本端的出方向IPsec SA的SPI及密钥必须和对端的入方向IPsec SA的SPI及密钥相同。

  • 注意不同wireshark版本在填写key时有所差别,比如目前版本就必须用16进制。




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/5562.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: