gpt4 book ai didi

linux - 针对 ESN 数据包的 XFRM Ipsec 反重放检测

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:31 26 4
gpt4 key购买 nike

对于IPSEC抗重放检测,如果序号小于窗口中的最低序号,是丢弃数据包还是接受数据包?

我假设它应该被丢弃,但对于 ESN 数据包,数据包似乎被接受了。在 linux 内核的 xfrm 实现中,如果 seq < bottom 则数据包被接受。

下面我放了代码供引用: https://elixir.bootlin.com/linux/v4.18-rc3/source/net/xfrm/xfrm_replay.c#L435

static int xfrm_replay_check_esn(struct xfrm_state *x,
struct sk_buff *skb, __be32 net_seq)
{
unsigned int bitnr, nr;
u32 diff;
struct xfrm_replay_state_esn *replay_esn = x->replay_esn;
u32 pos;
u32 seq = ntohl(net_seq);
u32 wsize = replay_esn->replay_window;
u32 top = replay_esn->seq;
u32 bottom = top - wsize + 1;

if (!wsize)
return 0;
if (unlikely(seq == 0 && replay_esn->seq_hi == 0 &&
(replay_esn->seq < replay_esn->replay_window - 1)))
goto err;

diff = top - seq;

if (likely(top >= wsize - 1)) {
/* A. same subspace */
if (likely(seq > top) || seq < bottom)
return 0;
} else {
/* B. window spans two subspaces */
if (likely(seq > top && seq < bottom))
return 0;
if (seq >= bottom)
diff = ~seq + top + 1;
}

我也不确定 RFC4303 期待什么:

Under Case A: If Seql >= Bl (where Bl = Tl - W + 1) AND Seql <=
Tl, then check the corresponding bit in the window to see if
this Seql has already been seen. If yes, reject the packet. If
no, perform integrity check (see Appendix A2.2. below for
determination of Seqh).

最佳答案

如果序列号的低 32 位(在 ESP header 中传输的部分)低于 bottom,则假定序列号子空间已移动(即高 32 位已增加). section A2.2. of RFC 4303 中对此进行了介绍:

Under Case A (Figure 1):
If Seql >= Bl (where Bl = Tl - W + 1), then Seqh = Th
If Seql < Bl (where Bl = Tl - W + 1), then Seqh = Th + 1

section A2.3. 中有伪代码显示如何处理此问题(If (Seql >= Tl - W + 1) 语句中的 Else block If (Tl >= W - 1)堵塞)。在内核代码中,您会在 xfrm_replay_seqhi 中看到类似的内容。

在序列号检查之后,使用完整的 64 位序列号验证数据包的完整性(如果接收到的序列号低于窗口,则高 32 位增加 1)。如果失败,数据包将被丢弃,否则窗口将被移动(xfrm_replay_advance_esn)并且现在可能跨越两个子空间(RFC 中的案例 B)。

关于linux - 针对 ESN 数据包的 XFRM Ipsec 反重放检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51315482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com