如何使用 StrongSwan 日志信息解密 Wireshark 中的 IKVe2?

如何使用 StrongSwan 日志信息解密 Wireshark 中的 IKVe2?

Wireshark 具有解密 IKEv2 的能力,如果您在“首选项”中选择 ISAKMP,它会提供一个 IKEv2 解密表,该表需要发起者和响应者的 SPI、加密和身份验证密钥(SK_ei、SK_er、SK_ai、SK_ar)以及加密和身份验证算法。使用 Strongswan 的 charon 调试日志记录,所有这些都可用。

我有一个有效的 IKEv2 SA,并且可以传输 ESP 流量。

然而,每次我尝试使用 Wireshark 解密时,它都会产生不连贯的解密结果,例如,在具有 166 字节的数据包中,字段长度为 65000,并报告格式错误的数据包。

我也无法解密 ESP 数据包。Google 搜索说,仅使用来自“ip xfrm state”的信息即可实现这一点,但 Wireshark 要么无法解密任何内容,要么再次产生无效结果。

显然我忽略了一些东西,有人这样做过吗?

我在 Ubuntu 12.04 上使用 Wireshark 1.8.3、StrongSwan 5.0.1。

谢谢,RichK

答案1

我遇到了完全相同的问题,但最终设法解决了它。我的基本假设是Wireshark能够解码IKEv2消息(请参阅:http://www.wireshark.org/lists/wireshark-bugs/200904/msg00114.html)。不确定是否支持所有完整性和加密方法。

我的设置是 Windows 7 客户端和 Strongswan 服务器。如果您使用最强日志级别配置 Strongswan,则所有必要的密钥都包含在 syslog 文件中。搜索关键字“Sk_ei”、“Sk_er”、“Sk_ai”和“Sk_ar”(文件中有几个实例,我在日志文件中取了最新的实例)。您知道必须使用 Wireshark 捕获流量,获取当时的 Strongswan 日志文件并在 Wireshark IKEv2 解密表中输入正确的值。输入正确长度和正确格式的值非常重要,例如,如果您从 syslog 或 wireshark 跟踪中复制值,请消除空格或冒号 (:)。

以下是解密表中要使用的值的指南:

发起者 SPI = 发起者 cookie(在 wireshark 消息中找到 - 未编码) 响应者 SPI = 响应者 cookie(在 wireshark 消息中找到 - 未编码)

加密算法:可以在 Wireshark IKE SA Init 响应中找到,如果您不确定,我使用了 AES-CBC-256,即 SK-ei 和 SK_er 必须有 64 个十六进制数字

完整性算法:可以在 Wireshark IKE SA Init 响应中找到,如果您不确定,我使用了 HMAC-SHA1-96,即 SK-ai 和 SK_ar 必须有 40 个十六进制数字

Sk_ei、SK_er、SK_ar 和 SK_ai 值必须从 Strongswan 日志文件中复制并粘贴到解密表中,不得有空格。在我的示例中,64 位密钥 (SK_ei、SK_er) 分布在日志文件中的 2 行上。

如果一切正确完成,Wireshark 应该会显示解码后的消息。

希望这可以帮助!

答案2

也许您输入了错误的密钥。

据我所知,其中有两个:

  • IKE 密钥 - 使用这些密钥进行加密
  • ESP 密钥 - 网络流量使用这些密钥进行加密

我总是使用ip xfrm state密钥中的密钥来解密 Wireshark 中的 ESP 流量。

相关内容