實(shí)現(xiàn)大規(guī)模中間人攻擊的核武器:DNS劫持
現(xiàn)代社會(huì),攻擊者通過受害者訪問網(wǎng)頁(yè)的行為反復(fù)劫持銀行賬戶是可行的。用不著瀏覽器漏洞利用,也看不到任何警告。對(duì)網(wǎng)絡(luò)罪犯而言,這些攻擊又廉價(jià),成功率又高。
對(duì)頭,這里所說的攻擊就是DNS劫持。DNS劫持是受害者DNS請(qǐng)求被攔截并返回虛假響應(yīng)的一種攻擊類型。這種攻擊能在保持URL欄不變的情況下,重定向用戶到另一個(gè)網(wǎng)站。
舉個(gè)例子,如果受害者訪問 wf.com (美國(guó)富國(guó)銀行集團(tuán)),DNS請(qǐng)求可能會(huì)被發(fā)送到攻擊者的DNS服務(wù)器,然后返回攻擊者用以記錄登錄數(shù)據(jù)的Web服務(wù)器地址。
2010年以來,通過DNS劫持進(jìn)行的中間人攻擊(MITM)數(shù)量有所上升。這改變了MITM攻擊的威脅模型。因?yàn)樵谶@之前,大規(guī)模MITM攻擊基本上是聞所未聞的。
究其原因,一般,攻擊者想MITM某人流量時(shí),他們需要處理全部的流量,比如說,通過一個(gè)代理。這樣一來,每個(gè)受害者都會(huì)耗用可觀的帶寬,意味著攻擊者需要構(gòu)建相當(dāng)?shù)幕A(chǔ)設(shè)施。這種事,很可能造成成本比利潤(rùn)還高,太不劃算了。
不過,對(duì)攻擊者而言幸運(yùn)的是,客戶端用作DNS解析的服務(wù)器,基本上屬于不用修改其他網(wǎng)絡(luò)設(shè)置就能改變的東西。因此,DNS成為了小巧簡(jiǎn)單的攔截對(duì)象,造成了DNS劫持惡意軟件的上升。
2010年,我們見識(shí)到了DNSCHANGER——一款運(yùn)行于受害者主機(jī)上,并通過 Windows API 修改DNS服務(wù)器的惡意軟件。2014年,我們通過SOHO惡意軟件見證了該攻擊原理的進(jìn)化升級(jí)。SOHO程序通過CSRF(跨站請(qǐng)求偽)傳播,基本上,它發(fā)送很多請(qǐng)求,在192.168.0.0、192.168.1.1、10.0.0.1等界面嘗試大量品牌路由器的默認(rèn)口令,試圖找出并修改受害者路由器的DNS服務(wù)器。
由于路由器通過DHCP設(shè)置絕大多數(shù)其客戶端的DNS服務(wù)器,該DNS服務(wù)器便會(huì)被網(wǎng)絡(luò)中的成員主機(jī)使用。(基本上,大多數(shù)客戶端從DHCP服務(wù)器接收DNS服務(wù)器設(shè)置,該DHCP服務(wù)器很多時(shí)候就是其路由器充任。)然后,攻擊者可以攔截包含有到TLS站點(diǎn)(https)的重定向或超鏈接的HTTP請(qǐng)求,將這些請(qǐng)求修改成普通的HTTP。該操作與TLSSTRIP類似。
BSidesSF上放出一款此類工具,名為“DNTLSSTRIP”。它能幫助滲透測(cè)試員執(zhí)行DNS劫持,動(dòng)態(tài)攔截并修改HTTP數(shù)據(jù)。這款工具是模塊化的,用戶想動(dòng)態(tài)攔截任何協(xié)議都可以,只需添加相應(yīng)模塊即可。
隨該工具發(fā)布的,還有關(guān)于DNS劫持正反兩面用法的演講,比如滲透測(cè)試員可怎樣在公司網(wǎng)絡(luò)中使用DNS劫持,網(wǎng)絡(luò)罪犯會(huì)怎么使用,你又該怎么防范等等。這會(huì)讓我們延伸想到:一旦進(jìn)入某網(wǎng)絡(luò),能不能利用專用DNS獨(dú)霸整個(gè)網(wǎng)絡(luò)呢?對(duì)此,BSidesSF上做出了模擬演示。
公司環(huán)境比普通個(gè)人或家庭環(huán)境的風(fēng)險(xiǎn)高很多,正因如此,攻擊者特別中意滲透給定網(wǎng)絡(luò)。(假設(shè)攻擊者已經(jīng)通過網(wǎng)絡(luò)釣魚之類的常見手段,在網(wǎng)絡(luò)中建立了小小的橋頭堡。)
進(jìn)入這種網(wǎng)絡(luò),攻擊者最愛用的方法一般是針對(duì)性攻擊,比如路由器漏洞利用(RCE)或者默認(rèn)口令攻擊。所以,最好從攻擊者對(duì)給定網(wǎng)絡(luò)的路由器使用RCE的角度考量這種攻擊。并且以此為基礎(chǔ),攻擊者或者滲透測(cè)試員可以在網(wǎng)絡(luò)中鋪開,DNS劫持的利用機(jī)會(huì)也是大把的。
鑒于大量服務(wù)通過非加密信道更新,而且不檢查下載的安裝包是否真實(shí),攻擊者利用MITM獲得多臺(tái)計(jì)算機(jī)控制權(quán)的途徑也是很多的。
比如CVE-2016-1252,一個(gè)APT(高級(jí)軟件包工具)簽名繞過漏洞利用。黑客組織手握大量類似漏洞和匹配的零日漏洞利用絲毫不令人意外。攻擊者或許也用不著繞過TLS,因?yàn)榇蟛糠諰inux發(fā)行版的默認(rèn)APT源都不使用TLS。
因此,攻擊者只需為關(guān)鍵服務(wù)或者自動(dòng)更新的服務(wù)(比如用crontab設(shè)置定時(shí)進(jìn)行apt-get升級(jí)),推送虛假關(guān)鍵更新就行了。不難想象,這種攻擊執(zhí)行幾天之后,攻擊者將獲得網(wǎng)絡(luò)中大量主機(jī)的訪問權(quán)。利用DNS,攻擊者可以僅用TXT記錄就創(chuàng)建隱蔽C&C信道,就跟DNSCAT(一款利用DNS隧道繞過防火墻的工具,堪稱隧道通信的瑞士軍刀)似的。
那么,防御者該怎樣阻止此類攻擊呢?
上述所有攻擊方法都依賴于讓出站DNS請(qǐng)求發(fā)送到任意服務(wù)器。所以,將出站DNS請(qǐng)求引至防火墻層級(jí)未知服務(wù)器,或“離線”公司資源的終端/AV客戶端,即可解決問題。
這將完全清除上述場(chǎng)景中使用的主要攻擊方法,讓我們得以封鎖流向外部DNS服務(wù)器的所有請(qǐng)求,也就擋住了攻擊者利用DNS作為C&C信道的通路。不過,利用自動(dòng)更新軟件的攻擊方法還是擋不住。所以,在可能的情況下嘗試使用端到端加密還是很重要的。
最后,說個(gè)實(shí)用性問題:在IDS/IPS層解決通往未知DNS服務(wù)器的黑洞請(qǐng)求是最有效的,就像tripwire所做的那樣。