辛宏明,王勇軍,趙芮元,郭雙飛
(國防科學(xué)技術(shù)大學(xué)計算機(jī)學(xué)院,湖南長沙410073)
路由器是網(wǎng)絡(luò)攻擊者的理想目標(biāo),因為路由器可以被用于竊聽發(fā)送到或從企業(yè)接入點流出的流量。在攻擊者控制路由器后,能夠監(jiān)控、重定向、阻止或篡改廣泛的在線活動。一旦路由器被攻擊,路由器防火墻保護(hù)的設(shè)備也成為攻擊目標(biāo)。即使是技術(shù)型用戶都很難發(fā)現(xiàn)路由器網(wǎng)絡(luò)攻擊,因為路由器用戶接口很小,從感染設(shè)備發(fā)送到網(wǎng)絡(luò)攻擊者的流量通常很難被發(fā)現(xiàn)。
DNS重綁定通過一個域名與兩個ip地址對應(yīng),以此迷惑瀏覽器,使瀏覽器誤認(rèn)為兩個ip屬于相同的區(qū)域源,進(jìn)而將受害主機(jī)作為代理,把目標(biāo)服務(wù)器的內(nèi)容傳送給攻擊者,效果如圖1所示。
由于利用內(nèi)網(wǎng)受害主機(jī)訪問目標(biāo)服務(wù)器,所以,內(nèi)網(wǎng)防火墻很難提供有效的防護(hù)。利用DNS重綁定的手段入侵路由器,攻擊者能夠在受害者毫不知情的情況下,登陸路由器配置界面,對路由器的配置進(jìn)行更改,甚至以此為支點,訪問內(nèi)網(wǎng)其他目標(biāo)。
圖1 DNS重綁定效果
圖2 相同區(qū)域源策略的實際應(yīng)用
為顯示W(wǎng)eb頁面,瀏覽器要進(jìn)行網(wǎng)絡(luò)訪問請求,HTML進(jìn)行靜態(tài)網(wǎng)頁請求,Java腳本、Flash及CSS進(jìn)行動態(tài)網(wǎng)頁請求。為防止Web網(wǎng)站被惡意連接,限制有些網(wǎng)絡(luò)訪問請求,相同區(qū)域源策略根據(jù)區(qū)域源限制某些訪問,從而部分資源被隔離[1]。該策略規(guī)定從一個區(qū)域源下載的文件或程序不能與其他區(qū)域源的文件或程序進(jìn)行連接。
瀏覽器的相同區(qū)域源策略主要是基于統(tǒng)一資源定位符(URL)包括的幾個部分:
<protocol>://<server-host>:<port-number>/<path>
同源策略規(guī)定:
Origin={<protocol>,<server-host>,port-number>}
因此,如果兩個對象的URL具有相同的協(xié)議、主機(jī)名、端口號,那么它們就屬于相同的區(qū)域源[2]。來自于一個區(qū)域源的對象可以訪問另外一個相同的區(qū)域源,如圖2所示。
盡管相同區(qū)域源策略對網(wǎng)絡(luò)服務(wù)器起到一定的保護(hù)作用,但是,設(shè)計的缺陷和其他不安全的服務(wù)使該策略的安全性受到很大的影響。比如,瀏覽器需要將域名轉(zhuǎn)化為IP地址,然后開放一個SOCKET到指定的IP。如果一個DNS請求返回兩個或多個IP,由于這些IP所對應(yīng)的域名相同,瀏覽器會認(rèn)為它們屬于相同的區(qū)域源,因此可以直接訪問這些IP。事實上,攻擊者可以控制DNS服務(wù)器,使其中的一個IP指向攻擊者,一個ip指向目標(biāo)服務(wù)器,進(jìn)而實施攻擊。DNS重綁定就是利用了相同區(qū)域源策略的這個漏洞[3]。
1996 Princeton計算機(jī)科學(xué)實驗室最早實現(xiàn)了DNS重綁定攻擊[4]。這個攻擊利用了java虛擬機(jī)的漏洞[5],同時也第一次使用DNS服務(wù)器實現(xiàn)一個域名對應(yīng)多個IP地址的映射。攻擊過程如圖3所示。
圖3 Princeton DNS重綁定
攻擊者控制自己的WEB服務(wù)器和DNS服務(wù)器,并且將服務(wù)器域名attacker.com與兩個ip地址綁定,一個為攻擊者服務(wù)器ip,另一個為目標(biāo)服務(wù)器ip(該目標(biāo)服務(wù)器與受害者主機(jī)處于同一內(nèi)網(wǎng)中)。另外,攻擊者的web頁面包含了java惡意程序。
受害者瀏覽器向DNS服務(wù)器發(fā)出域名解析請求,獲得兩個ip地址,并首先訪問第一個ip地址,瀏覽器下載并運(yùn)行惡意代碼,該代碼請求瀏覽器開放一個socket到第二個ip地址,也就是目標(biāo)ip,由于該ip在DNS記錄中,所以,java虛擬機(jī)會允許這個連接。這樣,攻擊者可以繞開防火墻的保護(hù),通過受害者主機(jī)訪問目標(biāo)服務(wù)器,獲取信息。
隨著java安全的升級,Princeton DNS重綁定攻擊很快退出了歷史舞臺。
Low TTL DNS重綁定攻擊給DNS記錄增加了TTL值。另外,該攻擊使用了 XmlHttpRequest對象[6],該對象被用于與源服務(wù)器進(jìn)行數(shù)據(jù)交換。攻擊過程如圖4所示。
受害者瀏覽器向DNS服務(wù)器發(fā)出域名解析請求,返回的ip地址為攻擊者服務(wù)器的ip地址,但是該DNS記錄的TTL非常短,近似于零。
受害者訪問攻擊者的惡意網(wǎng)站,包含XmlHttpRequest對象的惡意程序下載并運(yùn)行。
當(dāng)DNS的TTL為零時,瀏覽器會進(jìn)行第二次DNS查詢,此時,DNS服務(wù)器返回的ip為目標(biāo)服務(wù)器的ip地址。
受害者的瀏覽器會將目標(biāo)服務(wù)器的ip當(dāng)做原來的服務(wù)器進(jìn)行登陸。登陸后,XmlHttpRequest在后臺將服務(wù)器的內(nèi)容發(fā)送給攻擊者,而受害者對此卻無從察覺。
兩次連接所對應(yīng)的域名相同,所以,瀏覽器會以為兩個ip屬于相同的區(qū)域源,而事實上并非如此。在Princeton攻擊中,攻擊者在外網(wǎng)利用受害者的瀏覽器攻擊內(nèi)網(wǎng)服務(wù)器。此攻擊的不同之處在于使用了XmlHttpRequest,盡管XmlHttpRequest只能與源服務(wù)器進(jìn)行數(shù)據(jù)交換,但是通過重綁定攻擊,使目標(biāo)服務(wù)器被認(rèn)為是來自相同的區(qū)域源,使得XmlHttpRequest能夠在攻擊者服務(wù)器和目標(biāo)服務(wù)器之間進(jìn)行數(shù)據(jù)的交換。
圖4 Low TTL DNS重綁定
DNS Pinning技術(shù)的誕生,在一段時間內(nèi)有效地阻止了DNS重綁定攻擊,直到2006年Anti-DNS Pinning重綁定攻擊[7]的出現(xiàn)。Anti-DNS Pinning重綁定攻擊主要利用了大部分瀏覽器沒有完全執(zhí)行DNS Pinning的漏洞,通過技術(shù)手段,迫使DNS Pinning失效,進(jìn)而進(jìn)行重綁定攻擊[8]。Anti-DNS Pinning重綁定攻擊主要利用JavaScript或 Adobe Flash Player[9]實現(xiàn)。以 JavaScript為例,其攻擊過程如圖5所示[10]。
受害者向DNS服務(wù)器發(fā)出域名解析請求,獲得的ip地址為攻擊者的ip地址。
受害者主機(jī)訪問攻擊者的惡意網(wǎng)站,下載含有XmlHttpRequest對象的惡意腳本。
惡意腳本向攻擊者服務(wù)器發(fā)出連接申請,服務(wù)器通過某種方式拒絕連,迫使DNS PINNING失效。
受害者瀏覽器再次進(jìn)行DNS查詢,返回的結(jié)果是目標(biāo)服務(wù)器的ip地址。
此時新的ip地址指向內(nèi)網(wǎng)的服務(wù)器,攻擊者的惡意程序訪問內(nèi)網(wǎng)服務(wù)器并將結(jié)果發(fā)送給攻擊者。
攻擊的要點在于服務(wù)器拒絕javascript的連接請求,使DNS PINNING失效。拒絕連接的方法很多[11],例如:關(guān)閉服務(wù)器;使用防火墻屏蔽受害者的ip地址;使用RST中斷TCP連接[9];攻擊者可以在html代碼中加入
<img src=“http://attacker.com:81”>訪問不存在的端口,使連接請求失敗再次進(jìn)行DNS查詢[11]。
圖5 Anti-DNS Pinning重綁定
DNS重綁定對WEB服務(wù)器的影響主要體現(xiàn)在防火墻欺騙和ip地址劫持兩個方面。當(dāng)目標(biāo)服務(wù)器變成路由器的時候,DNS重綁定能夠在外網(wǎng)訪問內(nèi)網(wǎng)路由器的web配置頁面,并且對路由器的配置進(jìn)行更改,進(jìn)而達(dá)到控制路由器的目的。為證實DNS重綁定對路由器的具體影響,搭建以下實驗環(huán)境進(jìn)行模擬分析。
實驗所搭建的環(huán)境如圖6所示。圖中,左側(cè)為受害者網(wǎng)絡(luò),右側(cè)為攻擊者網(wǎng)絡(luò)。Router3為目標(biāo)路由器。
正常情況下,路由器只允許內(nèi)網(wǎng)用戶通過路由器的內(nèi)網(wǎng)ip對其進(jìn)行訪問。如Victim Client可以在瀏覽器中輸入192.168.16.1訪問 router3。在路由器沒有開放wan服務(wù)的情況下,外網(wǎng)用戶不能訪問路由器;如果路由器開放wan服務(wù),外網(wǎng)用戶也會因為不清楚路由器外網(wǎng)ip或者受到路由器訪問限制而不能訪問路由器。但是,通過DNS重綁定,攻擊者可以在外網(wǎng),通過內(nèi)網(wǎng)中的受害主機(jī)訪問路由器,并將數(shù)據(jù)傳遞給攻擊者。實驗的目標(biāo)是攻擊者實現(xiàn)對router3的控制。
實驗所需硬件條件:1臺cisco 2600系列路由器;2臺TP-link WR841N路由器;2臺Catalyst 1900系列交換機(jī);3臺聯(lián)想K49A筆記本電腦。
實驗所需軟件條件:Victim Client運(yùn)行 windows 7操作系統(tǒng),并安裝主流瀏覽器,如 IE10、firefox28.0、chrome33.0 等;DNS Server運(yùn)行 windows 2003;攻擊者 WEB Server運(yùn)行 ubuntu 11.10。
圖6 實驗網(wǎng)絡(luò)拓?fù)鋱D
實驗使用的工具為Rebind[12],該工具集成了2個WEB服務(wù)器和1個http代理服務(wù)器,通過Javascript惡意程序?qū)崿F(xiàn)DNS重綁定。實現(xiàn)過程如圖7所示。
Victim向DNS server發(fā)出域名解析請求,詢問attacker.com的ip地址;
DNS server返回給victim的ip地址為攻擊者服務(wù)器的地址 192.168.23.6;
Victim 瀏覽器訪問 192.168.23.6,返回的結(jié)果是一個新的域名wacme.attacker.com;
Victim再次向DNS server發(fā)出域名解析請求,返回兩個ip地址,第一個ip為攻擊者服務(wù)器ip,第二個ip為攻擊目標(biāo)router3的ip地址;
Victim首先訪問第一個ip,即攻擊者的web服務(wù)器 192.168.23.6,惡意 javascript程序自動下載到victim主機(jī)中;惡意程序自動連接攻擊者web服務(wù)器,此時web服務(wù)器已經(jīng)將端口關(guān)閉,導(dǎo)致連接失敗;Victim瀏覽器自動連接第二個ip地址,即router3的ip,10.1.10.2;
惡意程序通過Xmlhttprequest對象將路由器的web配置界面?zhèn)魉徒o攻擊者的代理服務(wù)器。
攻擊過程中,victim訪問的域名是attacker.com,卻在毫不知情的情況下,被重新綁定到自己的路由器上,導(dǎo)致路由器的數(shù)據(jù)泄露。攻擊實現(xiàn)的技術(shù)要點主要有以下幾點:
(1)TCP RST。惡意javascript程序連接攻擊者web服務(wù)器的時候,攻擊者已經(jīng)將80端口關(guān)閉,導(dǎo)致連接失敗。此舉的目的是通過關(guān)閉端口的方式迫使 DNS Pinning失效,解除域名 wacme.attacker.com與 ip地址192.168.23.6的綁定關(guān)系,使得瀏覽者自動連接第二個ip地址,即router3的ip地址。此時,wacme.attacker.com已經(jīng)綁定到10.1.10.2,victim瀏覽器通過attacker.com:81將數(shù)據(jù)傳送給攻擊者的代理服務(wù)器。
(2)Subnet priority。子網(wǎng)優(yōu)先策略的主要目的是通過最短路徑連接服務(wù)器,以此減少不必要的流量開銷。攻擊過程中,如果第二次DNS查詢返回的IP地址為192.168.23.6和路由器的內(nèi)網(wǎng)ip192.168.16.1,由于路由器和victim同處于一個子網(wǎng)中,那么victim的瀏覽器將直接連接到192.168.16.1,導(dǎo)致攻擊無法實現(xiàn)。因此,攻擊所使用的路由器ip地址為其外網(wǎng)ip。
(3)Xmlhttprequest。XmlHttpRequest該對象主要用于在不重新加載頁面的情況下更新網(wǎng)頁;在頁面已加載后從服務(wù)器請求數(shù)據(jù);在頁面已加載后從服務(wù)器接收數(shù)據(jù);在后臺向服務(wù)器發(fā)送數(shù)據(jù)。正是由于該對象的這些特性,重綁定攻擊中的數(shù)據(jù)傳輸通過該對象實現(xiàn)。
圖7 實現(xiàn)過程
由于DNS Server和WEB Server處于router2的內(nèi)網(wǎng)中,所以,Victim Client不能直接通過域名192.168.23.5和192.168.23.6對其進(jìn)行訪問。因此,需要對Router2進(jìn)行端口映射的配置。53端口對應(yīng)DNS Server,負(fù)責(zé)提供DNS服務(wù),80、81、664端口對應(yīng)攻擊者服務(wù)器,分別負(fù)責(zé)提供WEB服務(wù)、callback服務(wù)和http代理服務(wù),如圖8所示。DNS Server配置如圖9所示。
圖8 路由器虛擬服務(wù)器配置
圖9 DNS Server配置
Victim Client訪問攻擊者服務(wù)器后,服務(wù)器能夠自動獲取Victim Client的ip地址,如圖10所示。
通過在Rebind控制臺點擊顯示的ip地址,即可實現(xiàn)對Router2的訪問,如圖11所示。
圖10 Rebind自動獲取路由器ip
相比其他路由器入侵方式,DNS重綁定主要具有以下幾個特點:
(1)操作簡單。攻擊者只需要發(fā)布惡意網(wǎng)站,并吸引受害者訪問網(wǎng)站即可發(fā)動攻擊。
(2)隱蔽性強(qiáng)。由于通過內(nèi)網(wǎng)受害主機(jī)訪問路由器,所以,路由器日志中不會留下攻擊者的痕跡。
(3)危害性大。通過重綁定攻擊,攻擊者不僅可以訪問路由器,而且可以對路由器的配置進(jìn)行更改,以及進(jìn)行進(jìn)一步的攻擊。
當(dāng)然,并不是所有的路由器都能夠受到DNS重綁定攻擊,必須滿足以下3個條件:路由器的ip stack必須滿足week end system model;路由器必須開放wan服務(wù);路由器的防火墻必須是基于端口的,而不是基于ip地址。
根據(jù)DNS重綁定的特點,基本的防護(hù)方法主要有:修改路由器登陸用戶名和密碼、升級最新的路由器固件以及關(guān)閉路由器wan服務(wù)等等。雖然這些方法都能夠比較有效的保護(hù)路由器遠(yuǎn)離DNS重綁定攻擊,但是,大部分用戶甚至是IT專業(yè)人員都沒有采取有效的措施。
Tripwire公司的一份調(diào)查報告指出,30%的IT專業(yè)人員和46%的員工從不更改其無線路由器上的默認(rèn)管理員密碼;55%的IT專業(yè)人員和85%的員工從不更改其無線路由器上的默認(rèn)IP地址;52%的IT專業(yè)人員和59%的員工沒有更新其路由器的固件到最新版本。由此可見,依靠用戶的主動性解決問題是很困難的,必須開發(fā)自動化的防護(hù)工具。
文中開發(fā)了Router Protector工具,該工具部署在linux環(huán)境下,可實現(xiàn)對路由器的有效防護(hù)。工具包括3個模塊,即ip getter模塊、DNS monitor模塊和http blocker模塊。3個模塊的相互關(guān)系如圖12所示。Ip getter模塊首先獲取路由器外網(wǎng)ip地址,然后,將此ip傳送給DNS monitor模塊和http blocker模塊,這兩個模塊分別負(fù)責(zé)DNS流量監(jiān)控和http訪問阻攔。
圖12 Router Protector模塊關(guān)系圖
Ip getter由于重綁定攻擊使用的是路由器外網(wǎng)的ip地址,所以,獲取該ip地址是保護(hù)路由器的前提。本模塊通過java程序訪問網(wǎng)站www.ip138.com,從網(wǎng)頁中提取路由器的外網(wǎng)ip地址。部分程序代碼如下:
該段腳本通過響應(yīng)Bro系統(tǒng)實時產(chǎn)生的DNS協(xié)議“do-reply”事件對是否發(fā)生DNS重綁定攻擊進(jìn)行檢測。檢測規(guī)則為:若在此次DNS回復(fù)的“reply”字段中發(fā)現(xiàn)路由器的外網(wǎng)地址“10.1.10.2”則觸發(fā)一條報警。另外,為便于調(diào)查取證,Bro腳本將報警信息命名為“DNS-Rebinding-Indicators”,并記錄此次 DNS會話的原地址(即受害主機(jī))及攻擊者網(wǎng)站域名。監(jiān)控結(jié)果如圖13所示。
http blocker該模塊的作用是限制瀏覽器對特定ip地址的訪問。工具中,主要限制瀏覽器訪問路由器外網(wǎng)ip地址,使得重綁定攻擊無法實現(xiàn)。由于用戶平時登陸路由器都是使用的路由器內(nèi)網(wǎng)ip,所以,工具不會對用戶正常使用路由器造成不便。該模塊的功能主要通過修改linux下iptables配置實現(xiàn)。為限制瀏覽器訪問路由器ip,需要增加以下規(guī)則:
圖13 Bro監(jiān)控結(jié)果
設(shè)置iptables規(guī)則后,使用Victim瀏覽器訪問路由器外網(wǎng)ip,結(jié)果如圖14所示。由于Victim無法訪問路由器,所以攻擊無法實施,路由器得到了有效的保護(hù)。
Router Protector主要具有以下3個特點:
(1)自動化程度高,不需要人工設(shè)置。工具能夠自動獲取路由器外網(wǎng)ip,將此ip自動輸入Bro和iptables規(guī)則,實現(xiàn)全時段監(jiān)控和防護(hù)。
(2)報警及時,誤報率低。通過規(guī)則設(shè)置,工具能夠精確捕獲符合規(guī)則的數(shù)據(jù)包。由于用戶很少在內(nèi)網(wǎng)通過路由器外網(wǎng)ip訪問路由器,所以,一般情況下不會出現(xiàn)漏報和誤報。
(3)處置及時,防護(hù)有效。限制瀏覽器訪問路由器外網(wǎng)ip是阻止攻擊的最直接最有效的方法。由于攻擊所需的時間非常短,如果等到DNS monitor模塊報警后,http blocker模塊再采取措施的話,很可能已經(jīng)造成了數(shù)據(jù)的泄露,所以,DNS monitor模塊和http blocker模塊必須同步進(jìn)行。
圖14 Victim瀏覽器訪問路由器結(jié)果
首先對瀏覽器的相同區(qū)域源策略和DNS重綁定行為的發(fā)展過程進(jìn)行研究。在此基礎(chǔ)上,利用工具rebind實現(xiàn)了基于javascript的DNS重綁定對路由器的入侵,并開發(fā)了路由器防護(hù)工具router protector。通過實驗證明,該工具能夠有效阻止DNS重綁定攻擊,保護(hù)路由器。目前,該工具只能部署在linux環(huán)境中。由于windows系統(tǒng)沒有提供類似linux系統(tǒng)的iptables配置環(huán)境,所以,如何在windows系統(tǒng)中實現(xiàn)自動化的防護(hù)功能還有待于進(jìn)一步研究。
[1] 何旭.DNS重新綁定對Web瀏覽器的影響[J].計算機(jī)工程,2010,36(5):156-158.
[2] J Ruderman.Same origin policy for JavaScript[EB/OL].https://developer.mozilla.org/en/Same origin policy for JavaScript.Retrieved May,2008.
[3] M Johns.(somewhat)breaking the same-origin policy by undermining dns-pinning.Posting to the Bugtraq mailinglist[EB/OL].http://www.securityfocus.com/archive/107/443429/30/180/threaded,2006.
[4] Princeton University,CS Department.DNS Attack Scenario[EB/OL].http://www.cs.princeton.edu/sip/news/dns-scenario.html.1996.
[5] D Dean,E Felten,D Wallach.Java Security:From Hot-Java to Netscape and Beyond[J].In roceedings of the 1996 IEEESymposium on Security and Privacy,IEEE Computer Society,1996.
[6] World Wide Web Consortium.The XMLHttpRequest object[EB/OL].http://www.w3.org/TR/XMLHttpRequest/#xmlhttprequest,2008.
[7] M Johns.(somewhat)breaking the same-origin policy by undermining dns-pinning[EB/OL].http://seclists.org/bugtraq/2006/Aug/0290.html,2006.
[8] J Grossman,R Hansen,P Petkov,et al.Cross Site Scripting Attacks:XSS Exploits and Defense[M].Syngress,2007.
[9] Adobe.Policy file changes in Flash Player 9 and Flash Player 10[EB/OL].http://www.adobe.com/devnet/flashplayer/articles/fplayer9-security-03.html,2008.
[10] M Johns,Kanatoko.Using Java in anti DNS-pinning attacks(Firefox and Opera).[online],Security Advisory[EB/OL].http://shampoo.antville.org/stories/1566124/,2007-08-27.
[11] A Megacz.Firewall circumvention possible with all browsers.Posting to the Bugtraq mailinglist[EB/OL].http://seclists.org/bugtraq/2002/Jul/0362.html,July 2002.
[12] C Heffner.How to Hack Millions of Routers[C].Talk at the Black Hat USA conference,2010.