Ipv6

如何保護 Web 應用程序免受 IPv6 機器人的攻擊?

  • July 3, 2018

在保護 Web 應用程序免受機器人攻擊的背景下,我對此很感興趣,但我想它適用於機器人可以通過 IPv6 進行的所有類型的攻擊。

在 Web 應用程序中,您需要保護一些頁面免受機器人攻擊。

它可能是一個登錄頁面:您希望避免數百萬個嘗試使用者名/密碼組合的請求。

它可能是一個註冊頁面。您不希望在您的網站上創建數千個機器人帳戶。

或者您可能不希望一次下載數據庫的全部內容。您認為匿名使用者每天向您的數據庫發出 100 或 200 個請求以獲取一些資訊是可以的,但是您不同意機器人通過每分鐘發出 1000 個請求來下載您提供的所有內容。

或僅出於統計目的。您正在記錄您網站上的訪問者活動,並且您不希望機器人完全偏向您的數據,例如,人為地點擊一個連結數千次,以便它連結到的文章成為您新聞網站上的“最受歡迎的文章” .

我經常使用基於 IP 地址的節流/速率限制,使用 Nginx 速率限制功能來處理這個問題:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/m;    

server {
   location /sensitiveUrl {
       limit_req zone=mylimit;

       proxy_pass http://my_upstream;
   }
}

但是對於 IPv6,我不確定這有多有效。我的意思是,使用 IPv4,它相對有效,因為攻擊者創建和使用數千個 IP 地址的成本很高,但似乎使用 IPv6 任何人都可以創建數百萬個 IP。如何處理?我應該對 IPv6 網路而不是地址應用限制嗎?如果我這樣做,在實踐中會有多有效?

IPv6 定址的靈活性非常好,但它確實使這樣的事情變得更加困難。我推薦的算法:

  • 首先阻止單獨的 IPv6 地址 (a /128)。它可能是具有多個使用者的網路上的單個使用者,並且您希望避免阻止無辜的使用者(由於 NAT,IPv4 一直發生這種情況,我們不再重複)
  • 如果你有多個x相同的塊/64,假設整個/64被污染並阻止所有的。您現在可以/128從黑名單中刪除單個記錄,因為它們現在已被/64. 這可以防止您的黑名單系統溢出記憶體/儲存。
  • 攻擊者可能擁有多個/64. 預設大小是 a /48,但/56甚至/60(這對於 IPv6 來說太小了,但一些 ISP 永遠不會學習)會發生。我會按 4 位按比例放大:如果/64來自同一個的多個 s/60被阻止,則按比例放大以阻止整個/60. 與多個/60in a/56等相同。
  • 我還建議對不同的前綴長度使用不同的黑名單超時。單個使用者意外阻止 a/64比某人“意外”被整個/48阻止更容易。更大的塊在黑名單上應該有更長的時間恕我直言。
  • 攻擊者可能會濫用該算法,從一開始就將其攻擊傳播到一個整體/48,從而無法快速觸發縮放算法。因此,您可能需要多個並行條件來快速擴展。

這種縮放機制的一個例子可能是:

+---------------+----------------------------------------+-----------+
|               |   Block when containing >= of these:   | Blacklist |
| Prefix length |  /128  |  /64  |  /60  |  /56  |  /52  |   time    |
+---------------+--------+-------+-------+-------+-------+-----------+
|     /128      |   N/A  |  N/A  |  N/A  |  N/A  |  N/A  |    5 min  |
|      /64      |     5  |  N/A  |  N/A  |  N/A  |  N/A  |   15 min  |
|      /60      |    15  |    2  |  N/A  |  N/A  |  N/A  |   30 min  |
|      /56      |    50  |    4  |    2  |  N/A  |  N/A  |   60 min  |
|      /52      |    75  |    8  |    4  |    2  |  N/A  |  120 min  |
|      /48      |   100  |   16  |    8  |    4  |    2  |  240 min  |
+---------------+--------+-------+-------+-------+-------+-----------+

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