如何實時監測分析X-Forwarded-For偽造
阿新 • • 發佈:2019-05-09
元組 請求頭 刷票 應用場景 http訪問 技術 隨機 數據包 remote 什麽是X-Forwarded-For
如果要問當下最走紅的應用層協議,當HTTP莫屬,一個無狀態維護協議,其連接基於TCP,在HTTP協議頭部沒有IP地址字段。所以,如果要在應用層保存IP地址信息(應用服務器統計訪問者信息的主要來源之一),只能通過X-Forwarded-For頭部字段來實現。
X-Forwarded-For位於HTTP協議的請求頭部,屬於HTTP的頭部擴展。在HTTP/1.1(RFC 2616)協議規範中並沒有對X-Forwarded-For有明確的定義。最開始由著名的代理軟件Squid(見www.squid-cache.org)引入,用來傳遞HTTP請求端的真實IP地址。如今,X-Forwarded-For已成為事實上的標準,各大HTTP代理、負載均衡等轉發服務都在廣泛使用它,並在RFC 7239(Forwarded HTTP Extension)標準中收錄。
下圖是X-Forwarded-For格式,越靠近左邊的地址距離服務器越遠,每經過一層代理就在後面加上該代理地址。X-Forwarded-For信息除了在真實代理環境中被正常使用外,其信息也可以通過偽造形成。
如何獲取真實的客戶端IP地址
X-Forwarded-For地址可以偽造,那該如何獲取客戶端真實IP地址呢?
開發層面,在開發語言中能夠獲取Remote Address,該地址就是真實的客戶端IP地址,用來與應用服務器建立TCP連接,該地址無法偽造,如果偽造則連接無法成功建立,繼而不會後面的HTTP訪問存在。
運維層面,全流量分析系統實時采集和分析TCP五元組,對所有訪問服務器的客戶端地址統計和記錄,並按需顯示訪問行為特征。
真實的客戶端IP地址就是我們常說的TCP三步握手中發起連接請求的IP地址。
X-Forwarded-For偽造訪問有什麽危害
前面已說過,X-Forwarded-For中IP可以偽造。那麽,這種偽造會帶來什麽危害呢,下面列舉幾種:
如果要問當下最走紅的應用層協議,當HTTP莫屬,一個無狀態維護協議,其連接基於TCP,在HTTP協議頭部沒有IP地址字段。所以,如果要在應用層保存IP地址信息(應用服務器統計訪問者信息的主要來源之一),只能通過X-Forwarded-For頭部字段來實現。
X-Forwarded-For位於HTTP協議的請求頭部,屬於HTTP的頭部擴展。在HTTP/1.1(RFC 2616)協議規範中並沒有對X-Forwarded-For有明確的定義。最開始由著名的代理軟件Squid(見www.squid-cache.org)引入,用來傳遞HTTP請求端的真實IP地址。如今,X-Forwarded-For已成為事實上的標準,各大HTTP代理、負載均衡等轉發服務都在廣泛使用它,並在RFC 7239(Forwarded HTTP Extension)標準中收錄。
如何獲取真實的客戶端IP地址
X-Forwarded-For地址可以偽造,那該如何獲取客戶端真實IP地址呢?
開發層面,在開發語言中能夠獲取Remote Address,該地址就是真實的客戶端IP地址,用來與應用服務器建立TCP連接,該地址無法偽造,如果偽造則連接無法成功建立,繼而不會後面的HTTP訪問存在。
運維層面,全流量分析系統實時采集和分析TCP五元組,對所有訪問服務器的客戶端地址統計和記錄,並按需顯示訪問行為特征。
X-Forwarded-For偽造訪問有什麽危害
前面已說過,X-Forwarded-For中IP可以偽造。那麽,這種偽造會帶來什麽危害呢,下面列舉幾種:
- 通過偽造IP地址,繞過後臺訪問地址限制;
- 當前端服務器通過X-Forwarded-For信息判斷來訪地址時,通過修改X-Forwarded-For信息可實現撞庫和爆破;
- 惡意爬蟲X-Forwarded-For偽造,造成服務器負荷過重,甚至無法正常提供服務;
- X-Forwarded-For偽造也可用於某些CTF題目作弊;
- 某些點贊投票系統,如果是基於訪問者IP地址統計投票數量,那麽通過修改X-Forwarded-For地址,可進行刷票行為;
- 還有更多…
如何實時分析X-Forwarded-For偽造訪問
既然X-Forwarded-For偽造危害如此之大,在系統運維和安全防禦中該如何實時分析和發現呢就顯得尤為重要。
對於X-Forwarded-For偽造行為的監測分析主要從2個層面進行。
首先,獲知IP與應用系統之間的連接信息,這裏的IP地址為上文中提及的Remote Address,即真實IP地址,偽造地址的客戶端連接服務器的數量會明顯高於其它地址的對象。
下圖顯示服務器在一段時間內的運行狀況,其中連接的IP地址信息部分,顯示連接服務器最多的IP地址信息。
其次,查看該地址訪問系統的應用信息,網深科技全流量分析系統可自動發現該地址偽造的IP地址及這些偽造地址訪問的應用內容信息。
隨機打開上圖中任意一個應用訪問數據包,即可查看真實的訪問信息。
或者使用一鍵導出內容功能,在文本編輯工具打開查看。
下圖為另一個X-Forwarded-For偽造訪問例子。
如何防禦
鑒於X-Forwarded-For偽造存在諸多危害,其防禦工作絕對不可輕視。以下是X-Forwarded-For偽造行為的主流防禦方法,供參考。
● 直接對外提供服務的 Web 應用,為了安全起見,只能通過 Remote Address 獲取 IP,不能相信任何HTTP請求頭部信息;
● 使用了 Nginx 等 Web服務器反向代理的 Web 應用,在配置正確的前提下,要用 X-Forwarded-For 最後一節 或 X-Real-IP 來獲取 IP(因為 Remote Address 得到的是 Nginx 所在服務器的內網 IP);同時還應該禁止 Web 應用直接對外提供服務;
● 在某些特定應用場景,例如通過IP地址顯示所在區域天氣等,可從 X-Forwarded-For 靠前的位置獲取 IP,但必須需要校驗 IP 格式合法性。
目前很多Web 應用(例如獲取用戶所在地區,基於 IP 做訪問頻率控制,禁止某些IP訪問等等),為了獲取用戶真正的 IP,如果從 HTTP 請求頭中獲取 IP地址。這些情況下,必須確保獲取到的IP地址是真實可靠的。
文中使用的工具除Wireshark外,還有網深科技全流量分析系統,該系統通過旁路采集網絡流量,實時解碼2-7層協議信息,智能分析所有應用系統訪問情況,精確發現異常X-Forwarded-For偽造行為。
獲取更多信息咨詢,請關註微信公眾號“數字化性能管理”。
關於網深科技,請點擊查看www.netinside.com.cn
如何實時監測分析X-Forwarded-For偽造