愚弄 Port Scanners: 使用 eBPF 和 Rust 模擬 Open Ports

https://dev.to/douglasmakey/fooling-port-scanners-simulating-open-ports-with-ebpf-and-rust-24e3

前一篇文章中,我們探索了 SYN 和 accept queues 以及它們在 TCP 三向握手中的關鍵作用。我們瞭解到,要完全建立 TCP 連接,必須成功完成三向握手。我們紀錄了這個過程:

1. 客戶端發起連接,發送了一個 SYN 封包。
2. 伺服器以一個 SYN-ACK 封包做回應。
3. 客戶端接著回傳一個 ACK 封包給伺服器。

客戶端此時認為連接已建立。然而,重要的是要注意,從伺服器的角度來看,只有在接收並處理來自客戶端的最後一個 ACK 時,連接才完全建立。

在本文中,我們將審查三向握手的行為以及相關的埠掃描技術。我們也會探索如何使用 Rust 和 eBPF 來阻擋試圖使用此技術掃描我們機器的好奇人士。

我們將繼續深入研究 TCP 連接管理的過程,了解伺服器在接收連接請求時的行為。我們將逐一梳理以下內容:

– 當一個伺服器在特定埠上有一個監聽中的 socket 時,就準備處理傳入的連接請求。當接收到一個 SYN 封包時,伺服器開始透過分配資源(例如 SYN queue 中的空間)來追踪潛在的連接。這種行為對於正常操作是必要的,但可以被惡意行為利用。例如,SYN flood 攻擊就是利用這種資源分配的方式來壓垮伺服器。

如果您有興趣了解更多有關 SYN flood 攻擊的資訊,歡迎留言詢問。這種攻擊利用 TCP 握手過程來用未完成的連接請求壓倒伺服器。它工作原理是向伺服器發送大量的 SYN 封包。伺服器為每個連接請求分配資源,佔用大量內核內存,而對用戶端的成本僅為每個請求一個 SYN 封包,而他們在本端不需要內存分配。

我們要重點注意的是前述討論中的「當一個伺服器在特定埠上有一個監聽中的 socket」的條件。這個條件是關鍵性的,因為它決定了伺服器如何回應傳入的 SYN 封包。

我們將澄清兩種情況:

有一個在目標埠上監聽的伺服器

流程:

– 收到 SYN 封包
– 回應 SYN-ACK
– 分配資源以追踪潛在連接

沒有一個在目標埠上監聽的伺服器

流程:

– 收到 SYN 封包
– 回應 RST-ACK(重設-確認)
– 不為連接追踪分配資源

第二種情況中的 RST-ACK 回應是伺服器告知「在這個埠上沒有服務監聽,請不要試圖建立連接」的方式。這種行為是 TCP/IP 網絡的基本方面,對於網絡安全和資源管理扮演了重要的角色。

通過向伺服器的特定埠發送一個簡單的 SYN 封包,我們可以確定該埠是否開放。這是最流行的端口掃描技術之一的基礎:隱匿式 SYN 掃描。

隱匿式 SYN 掃描是一種流行的端口掃描技術,該技術是半開啟掃描,也被稱為隱匿式半開掃描。這種技術被稱為半開掃描,因為它實際上並沒有打開完整的 TCP 連接。相反,SYN 掃描僅發送最初的 SYN 封包並檢查回應。如果接收到一個 SYN/ACK 封包,這表示埠是開放並接受連接。這被記錄,然後發送一個 RST 封包以終止連接。

感謝您耐心閱讀,請隨時留下任何問題或需求。

via DEV Community

June 30, 2024 at 06:20AM

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *