2012-08-29 38 views
2

我想問一個關於Linux內核中的IPv4片段管理器的問題(net/ipv4/inet_fragment.c)。我不明白爲什麼結構inet_frags(include/net/inet_frag.h)有一個「rnd」字段,顯然是用隨機數填充的。我的意思是,我不指望我的IPv4堆棧以隨機順序重組我的數據包^^。爲什麼Linux IPv4堆棧需要隨機數?

你能幫我解釋一下嗎? Thx提前。 (Kernel 3.4.4)

回答

6

該實現使用散列來存儲IP數據報碎片。具有固定散列函數的散列表容易被拒絕服務hash collision attack。所以,他們爲每個散列函數添加一個隨機種子以防止攻擊。

http://www.iss.net/security_center/reference/vuln/linux-kernel-packets-dos.htm

Linux內核是容易受到拒絕服務,造成處理TCP/IP碎片重組的不當。遠程攻擊者可以發送特製的數據包,這將導致大量散列表衝突,這會消耗所有可用的CPU資源。

+0

感謝這個非常明確的答案。 – tvuillemin

+0

另外:隨機數被用作起點。例如,初始TCP序列號是隨機選擇的,以防止[連接劫持](http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_hijacking)。 –