Linux TCP堆栈中的初始序列号生成

时间:2012-09-01 21:38:44

标签: linux tcp linux-kernel

生成初始序列号(ISN)的步骤是什么 在LINUX tcp / ip协议中。我知道ISN生成的程序 第7页和第7页中描述的LINUX内核2.4到2.6。 8的 Embedding Covert Channels into TCP/IP。我搜索过类似的 后来的内核中的程序,但令我沮丧的是我找不到任何内容。据我所知,由于与安全性相关的明显原因,可能无法提供许多详细信息。由于我正在验证在后来的Linux内核中实现类似的隐写方案(如链接中所述)的可能性,因此我非常需要一些信息。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:4)

在这里阅读我的答案: Most efficient way to manipulate ISN numbers in TCP headers

此算法用于最新的内核TCP堆栈(3.5)。

编辑:请参阅下图,查看所有相关内核版本enter image description here

EDIT2 :查看函数secure_tcp_sequence_number旧版本的内核源代码:

Kernel 2.4.22

Kernel 2.6.30

Kernel 2.6.39

Kernel 3.0

Kernel 3.1 :( MD5取代了半MD4)

答案 1 :(得分:2)

在仔细阅读RFC6528RFC1948之后,我得出结论,生成RFC1948中指定的初始序列号(ISN)的算法:

       ISN = M + F(LocalIP, LocalPort, RemoteIP, RemotePort, Secretkey)

没变。相反,Bellovin S.M在RFC1948中提出的算法被正式指定并被纳入RFC6528的标准轨道(按照RFC2119),由Bellovin S.M和Gont一起编写。 F ..由于现在过时的RFC1948无法在任何文档中使用,RFC6528已经取代它。

但正如我在原来问题的答案中指出的那样,MD5已经将半MD4替换为来自内核3.1的哈希函数。 RFC6528完全证明了这一点,因为它确实可以灵活地改变伪随机函数F()。 (有关详细信息,请查看链接)。

答案 2 :(得分:2)

更新为先前的答案,以便表示当前状态(2019和Linux内核5.1.3),因为再次更改了在内核中生成ISN的算法,从而更加安全。

secure_tcp_seq现在使用SipHash(加-旋转-或)功能根据初始密钥,源和目标IP地址和端口生成ISN。我想此更改与导致hash flooding攻击的哈希冲突漏洞有关。