Security

如果我使用 iptables 只允許來自特定 IP 的 TCP 連接,它會被偽造嗎?

  • June 2, 2013

我的數據庫伺服器上的 iptables 規則是:

-A INPUT -p tcp --dport 6432 -s 10.115.0.150 -j ACCEPT

我有其他規則(環回等),但我想知道是否可以“破解”該特定規則。有人可以“欺騙”IP地址嗎(即使它是一個私有網路地址——而且,如果它是一個公共地址會有所不同)嗎?有些不同?

Iain 的回答通常是正確的,但需要稍微擴展一下才能解釋為什麼攻擊難以執行。

TCP 使用基於位的標誌和 32 位計數器(稱為序列號和確認號)的組合來驅動狀態機,該狀態機在 TCP 連接的整個生命週期中跟踪其進度。了解這兩個 32 位計數器如何在每個 TCP 連接中傳輸有效負載數據之前的三次握手中發揮作用,將使使用欺騙性源 IP 地址進行攻擊的不切實際清楚。

當客戶端啟動到遠端伺服器的 TCP 連接時,它會發送一個設置了 SYN 位和隨機選擇的初始序列號的 TCP 段。遠端伺服器以設置了 SYN 和 ACK 位的 TCP 段、隨機選擇的初始序列號和等於客戶端初始序列號加 1 的確認號響應。最後,客戶端以 TCP 段響應ACK 位設置,序列號等於它發送的初始序列號加 1,確認號等於遠端伺服器的初始序列號加 1。

當攻擊者從另一個主機的源 IP 地址偽造 IP 數據報時,通常情況下攻擊者不會收到對他們可能發送的任何數據包的響應。在這種情況下,攻擊者有效地擁有到遠端伺服器的單向通信通道。查看 TCP 握手中的數據包流,攻擊者有必要預測遠端伺服器將在其 SYN/ACK 響應中生成的初始序列號,以便在 ACK 響應中使用適當的確認號進行響應完成三次握手。攻擊者需要正確猜測一個 32 位數字才能使攻擊生效。

今天,這種類型的攻擊是完全不切實際的。不過,在過去,一些備受矚目的攻擊就是使用這種方法。這是可能的,因為在過去,一些作業系統具有非常可預測的初始序列號。(您可能會發現 Michal Zalewski 的論文Strange Attractors and TCP/IP Sequence Number Analysis - One Year later是一篇有趣的讀物,它描述了各種作業系統的初始序列號的可預測性。)

引用自:https://serverfault.com/questions/512646