李治城
(山西農(nóng)業(yè)大學軟件學院 山西省太谷縣 030800)
隨著科學技術的不斷發(fā)展,互聯(lián)網(wǎng)技術也得到了飛速發(fā)展,但因此,逐漸暴露出傳統(tǒng)互聯(lián)網(wǎng)技術相關問題,最為突出的就是IP地址偽造。隨著互聯(lián)網(wǎng)的廣泛使用,每一種設備均能使用IP地址偽造技術,最終實現(xiàn)自身的目標,為使得互聯(lián)網(wǎng)安全得到有效的保證,如今對IP地址偽造、防御機制的相關研究就顯得較為重要。在Web應用開發(fā)中,經(jīng)常會需要獲取客戶端IP地址。一個典型的例子就是投票系統(tǒng),為了防止刷票,需要限制每個IP地址只能投票一次。偽造IP的作用只局限于想象力,簡單的能刷投票,復雜包括黑服務器,繞過IP限制抓取后端數(shù)據(jù),或者模擬測試看服務端承壓能力如何。
對于各種IP地址偽造行為,并不是均可以對互聯(lián)網(wǎng)發(fā)起進攻,從對互聯(lián)網(wǎng)的危害程度來看,具有危害相對較小的就是單純的IP地址偽造行為,相反,對互聯(lián)網(wǎng)帶來嚴重影響的就是基于對IP地址偽造的基礎上進行的網(wǎng)絡攻擊。
在鏈接初始化的階段,需要一次三次握手來建立鏈接,之后客戶端和服務端會依據(jù)初始的這個IP地址來通信。從這個角度上來說,想真正的偽裝一個IP地址是不可能的。因為即使從鏈路層把IP地址改了,后續(xù)發(fā)出去的請求也回不來,除非你只是想用來作為DOS攻擊,這一模式中的攻擊者會對被攻擊目標資源進行消耗,且是經(jīng)過了偽造IP地址的消耗,由此在很大程度上限制了攻擊者實際服務能力,通常來講就造成被攻擊者不能完成其任務。然而,在互聯(lián)網(wǎng)防御技術的快速發(fā)展中,僅僅通過DOS攻擊,不會對受攻擊者造成較為嚴重的影響,只有當攻擊目標信息代價非常的大,不然的話對于DOS攻擊所占據(jù)的資源量而言,占據(jù)比例相對較小,不會對受害者造成大的威脅。目前來看,SYN flooding攻擊為此類攻擊中最為常見的一種。然而,這不等于每一種DOS攻擊均不對受攻擊對象帶了嚴重的打擊,DDOS是DOS攻擊之一,具有相對較高的攻擊性。但是兩者具有相同的攻擊模式,對于DDOS來講,其可以基于互聯(lián)網(wǎng)基礎上,實現(xiàn)對大量計算機的有效控制,同時,計算機對受攻擊者進行信息的發(fā)送,由此造成受攻擊目標的通信鏈路得以占領,最后造成受攻擊者不能將自己的服務得以完成。在IP地址偽造的DDOS攻擊中,受害者不能將供給準確位置得以發(fā)現(xiàn),不能從來源角度上,實現(xiàn)對周圍網(wǎng)關通信鏈路的關閉,攻擊始終存在。
圖1:IP欺騙攻擊
圖2:中間層代理服務器的環(huán)境
如圖1所示,欺騙攻擊通過IP 地址的偽裝使得特定主機能夠偽裝另外的主機,而這臺主機往往具有某種特權或者被其他主機所信任。假設現(xiàn)在有一個合法用戶(1.1.1.1)已經(jīng)同服務器建立正常的連接,攻擊者構造攻擊的TCP數(shù)據(jù),偽裝自己的IP 為1.1.1.1,并向服務器發(fā)送一個帶有RSI位的TCP數(shù)據(jù)段。服務器接收到這樣的數(shù)據(jù)后,認為從1.1.1.1發(fā)送的連接有錯誤,就會清空緩沖區(qū)中建立好的連接。這時,如果合法用戶1.1.1.1再發(fā)送合法數(shù)據(jù),服務器就已經(jīng)沒有這樣的連接了,該用戶就必須從新開始建立連接。攻擊時,偽造大量的IP地址,向目標發(fā)送RST數(shù)據(jù),使服務器不對合法用戶服務。雖然IP地址欺騙攻擊有著相當難度,但我們應該清醒地意識到,這種攻擊非常廣泛,入侵往往從這種攻擊開始。IP地址被用來在網(wǎng)絡和計算機之間發(fā)送及接收信息,因此,每個信息包里都包含了IP地址,這樣雙方才能發(fā)送到正確的對方,對方也才能知道來源是正確的。當IP欺騙被使用的時候,信息包里面的就不再是真實的IP,取而代之的是偽造的IP地址,這樣,看上去包就是由那個IP發(fā)出的,如果對方回復這個信息,那么數(shù)據(jù)將會被發(fā)送到偽造的IP上,除非黑客重定向該信息到一個真實的IP上。
對于整個互聯(lián)網(wǎng)通訊來講,為了達到雙向傳播的目的,信息發(fā)送發(fā)要對網(wǎng)絡所分配的IP地址進行如實的填寫,在這一情況下,方可確定信息發(fā)送方具體位置,從未進行信息反饋。網(wǎng)絡攻擊就會隨意的修改IP地址,我們將這一現(xiàn)象稱之為IP地址偽造。從我國當下的互聯(lián)網(wǎng)了解到,不具備自動過濾偽造IP的功能,所以,通常而言要想使得發(fā)送的地址達到目的地,那么可以進行偽造IP 地址。IP地址偽造經(jīng)常存在于網(wǎng)絡攻擊中,因此無法得到攻擊行為真正起源,且不可以進行有效防護,與此同時,在攻擊之后不能快速的確定攻擊者。因此,為了保證網(wǎng)絡安全性,就必須將IP地址偽造問題得到解決。
圖3:利用burp偽造IP
圖4:獲取偽造后的IP
在Java中,獲取客戶端IP最直接的方式就是獲取到連接服務器的客戶端IP,在中間沒有代理的情況下,的確是最簡單有效的方式。但是目前互聯(lián)網(wǎng)Web應用很少會將應用服務器直接對外提供服務,一般都會有一層Nginx做反向代理和負載均衡,有的甚至可能有多層代理。HTTP協(xié)議是基于TCP協(xié)議的,上述方法獲取到的是TCP層直接連接的客戶端的IP,對于Web應用服務器來說直接連接它的客戶端實際上是Nginx,也就是TCP層是拿不到真實客戶端的IP。當用戶請求經(jīng)過CDN 后到達 Nginx 負載均衡服務器時,其 XFF 頭信息應該為“客戶端IP,CDN的IP”。如圖2所示。
為了解決上面的問題,很多HTTP代理會在HTTP協(xié)議頭中添加X-Forwarded-For頭,用來追蹤請求的來源。X-Forwarded-For的格式如下:
X-Forwarded-For:client1,proxy1,proxy2
X-Forwarded-For包含多個IP地址,每個值通過逗號+空格分開,最左邊(client1)是最原始客戶端的IP地址,中間如果有多層代理,每一層代理會將連接它的客戶端IP追加在X-Forwarded-For右邊。下面就是一種常用的獲取客戶端真實IP的方法,首先從HTTP頭中獲取X-Forwarded-For,如果X-Forwarded-For頭存在就按逗號分隔取最左邊第一個IP地址。
一般的客戶端(例如瀏覽器)發(fā)送HTTP請求是沒有X-Forwarded-For頭的,當請求到達第一個代理服務器時,代理服務器會加上X-Forwarded-For請求頭,并將值設為客戶端的IP地址(也就是最左邊第一個值),后面如果還有多個代理,會依次將IP追加到X-Forwarded-For頭最右邊,最終請求到達Web應用服務器,應用通過獲取X-Forwarded-For頭取左邊第一個IP即為客戶端真實
IP。
但是如果客戶端在發(fā)起請求時,請求頭上帶上一個偽造的X-Forwarded-For,由于后續(xù)每層代理只會追加而不會覆蓋,那么最終到達應用服務器時,獲取的左邊第一個IP地址將會是客戶端偽造的IP。
在鏈接初始化的階段,需要一次三次握手來建立鏈接,之后客戶端和服務端會依據(jù)初始的這個IP地址來通信。從這個角度上來說,想真正的偽裝一個IP地址是不可能的。因為即使從鏈路層把IP地址改了,后續(xù)發(fā)出去的請求也回不來,偽造IP的思路是通過修改 Header 來實現(xiàn)增加 XFF 字段。
2.2.1 在直接對外的Nginx反向代理服務器上配置
proxy_set_header X-Forwarded-For $remote_addr;
這里使用$remote_addr替代上面的$proxy_add_x_forwarded_for。$proxy_add_x_forwarded_for會在原有X-Forwarded-For上追加IP,這就相當于給了偽造X-Forwarded-For的機會。而$remote_addr是獲取的是直接TCP連接的客戶端IP,這個是無法偽造的,即使客戶端偽造也會被覆蓋掉,而不是追加。
需要注意的是,如果有多層代理,那么只要在直接對外訪問的Nginx上配置X-Forwarded-For為$remote_addr,內(nèi)部層的Nginx還是要配置為$proxy_add_x_forwarded_for,不然內(nèi)部層的Nginx又會覆蓋掉客戶端的真實IP。
2.2.2 遍歷X-Forwarded-For頭中的IP地址
和上面方法不同的是,不是直接取左邊第一個IP,而是從右向左遍歷。遍歷時可以根據(jù)正則表達式剔除掉內(nèi)網(wǎng)IP和已知的代理服務器本身的IP(例如192.168開頭的),那么拿到的第一個非剔除IP就會是一個可信任的客戶端IP。這種方法的巧妙之處在于,即時偽造X-Forwarded-For,那么請求到達應用服務器時,偽造的IP也會在X-Forwarded-For值的左邊,從右向左遍歷就可以避免取到這些偽造的IP地址。
目前,使用偽造源地址發(fā)起網(wǎng)絡攻擊的行為普遍存在于互聯(lián)網(wǎng)當中。且該行為存在發(fā)動較易、查找困難的特點,為了盡可能的將攻擊造成的危害得到減小,對于攻擊的制止、身份的確定就顯得非常重要。IP地址偽造嚴重影響了互聯(lián)網(wǎng)安全,因此,對IP地質(zhì)偽造防護技術的進一步研究對增強網(wǎng)絡安全性至關重要。從獲取IP的基本手段到對外的Nginx反向代理服務器上配置和遍歷X-Forwarded-For頭中的IP地址兩個防范手段進行了說明,旨在促進互聯(lián)網(wǎng)安全性的進一步提升。