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