Appearance
Appearance
IPsec 可以用于两种模式:tunnel 或 transport,并涉及两类节点:End Nodes 和 Secure Gateways。每类节点都可以使用这两种模式的 IPsec。该解析器的目标是在你拥有不同 Security Associations 的足够信息时解密整个数据包。
下面是一个较复杂的拓扑示例(如果是 ESP in tunnel Mode in ESP in tunnel Mode ...,其工作方式应相同)。
DUMP | N1 SGW1 | N2[192.168.0.3] -------[192.168.0.2][10.0.0.1]--------[10.0.0.2]default route for 192.168.0.3 is 192.168.0.2default route for 10.0.0.2 is 10.0.0.1We define the following policies with the setkey syntax :<SA1>########## For 192.168.0.2 (SGW1)spdadd 192.168.0.3 10.0.0.2 any -P out ipsecesp/tunnel/10.0.0.1-10.0.0.2/use;add 10.0.0.1 10.0.0.2 esp 10-m tunnel-E aes-cbc "aescbcencryption"-A hmac-sha1 "hmacsha1authenticati";<SA2>########## For 192.168.0.3 (N1)spdadd 192.168.0.3 10.0.0.2 any -P out ipsec esp/transport//require;add 192.168.0.3 10.0.0.2 esp 15-E des-cbc "descbte"-A hmac-sha1 "hmacsha1authenticati";这意味着从 N1 到 N2 的数据包将使用 des-cbc 加密,并从 SGW1 通过 ESP encryption aes-cbc 隧道传输到 N2。如果查看 DUMP 主机,我们只需要两个 SA 即可解密整个数据包。如果查看不同层次,将如下所示:
[IP1][ESP1][ENCRYPTION1]with [ENCRYPTION1]=[IP2][ESP2][ENCRYPTION2]and [ENCRYPTION2]=ICMPIP1 is IP header from SGW1 to N2ENCRYPTION2 is aes-cbcIP2 is IP header from N1 to N2ENCRYPTION2 is des-cbc因此,知道这两个 SA 的 IPsec 解析器会先使用 SA1 解密 ENCRYPTION1,对其进行解析,得到 ENCRYPTION2,再使用 SA2 解密它并进行解析,从而获得完整的解密数据包。
如果查看 Authentication 字段,你会注意到有 2 个字段可用。内部字段仅在 ENCRYPTION1 被解密后可用。
下面是一个数据包解密后的样子:
为了对 ESP Payload 解密或检查 ESP Authenticator,需要提供已知 Security Associations (SA) 的一些元素。即:
不需要指明操作模式(transport、tunnel),解密将以迭代方式完成。
这些不同元素必须在 Wireshark 的 ESP Preferences Menu 中指明。事实上,将其设置在单独文件中也许会更好,但在 Preferences Box 中至少放置少量规则相当方便。此外,解析也很基础,没有使用任何库/工具,例如 Lex/yacc。
如果需要修改 Security Associations 的数量,必须在解析器中修改“IPSEC_NB_SA”的值。
下面是用于解密上一屏内容的首选项:
此字段是一种用于解密数据包的启发式方法。它假设数据包使用 NULL 算法加密,并且 Authentication 使用 12 bytes,如 hmac-sha1-96/hmac-sha256/hmac-md5-96。若 Wireshark 未链接 libgcrypt,此字段应是唯一可用字段。否则,如果设置了此字段,所有未被 Security Associations 捕获的数据包都会使用该启发式方法解密。不会对这些数据包进行 authentication Checking。
此字段应仅在 Wireshark 链接了 libgcrypt 时可用。它用于激活 Security Associations。当某个 IPsec ESP 数据包被某个 Security Assciation (Source/Destination/SPI) 捕获时,将使用指定的 Encryption/Authentication Algorithm 以及关联的 Encryption Key 对其解密。该检查将以迭代方式完成。
此字段应仅在 Wireshark 链接了 libgcrypt 时可用。当某个 IPsec ESP 数据包被某个 Security Assciation (Source/Destination/SPI) 捕获时,将使用指定的 Authentication Algorithm 以及关联的 Authentication Key 检查 Authentication。该检查将以迭代方式完成。
此字段使用以下语法(可有空格,也可无空格):
Protocol|Source Address|Destination Adress|SPI其中:
Protocol:IPv4 或 IPv6(大小写字母均可)
SPI:Security Association 的 Security Parameter Index。可以用十进制表示(例如:123),也可以用十六进制表示(例如:0x45)。特殊关键字“”可用于匹配任意 SPI。不过,如果使用多个“”,它会将十进制 SPI 的长度限制为所指明的“”数量。例如,“”会匹配 23,但不匹配 234。234 会被“”匹配。不会检查 SPI 值。因此,你必须注意 SPI 的长度为 4 bytes。
Addresses:此字段中可以有 IPv6 或 IPv4 地址。任意地址都是由地址或前缀与 Prefixlen/Netmask 组合而成,两者以“/”分隔。可以省略 Prefixlen/Netmask,此时假定 IPv6 的 Adress 长度为 128 bits,IPv4 的 Adress 长度为 32 bits。在 Prefixlen/Netmask 位置使用字符“*”时,效果等同于省略它。
IPv6 Addresses:接受任何有效 IPv6 地址。例如:3FFE::1/128、3FFE:4:5:6666::/64、::1/128、3FFE:4::5。如果地址不正确且长度超过 16 bytes,则只会考虑最后 16 bytes。也可以使用特殊字符“”表示任意 4 bits 块。即:3ffe::456。如果 Address 字段中只使用一个“*”,则会接受任何 IPv6 地址。
IPv4 Addresses:接受任何有效 IPv4 地址。例如:190.0.0.1/24、10.0.0.2。也可以使用特殊字符“”表示任意 8 bits 块。即 190...3。如果 Address 字段中只使用一个“”,则会接受任何 IPv4 地址。不会检查 IPv4 地址是否正确。例如 456.345.567.890 会被接受。因此,你必须注意所写内容。不过,对于一个字节只会考虑 3 个字符。例如:190.0.0.0184 不会被认为是正确的。(相反,会使用一种 LRU Mechanism,实际考虑的地址将是 190.0.0.418)。此外,只会使用前四个值(即 190.0.0.12.13 会被视为 190.0.0.12)。
在这些字段中,必须为 SA 描述 Authentication、Encryption Algorithms 以及 Authentication、Encryption Keys。密钥大小应符合 Algorithms 中指定的要求,否则无法工作。Keys 可以用十进制或十六进制表示(以 0x 开头)。
可以注意到,如果我们只关心解密,那么为 Authentication 选择 hmac-sha1-96/aes-xcbc-mac-96/hmac-md5-96 之一,不会影响解密,因为这些算法都会给出 12-bytes authenticator 字段。因此,我们可以选择其中之一且不设置“FIELD: Attempt to check ESP Authentication”,或者也可以使用 Authentication algorithm “Any 12 Byte Of authentication [No checking]”。在这种情况下,“FIELD: Attempt to check ESP Authentication”不会影响判定。明确考虑的算法如下:
根据 RFC 2451,3DES CBC 使用 192 bits 的密钥。第一个 3DES key 取自前 64 bits,第二个取自接下来的 64 bits,第三个取自最后 64 bits。实现必须在最初接受一组新密钥时考虑 parity bits。三个密钥中的每一个实际长度都是 56 bits,额外 8 bits 用作 parity。3DES CBC 使用 8 octets 的 IV。
根据 RFC 3602,AES 支持三种密钥大小:128 bits、192 bits 和 256 bits。默认密钥大小为 128 bits,所有实现都必须支持此密钥大小。实现也可以支持 192 bits 和 256 bits 的密钥大小。AES-CBC 使用 16 octets 的 IV。
根据 RFC 3686,AES 支持三种密钥大小:128 bits、192 bits 和 256 bits。默认密钥大小为 128 bits,所有实现都必须支持此密钥大小。实现也可以支持 192 bits 和 256 bits 的密钥大小。AES-CTR 使用 8 octets 的 IV。
根据 RFC 2405,DES-CBC 是一种对称秘密密钥算法。密钥大小为 64-bits。它通常被称为 56-bit key,因为该密钥有 56 个有效位;每个字节中的最低有效位是 parity bit。DES-CBC 使用 8 octets 的 IV。
Counterpane Systems 的 Bruce Schneier 开发了 Blowfish cipher algorithm。RFC 2451 表明 Blowfish 使用 40 到 448 bits 的密钥大小。默认大小为 128 bits。我们只接受 128 bits 的密钥大小,因为 libgrypt 只接受此密钥大小。更多信息请参见 http://www.schneier.com。BLOWFISH-CBC 使用 8 octets 的 IV。
Twofish 是 Counterpane Labs 开发的一种 128-bit block cipher,可接受最长 256 bits 的可变长度密钥。我们只接受 128 和 256 bits 的密钥大小。更多信息请参见 http://www.schneier.com。TWOFISH-CBC 使用 16 octets 的 IV。
HMAC with MD5 提供数据来源 Authentication 和完整性保护。HMAC-MD5-96 生成 128-bit authenticator value。用于 ESP 或 AH 时,必须支持使用前 96 bits 的截断值。发送时,截断值存储在 authenticator 字段中。接收时,会计算完整的 128-bit value,并将前 96 bits 与存储在 authenticator 字段中的值比较。HMAC-MD5-96 不支持其他 authenticator value 长度。
SHA-1 结合 HMAC [RFC2104] 提供带密钥的 Authentication 机制。HMAC-SHA-1-96 生成 160-bit authenticator value。用于 ESP 或 AH 时,必须支持使用前 96 bits 的截断值。发送时,截断值存储在 authenticator 字段中。接收时,会计算完整的 160-bit value,并将前 96 bits 与存储在 authenticator 字段中的值比较。HMAC-SHA-1-96 不支持其他 authenticator value 长度。
这是 SHA-256 算法,可生成 32 bytes 的 message digest。用于 ESP 或 AH 时,必须支持使用前 96 bits 的截断值。发送时,截断值存储在 authenticator 字段中。接收时,会计算完整的 128-bit value,并将前 96 bits 与存储在 authenticator 字段中的值比较。我们的实现将支持任意密钥长度。
当然,你可以使用其他 ESP Encryption/Authentication algorithms,并且添加一些其他算法应该不会很困难。也应该可以将其调整为检查 AH Authenticator,甚至为 IPComp 做一些处理。如果固定的 Security Associations 最大数量对你来说是个问题,可以在解析器“IPSEC_NB_SA”中修改该值。保留 Preferences Box 中的少量 SA,并提供一种在单独文件中添加更多 SA 的方式,也可能很有意思。
Imported from https://wiki.wireshark.org/ESP_Preferences on 2020-08-11 23:13:51 UTC