利用域名(host碰撞)碰撞实现从任何地方发起中间人攻击(理论篇)
簡述
相比大家對中間人劫持的攻擊相當(dāng)了解,尤其是局域網(wǎng)中的中間人攻擊。有很多的利用手段比如ARP投毒、DNS投毒、ICMP重定向等等,這類的文章在網(wǎng)上非常的多。但是今天要討論的是一個全新的中間人攻擊方式,這種方式在近幾年的頂會論文中被研究。這種中間人攻擊條件一旦具備,攻擊者可以從任何地方對網(wǎng)絡(luò)發(fā)起中間人劫持。
在這篇文章里我將總結(jié)和分析這類攻擊的原理,并列舉目前網(wǎng)絡(luò)上存在這些漏洞的服務(wù)應(yīng)用。最后討論一下作為軟件開發(fā)人員應(yīng)該怎么去防范這類攻擊。
背景知識
在很多私有網(wǎng)絡(luò)環(huán)境里會使用許多私有的域名后綴比如.ntld等等。在ICANN(The Internet Corporation for Assigned Names and Numbers)互聯(lián)網(wǎng)名稱與數(shù)字地址分配機(jī)構(gòu)?最初指定的頂級域名中有.com、.org等,這些后綴的域名可以被公共網(wǎng)絡(luò)的用戶注冊和使用。但是幾年前,該組織對gTLD(Generic top-level domain,通用頂級域)進(jìn)行了擴(kuò)充,將許多泄露的私有域名后綴列為了合法的通用頂級域。這個舉措就導(dǎo)致了后面的攻擊發(fā)生。
在介紹攻擊之前,需要介紹本文涉及的一些知識點。
-
(1)WPAD協(xié)議
全稱:WebProxy Auto Discovery Protocol。WPAD 通過讓瀏覽器自動發(fā)現(xiàn)代理服務(wù)器,使代理服務(wù)器對用戶來說是透明的,進(jìn)而輕松訪問互聯(lián)網(wǎng)。WPAD 可以借助 DNS 服務(wù)器或 DHCP 服務(wù)器來查詢代理自動配置(PAC)文件的位置。 -
(2)PAC文件
全稱: Proxy auto-config。一個PAC文件包含一個JavaScript形式的函數(shù)“FindProxyForURL(url, host)”。這個函數(shù)返回一個包含一個或多個訪問規(guī)則的字符串。 用于控制用戶訪問網(wǎng)絡(luò)資源的時候是否需要使用代理以及使用何種代理。一個典型的例子如下:
-
(3)基于DNS的服務(wù)發(fā)現(xiàn)協(xié)議
英文名稱:DNS-based Service Discovery。基于DNS的服務(wù)發(fā)現(xiàn)協(xié)議在RFC 6763文件中被定義,簡稱DNS-SD。比如想發(fā)現(xiàn)一個comp.ntld域下的svc服務(wù)所在的IP和端口,整個過程如下:- DNS PTR請求發(fā)送給DNS服務(wù)器得到所有的服務(wù)實例名稱
- 對于每一個服務(wù)實例名稱,一條SRV請求會被處理得到服務(wù)的IP和端口
- 上述PTR和SRV請求的格式都會是_svc._prot.comp.ntld這樣的,這也是標(biāo)準(zhǔn)的格式。
-
(4)AS域
自治系統(tǒng):autonomous system。在互聯(lián)網(wǎng)中,一個自治系統(tǒng)(AS)是一個有權(quán)自主地決定在本系統(tǒng)中應(yīng)采用何種路由協(xié)議的小型單位。
WPAD中間人攻擊
在你的瀏覽器中開啟自動切換代理就是開啟了WPAD協(xié)議,我們設(shè)想一個這樣的攻擊場景(如圖)。受害者啟用WPAD協(xié)議,然后去DNS服務(wù)器上請求PAC文件所在的鏈接,之后DNS服務(wù)器返回受害者PAC資源路徑,然后受害者電腦下載這個PAC文件并設(shè)置。
問題就在于如果DNS返回給用戶的是惡意的PAC文件,這個文件將所有流量代理設(shè)置為攻擊者的服務(wù)器,那么受害者之后所有的流量都會被傳送攻擊者,這就是中間人攻擊的模型。
整個中間人攻擊的核心就是圖中紅色的返回內(nèi)容,但是過去的攻擊基本都要依靠局域網(wǎng)的投毒或者從DNS投毒、緩存等角度去實現(xiàn)。這篇文章利用的是域名碰撞,接下來我們將詳細(xì)分析。
利用域名碰撞實現(xiàn)任何地方發(fā)起的中間人攻擊
如下圖所示,在受害者的自治域(AS)內(nèi),有一條WPAD服務(wù)請求被泄露發(fā)送到公網(wǎng)的DNS服務(wù)器里,比如root根服務(wù)器,由于這個服務(wù)請求是請求company.ntld域下的WPAD服務(wù),這是個私有域,公網(wǎng)的根服務(wù)器當(dāng)然不知道這種域名的情況,因此會返回給請求的客戶端NXD消息( Non-eXistent Domain )。泄露的原因多種多樣,因為DNS服務(wù)器本身查詢這種不存在域名的時候會向根服務(wù)器發(fā)送查詢指令導(dǎo)致泄露,有可能是服務(wù)應(yīng)用本身配置不當(dāng)導(dǎo)致的泄露。
公網(wǎng)的根服務(wù)器或者數(shù)據(jù)收集機(jī)構(gòu)可能會記錄下這樣的域名查詢記錄(wpad.company.ntld)。如果攻擊者通過某種手段知道了這樣的域名,并且在gTLD擴(kuò)充之后.ntld后綴被允許注冊,那么攻擊者可以合法的注冊一個公網(wǎng)的company.ntld域名,并且綁定到攻擊者的服務(wù)器。
那么危害就來了,如果私有網(wǎng)絡(luò)自治域內(nèi)的應(yīng)用向外網(wǎng)請求了wpad.company.ntld這樣的一條請求,希望知道WPAD服務(wù)器的IP和端口,那么公網(wǎng)的DNS服務(wù)器會解析這個域名到攻擊者的服務(wù)器上,之后攻擊者可以可以任意控制自治域的受害者主機(jī)代理配置,劫持受害者的流量。如果這個請求來自受害者自治域的服務(wù)程序(為這個AS所有用戶提供WPAD服務(wù)),那么攻擊者甚至可以將整個AS域內(nèi)的全部主機(jī)流量劫持,這種危害相當(dāng)巨大。
這種中間人攻擊,對于攻擊者來說,只需要去公網(wǎng)注冊這樣的域名就可以造成巨大的危害,成本很低。而且現(xiàn)實中許多服務(wù)應(yīng)用在對系統(tǒng)底層請求DNS解析的內(nèi)容都是無條件信任的,攻擊者只要利用這種域名碰撞就能輕松地實現(xiàn)對漏洞的利用。
服務(wù)應(yīng)用漏洞的定義
不僅僅是提供WPAD服務(wù)的應(yīng)用,上面只是用WPAD舉例,但是從前面的攻擊分析可以知道,只要服務(wù)應(yīng)用滿足以下二個條件就能被攻擊者利用:
只要攻擊者知道了這個DNS服務(wù)發(fā)現(xiàn)的請求鏈接,并在公網(wǎng)注冊這樣的域名就能返回給這樣的服務(wù)應(yīng)用攻擊者決定的內(nèi)容,可以導(dǎo)致很多漏洞的發(fā)生,包括中間人攻擊、惡意代碼注入、程序流程劫持等等。
尋找存在漏洞的服務(wù)應(yīng)用
如何獲得這樣的DNS服務(wù)發(fā)現(xiàn)請求鏈接呢(比如wpad.company.ntld)?
作為黑客,可以通過社工、竊密、其他漏洞等等得到一個AS自治域的一些私有域名信息。作為科研人員,我們可以直接DNS根服務(wù)器記錄中去發(fā)現(xiàn),比如DNS-OARC Day In The Life of the Internet (DITL) 數(shù)據(jù)集。
從根服務(wù)器的記錄中,我們?nèi)ふ叶愑涗?#xff1a;
- 一是gTLD擴(kuò)充前的響應(yīng)為NXD的DNS請求
- 二是現(xiàn)在gTLD擴(kuò)充的域名后綴
從這些記錄中整理提取出泄露的DNS服務(wù)發(fā)現(xiàn)請求,對應(yīng)這些鏈接和服務(wù)在網(wǎng)絡(luò)上也可以找到對應(yīng)的服務(wù)程序。這里列舉去年研究人員總結(jié)的服務(wù)應(yīng)用和漏測試的漏洞情況如下:
防范這類攻擊主要從二種層面:
- 網(wǎng)絡(luò)管理層面:做好網(wǎng)絡(luò)配置,避免自治域的私有請求發(fā)送到公網(wǎng)。在網(wǎng)絡(luò)內(nèi)也要檢測是否被外網(wǎng)的服務(wù)劫持。
- 軟件層面:對請求返回的內(nèi)容加以驗證,比如IP地址是否是允許的范圍內(nèi),對一些敏感操作需要嚴(yán)格的控制和驗證,避免惡意代碼注入。
總結(jié)
以上是生活随笔為你收集整理的利用域名(host碰撞)碰撞实现从任何地方发起中间人攻击(理论篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery之简单的表单验证
- 下一篇: 取某个日期所在周的任意一天日期