DNS劫持新方法(“侧信道攻击“攻破“端口随机化“的研究)
0、被指路老頭坑死的項(xiàng)羽
大家好,我是謝幺。
今天的黑客技術(shù)科普,得從兩千多年前說起。
話說公元前202年,垓下,項(xiàng)羽大敗,帶八百精銳開著疾跑突圍,速度之快,跑到后面只有一百多個(gè)兵跟上。
本來妥妥能跑路,忽然遇到一個(gè)分岔路口,迷了路,這時(shí)路邊田里正好有個(gè)老頭,項(xiàng)羽就問他江東怎么走,老頭:“往左。”
項(xiàng)羽照著走,沒走多遠(yuǎn)馬蹄就陷進(jìn)沼澤地,耽誤了時(shí)間,被漢軍追上。
后面的事大家都知道了,一代霸王就此下線。
司馬遷把這件事寫進(jìn)了他的書里。
“項(xiàng)王至陰陵,迷失道,問一田父,田父紿曰‘左’。左,乃陷大澤中。以故漢追及之。
——《史記·項(xiàng)羽本紀(jì)》司馬遷
后來有人說:一定是項(xiàng)羽問路不禮貌,所以田父決定教他做人;也有人說:田父是一位智者,不愿看到繼續(xù)打仗生靈涂炭,所以故意弄死項(xiàng)羽;還有人說:田父其實(shí)是劉邦提前安插的間諜……
總之,這段歷史告訴我們:指路人很重要,可以讓你生,也可以讓你死,都不知道咋死的。
臺(tái)下觀眾:死過矣!可是這跟黑客攻擊有啥關(guān)系?
1、田父與DNS系統(tǒng)
你也許知道,互聯(lián)網(wǎng)世界里錯(cuò)綜復(fù)雜,“地名”也就是服務(wù)器地址最初都是用IP地址來記錄的,比如202.108.22.5,很難記,容易把人搞暈。
于是技術(shù)大佬們就設(shè)計(jì)了一套“域名系統(tǒng)”,英文名叫DNS(Domain Name System)。
從此,服務(wù)器不僅可以擁有IP地址,還可以給自己掛一個(gè)“域名”,方便廣大網(wǎng)友尋找。比如上面提到的IP地址:202.108.22.5 其實(shí)是www.baidu.com服務(wù)器IP。
哪個(gè)更好記一目了然。
當(dāng)你在互聯(lián)網(wǎng)世界唱著小曲飆著車,DNS解析服務(wù)器就扮演了“田父”的角色。你在瀏覽器地址欄里輸入:www.hornpub.cn,你的電腦或手機(jī)會(huì)跑去問“田父”。
“老頭,羊角酒館(www.hornpub.cn)咋走?”你的設(shè)備問。
田父(DNS解析服務(wù)器)掏出一卷長長的表格,“嗯,查到了,是66.254.114.41,小伙子注意安全。”
“得嘞謝謝,好人一生平安。”你的電腦得了地址,徑直前往。于是你就打開了網(wǎng)頁。
即便你感覺不到,但只要你正常上網(wǎng),每天至少得跟DNS打上幾千次交道。
無數(shù)個(gè)DNS解析服務(wù)器分布在地球的各個(gè)角落,它們就像永不停歇的機(jī)器,為全世界人民服務(wù)。
每時(shí)每刻,假如你能俯瞰世界互聯(lián)網(wǎng)地圖,上面都分布著密密麻麻無數(shù)個(gè)大大小小的“田父”正在為網(wǎng)民們指路。
那么問題來了:如果黑客或者壞人盯上田父,會(huì)發(fā)生什么?
2、搞定“田父”
壞人盯上田父,分兩種情況。
其一是一頓暴打,讓“田父”喪失指路能力。
2016年,美國最大的DNS域名解析服務(wù)商Dyn就被一個(gè)宅男用僵尸網(wǎng)絡(luò)打癱,那時(shí),無數(shù)人同時(shí)抬頭看向彼此,他們手里的手機(jī)、電腦陷入一片空白。Twitter、spotify、netflix、airbnb、github、reddit、Paypal 等等一系列服務(wù)相繼癱瘓。攻擊共來襲三次,每次持續(xù)1小時(shí),史稱“美國大斷網(wǎng)”。
其二是黑客對(duì)著“田父”一頓忽悠,把它“策反”,或者讓它出錯(cuò),給人瞎指路。
也許你看出來了,第一種情況像是原子彈,雖摧毀一切,但充其量讓你上不了網(wǎng),第二種情況卻能神不知鬼不覺地把人帶進(jìn)陰溝里。
2020年10月,幺哥坐在GeekPwn極棒大賽的觀眾席,有幸看到一次利用DNS把人帶進(jìn)溝里的技術(shù)演示。
當(dāng)時(shí)臺(tái)上評(píng)委拿著目標(biāo)手機(jī),打開一個(gè)網(wǎng)站,起初這個(gè)網(wǎng)站顯示藍(lán)底紅字:
然后選手在自己電腦上一頓操作。
評(píng)委再次輸入剛才的網(wǎng)址,網(wǎng)頁就變成紅色——這意味著目標(biāo)手機(jī)被劫持到黑客的釣魚網(wǎng)站。整個(gè)過程只花了幾分鐘。
這個(gè)攻擊的精妙之處在于,選手的電腦并不需要跟目標(biāo)手機(jī)連入同一個(gè)網(wǎng)絡(luò)(專業(yè)術(shù)語叫Off-path)——這意味著可以像全球巡航導(dǎo)彈一樣,黑客躲在地球上的任何一個(gè)角落動(dòng)動(dòng)手指,都能對(duì)千里之外的目標(biāo)發(fā)起這種攻擊。
為了弄懂其中的奧秘,我默默記下選手們的名字,一回到北京,就殺到清華-奇安信網(wǎng)絡(luò)安全聯(lián)合研究中心,逮住當(dāng)時(shí)的幾個(gè)參賽選手一問究竟。
3、失傳多年的漏洞重出江湖
技術(shù)小哥:“你知道2008年卡明斯基發(fā)現(xiàn)的那個(gè)震驚全網(wǎng)的DNS重大漏洞嗎?我們這次攻擊演示相當(dāng)于重現(xiàn)了當(dāng)年那個(gè)漏洞的攻擊場景。”
我:“卡什么斯基?”
技術(shù)小哥:“卡明斯基!”
我:“卡明什么基?”
技術(shù)小哥:“卡明斯基!”
我:“什么明斯基?”
技術(shù)小哥:“……”
好吧我顯然不知道。于是小哥幫我梳理了一下整件事的前后邏輯:
2008年,一個(gè)叫卡明斯基的研究員小哥發(fā)現(xiàn)了DNS系統(tǒng)的重大安全缺陷,震驚業(yè)界。
有多震驚?卡明斯基當(dāng)時(shí)給另一位技術(shù)大佬保羅·維克西(“域名軟件之父”)打電話講完整個(gè)經(jīng)過,保羅嚇得不輕:“你…你…可千萬千萬別再在電話里重復(fù)剛才說過的話了!”他怕電話被人竊聽。
卡明斯基的那次發(fā)現(xiàn)被譽(yù)為當(dāng)年最重要的網(wǎng)絡(luò)安全事件之一。
后來微軟公司牽頭,和十幾個(gè)廠商、相關(guān)單位悶在會(huì)議室里討論,想出一個(gè)緩解機(jī)制(具體是什么待會(huì)兒講)。
十多年過去了,加州大學(xué)河濱分校的錢志云教授帶著實(shí)驗(yàn)室的同學(xué)們研究出一套辦法,可以繞過當(dāng)年的那個(gè)緩解機(jī)制。
講到這個(gè)必須多說一嘴,網(wǎng)絡(luò)安全技術(shù)領(lǐng)域經(jīng)常出現(xiàn)類似的事:研究者先找到一個(gè)漏洞,報(bào)告給廠商,等廠商把漏洞修復(fù),大家都以為不會(huì)再有問題時(shí),誒~研究者們又想出個(gè)辦法攻破這個(gè)修復(fù)機(jī)制。
但是因?yàn)橐咔榈木壒?#xff0c;錢志云教授和同學(xué)們這次不方便回國參加2020年極棒大賽,所以找到他們?cè)趪鴥?nèi)的小伙伴清華奇安信聯(lián)隊(duì),讓他們代勞把攻擊方式制成實(shí)際可用的攻擊程序,到極棒大會(huì)的舞臺(tái)展示。這便出現(xiàn)了第二段中的一幕——載入互聯(lián)網(wǎng)安全史冊(cè)的DNS攻擊重現(xiàn)江湖。
為了解釋清楚整個(gè)過程,我們還是從2008年DNS的第一場雪說起。
4、黑掉DNS系統(tǒng)的第一步:先了解它
DNS系統(tǒng)的具體工作流程是這樣滴:
你在電腦(或手機(jī))的瀏覽器里輸入網(wǎng)址,也就是網(wǎng)站域名,比如www.qianhei.net
你的電腦或手機(jī)會(huì)跑去問你的 ISP(網(wǎng)絡(luò)服務(wù)提供商,移動(dòng)聯(lián)通電信之類)的遞歸DNS服務(wù)器:
你的機(jī)器:“嘿哥們兒,知道www.qianhei.net怎么走嗎?”
遞歸DNS服務(wù)器翻了翻它的小本本,發(fā)現(xiàn)沒寫,回復(fù)說:“我不曉得,但我可以幫你問一下根域名服務(wù)器。”
遞歸DNS服務(wù)器:“大哥,請(qǐng)問您知道www.qianhei.net 的IP地址是多少嗎?”
根DNS服務(wù)器通常不會(huì)直接回答,而是會(huì)告訴他該找誰:“我不曉得,但是我曉得.net域名都是頂級(jí)域名服務(wù)器大娃管的,你去問大娃吧。”
于是遞歸DNS服務(wù)器又跑去問頂級(jí)DNS服務(wù)器“大娃”。
遞歸DNS服務(wù)器:“喂?是大娃吧?www.qianhei.net的IP地址是多少?”
頂級(jí)DNS服務(wù)器大娃:“不知道,你去問權(quán)威服務(wù)器二娃吧,他知道,qianhei.net 這一片歸他管。”
好吧,又去問權(quán)威DNS服務(wù)“二娃”。
遞歸DNS服務(wù)器:“喂?二娃吧?請(qǐng)問www.qianhei.net的IP地址是多少?”
www.qianhei.net這個(gè)域名比較簡單,所以到這時(shí)二娃已經(jīng)知道它的IP地址了,假如遇到別的更復(fù)雜的域名,比如xieyao.zhenshuai.qianhei.net,二娃還會(huì)繼續(xù)踢皮球給三娃、四娃……
權(quán)威服務(wù)器二娃對(duì)遞歸DNS服務(wù)器說:“我知道!我知道!www.qianhei.net的IP地址是47.92.24.48……可以把我脖子上的刀放下了嗎?”
遞歸DNS服務(wù)器歷經(jīng)九九八十一難,終于拿到IP地址,遞歸給你的電腦,于是你的電腦就可以高高興興地訪問淺黑科技的官網(wǎng)啦。
干完活,遞歸DNS服務(wù)器心想:“這要是每次都這么折騰我一遍,豈不是要我老命?”于是它掏出一張紙,把剛才你問的IP地址和域名的對(duì)應(yīng)關(guān)系臨時(shí)記在上面。
這張臨時(shí)用的紙就叫“DNS緩存”,在一定時(shí)間內(nèi),當(dāng)有人再問它www.qianhei.net的IP地址,它直接從緩存里找就行,不必再求別人。
DNS的基礎(chǔ)知識(shí)鋪墊完畢,現(xiàn)在問題就出現(xiàn)這個(gè)緩存上。
從理論上來說,如果黑客如果能想辦法讓DNS服務(wù)器把一條錯(cuò)誤的DNS解析記錄記錄到緩存小本本里,在緩存有效的時(shí)間里,就能把人導(dǎo)進(jìn)溝里。
5、黑掉DNS的第二步:污染緩存
到這里,黑客的目標(biāo)變成了如何把一條惡意的DNS解析信息寫進(jìn)緩存里。
一臺(tái)DNS服務(wù)器每天可能會(huì)發(fā)出和接到成千上萬條請(qǐng)求,為了不弄混,它們會(huì)給每一條請(qǐng)求安排一個(gè)詢問單號(hào)(QueryID),是一個(gè)二進(jìn)制、16位數(shù)的數(shù)字(本文為了方便表達(dá)就用十進(jìn)制數(shù)字表示了)。
當(dāng)域名和QueryID、服務(wù)器之間通信用的端口號(hào)都能對(duì)上時(shí),DNS服務(wù)器就會(huì)欣然接受這一條消息,并寫進(jìn)緩存里,否則會(huì)直接舍棄。
相信你已經(jīng)發(fā)現(xiàn)了,QueryID和服務(wù)器端口號(hào)在這里就像是個(gè)暗號(hào)。
然鵝,DNS服務(wù)器在最初設(shè)計(jì)時(shí)也許根本沒考慮到網(wǎng)絡(luò)攻擊的問題,QueryID是有規(guī)律的,就跟吃飯叫號(hào)一樣,如果上一單的Query是1001,下一單肯定是1002,再下一單就是1003… …
每一次操作系統(tǒng)給服務(wù)器分配的通信用的臨時(shí)端口號(hào)也同樣有規(guī)律可循……
即便有些DNS服務(wù)器用了隨機(jī)化的QueryID,二進(jìn)制的16位數(shù)字,總共也就2^16=65536種可能性。
黑客一個(gè)一個(gè)去試就行了,行話叫“爆破”——暴力破解。
只要能趕在遞歸DNS服務(wù)器收到真正的答復(fù)之前,偽裝成權(quán)威DNS服務(wù)器,給遞歸DNS服務(wù)器回復(fù)一個(gè)錯(cuò)誤的答案,并且QueryID、端口號(hào)跟域名能對(duì)的上號(hào)就行。
有點(diǎn)像警匪電影里的交易現(xiàn)場,有人冒充其中一方提前到場,跟對(duì)方對(duì)上暗號(hào),把貨物劫走。
具體操作時(shí),黑客會(huì)在極短的時(shí)間,像加特林機(jī)槍一樣打過去幾萬數(shù)據(jù)包,猜測QueryID,但凡有一個(gè)能蒙中,并且能搶在真正的回復(fù)到達(dá)之前,攻擊就成功了。
此時(shí),遞歸DNS服務(wù)器正在向四娃請(qǐng)求DNS域名解析。
遞歸DNS服務(wù)器:“hi,四娃,這里是詢問單號(hào)886,請(qǐng)問www.qianhei.net的IP地址是多少?”
攻擊者趕在四娃之前,搶先向遞歸DNS服務(wù)器發(fā)出答復(fù)。
攻擊者的服務(wù)器:“我是四娃,這里是詢問單號(hào)856的回答,www.qianhei.net的IP地址是666.666.666.666(假的地址)”
攻擊者的服務(wù)器:“我是四娃,這里是詢問單號(hào)857的回答,www.qianhei.net的IP地址是666.666.666.666。”
……
……
……
攻擊者的服務(wù)器:“我是四娃,這里是詢問單號(hào)885的回答,www.qianhei.net的IP地址是666.666.666.666。”
攻擊者的服務(wù)器:“我是四娃,這里是詢問單號(hào)886的回答,www.qianhei.net的IP地址是666.666.666.666。”
最后一次終于蒙對(duì)了詢問單號(hào)QueryID——886,于是這條記錄會(huì)被遞歸DNS欣然接受,然后寫進(jìn)緩存小本本里。
而根據(jù)先來后到的原則,真·四娃姍姍來遲的消息會(huì)被直接舍棄。
至此,你已經(jīng)學(xué)會(huì)了如何黑掉單條DNS解析記錄緩存。
6、黑掉DNS的第三步:接管整個(gè)域
在黑掉單條DNS解析記錄緩存的基礎(chǔ)上,卡明斯基想到一個(gè)更騷的操作——直接冒充權(quán)威服務(wù)器,接管整個(gè)地盤。
還是跟剛才差不多的步驟,只不過忽悠的內(nèi)容和對(duì)象變了。不是直接告訴他一個(gè)假的IP地址,而是把它忽悠到黑客搭建的DNS服務(wù)器上。
具體是這么做的:
黑客搶在根域名服務(wù)器之前答復(fù)遞歸DNS服務(wù)器,并且把它引導(dǎo)到了一個(gè)黑客搭建的權(quán)威DNS服務(wù)器上。
之后,遞歸DNS服務(wù)器會(huì)把黑客搭建的DNS服務(wù)器誤認(rèn)為是頂級(jí)DNS服務(wù)器大娃,并且記在小本本里。
于是,黑客接替了大娃的工作。當(dāng)然,黑客也可以冒充其他權(quán)威DNS服務(wù)器,總之,葫蘆娃中出了個(gè)叛徒。
7、安全補(bǔ)丁
會(huì)議室里,來自微軟和其他眾多廠商的技術(shù)大佬愁眉苦臉,正商量對(duì)策。這個(gè)問題最頭疼之處在于DNS是互聯(lián)網(wǎng)的基礎(chǔ)設(shè)施,很多協(xié)議、字段都已經(jīng)定好了,不好隨意改動(dòng)。
大家明明知道,只需要把QueryID的位數(shù)擴(kuò)大就可以延長黑客猜出來的時(shí)間,讓他沒法趕在真正的消息到達(dá)之前“加塞”,但QueryID沒法改——它就像是互聯(lián)網(wǎng)的鐵軌寬度,無數(shù)列車每時(shí)每刻跑在上面,這時(shí)候你說這個(gè)寬度不不對(duì),要改?可以,但代價(jià)太大。
不過微軟最終想出一個(gè)妙招:隨機(jī)化端口號(hào)。
2008年“卡明斯基事件”之后,DNS服務(wù)器每次通信都會(huì)在1024~65536號(hào)端口中隨機(jī)選一個(gè)端口號(hào)和對(duì)方建立通信連接。還是和之前一樣,只有當(dāng)端口號(hào)、QueryID、域名同時(shí)匹配才接受對(duì)方的消息。
這就好比黑幫老大有2500多個(gè)電話分機(jī),每次隨便用一個(gè)電話跟對(duì)方交易,如果用36號(hào)機(jī)發(fā)出去消息,就只接受打到36號(hào)分機(jī)的電話。如果其他分機(jī)接到電話,即便能對(duì)上暗號(hào),那也肯定有問題。
如此一來,黑客同時(shí)蒙中端口號(hào)、QueryID的概率就是2^16×(65536-1024)=4,227,858,432分之一。
攻擊所需的時(shí)間從一開始的幾秒鐘變成了十幾天,從理論上來說就不可能趕在真消息到達(dá)之前“加塞”。
至此,2008年最受關(guān)注的DNS安全問題被緩解。
當(dāng)然,這只是暫時(shí)的。
8、“側(cè)信道攻擊”攻破“端口隨機(jī)化”
“只要有辦法在很短的時(shí)間內(nèi)猜中端口號(hào),就可以把攻擊需要的時(shí)間重新縮短”清華奇安信聯(lián)隊(duì)的技術(shù)小哥說。
2020年前后,加州大學(xué)河濱分校的錢志云教授輕撫羽扇微微一笑:不難不難,你有端口隨機(jī)化,我有側(cè)信道攻擊。
所謂側(cè)信道攻擊,就是旁敲側(cè)擊——先找到對(duì)方“不經(jīng)意之間泄露的信息通道”,再通過兩件事的關(guān)聯(lián)性來推斷出關(guān)鍵信息。
打幾個(gè)比方就明白:
其一:聽保險(xiǎn)柜轉(zhuǎn)動(dòng)的聲音來判斷密碼,收集保險(xiǎn)柜不經(jīng)易泄露的聲音信道,再通過聲音-機(jī)械位置-密碼的關(guān)聯(lián)性來推測出密碼。
其二:利用顯示器、鍵盤泄露出的無線電波來竊取計(jì)算機(jī)里的內(nèi)容,以及利用芯片泄露出來的微弱無線電波來破解其中的密鑰。
其三:隔壁老王想知道你在不在家,不必敲開你家門看,看看你家水表、電表的走數(shù)就能大概判斷里頭有幾個(gè)人,再看看門口的垃圾、再看看車庫里的車……利用這些不經(jīng)意泄露出來的信息,再找到信息之間的關(guān)聯(lián)即可。
那具體要怎么把DNS服務(wù)器通信的隨機(jī)端口給找出來呢?
錢老師發(fā)現(xiàn)Linux操作系統(tǒng)有一個(gè)機(jī)制:默認(rèn)限制一臺(tái)服務(wù)器在20ms之內(nèi)最多只能發(fā)送50個(gè)ICMP包。(記住這個(gè),這是攻擊的關(guān)鍵)
ICMP包是個(gè)啥呢?我們有時(shí)候測電腦有沒有連上網(wǎng),測一個(gè)服務(wù)器或者網(wǎng)站通不通,會(huì)“ping一下”,發(fā)出的就是ICMP包。
此時(shí),遞歸DNS服務(wù)器正用1075號(hào)端口和權(quán)威DNS服務(wù)器“大娃”通信。
它們用了一種叫 Connect UDP 的通信方式,通信的端口只對(duì)正在通信的服務(wù)器開放——這意味著黑客無法從外部直接掃出哪個(gè)端口開著。即便向1075號(hào)端口發(fā)數(shù)據(jù)包,也會(huì)提示該端口是關(guān)閉的。
側(cè)信道攻擊是怎么找出開放的1075號(hào)端口?
首先,黑客把所有可能的端口分組,每一組50個(gè),然后把自己的IP地址偽裝成大娃,給遞歸DNS服務(wù)器的1024~1074號(hào)端口依次發(fā)一個(gè)UDP包,在20ms內(nèi)完成。
黑客服務(wù)器:
“hello?在嗎?我是大娃……端口1024在嗎?”
“hello?在嗎?我是大娃……端口1025在嗎?”
“hello?在嗎?我是大娃……端口1026在嗎?”
“hello?在嗎?我是大娃……端口1027在嗎?”
互聯(lián)網(wǎng)世界有一個(gè)設(shè)定,默認(rèn)情況下,無論是誰給你發(fā)一個(gè)UDP包,你都一定會(huì)返回給對(duì)方一個(gè)ICMP包,告訴對(duì)方你“在不在”。
“不在”
“不在”
“不在”
“不在”
……
因?yàn)?024~1074號(hào)端口全都沒開,所以遞歸DNS服務(wù)器會(huì)返回50個(gè)ICMP包給大娃(由于黑客偽裝成大娃的IP,所以目標(biāo)服務(wù)器會(huì)把消息返還給大娃,而不是黑客)
此時(shí),目標(biāo)DNS服務(wù)器在20ms內(nèi)的50次ICMP包限制被全部消耗完,當(dāng)黑客再用自己的IP地址發(fā)送一個(gè)UDP包給目標(biāo)DNS服務(wù)器,它就沒法回應(yīng)了。于是黑客可以得出結(jié)論:1024~1074號(hào)端口一個(gè)都沒開。
再繼續(xù)猜1075~1125號(hào)端口。
黑客服務(wù)器:
“hello?在嗎?我是大娃……端口1075在嗎?”
“hello?在嗎?我是大娃……端口1076在嗎?”
“hello?在嗎?我是大娃……端口1077在嗎?”
“hello?在嗎?我是大娃……端口1078在嗎?”
由于除了1075號(hào)之外的其他49個(gè)端口都沒開,于是目標(biāo)DNS服務(wù)器會(huì)回復(fù)49個(gè)ICMP包。
“不在”
“不在”
“不在”
“不在”
……
而1075號(hào)端口此時(shí)已經(jīng)和大娃建立了Connect UDP連接,所以目標(biāo)服務(wù)器會(huì)直接在跟大娃的通信連接里回復(fù)大娃:“咦,我倆不是已經(jīng)建立連接了么,你還問我在不在干啥?”不會(huì)消耗ICMP包。
由于這次只發(fā)了49個(gè)ICMP包,所以目標(biāo)DNS服務(wù)器在20ms內(nèi)還剩一次發(fā)ICMP包的機(jī)會(huì)。
這時(shí)黑客再用自己的IP地址發(fā)一個(gè)UDP包過去,就能得到回應(yīng):“不在。”于是,黑客可以判斷:1075~1125號(hào)之間的某個(gè)端口開了。
之后再把1075~1125號(hào)端口繼續(xù)分組,用類似方法,逐漸縮小猜測范圍,最終就找到目標(biāo)1075號(hào)端口。
一旦猜中端口號(hào),就繞開了2008年的那套“端口隨機(jī)化”的緩解機(jī)制,之后再按照卡明斯基的那套方法做就好啦~
至此,2008年影響最大的DNS安全事件的攻擊手法,以及后續(xù)攻破其緩解機(jī)制的手法全部呈現(xiàn)在你眼前。
能讀到這里的都是親人,能看懂的個(gè)個(gè)都是人才。
9、從理論到攻擊程序
清華奇安信聯(lián)隊(duì)的一位選手小楊告訴我,盡管理論上聽起來的有點(diǎn)復(fù)雜,但實(shí)際制作攻擊程序……更復(fù)雜。
上面說到的那一套攻擊流程,猜端口號(hào)也好,猜QueryID也罷,每個(gè)步驟都必須完成地恰到好處,慢了,就沒法搶在真消息之前加塞,快了,整個(gè)步驟就會(huì)亂掉,失去效果。
為了搶在真正的DNS信息返回之前“加塞”,他們還需要用到各種手段為自己的攻擊擴(kuò)大窗口期。
“DNS服務(wù)器之間的通訊有一個(gè)防護(hù)機(jī)制,為了防止被人濫用,一旦某個(gè)IP請(qǐng)求次數(shù)過多,就會(huì)被短暫的拉入黑名單。”他告訴我,他們利用這個(gè)機(jī)制,一邊猜端口號(hào)和詢問單號(hào),一邊偽裝成目標(biāo)DNS服務(wù)器給權(quán)威服務(wù)器不停地發(fā)請(qǐng)求,讓權(quán)威DNS服務(wù)器把目標(biāo)DNS服務(wù)器給短暫“拉黑”,這樣就能“拖住”他們雙方之間的通信,為自己的攻擊爭取更大的窗口期。
在演示時(shí),還得考慮丟包、網(wǎng)絡(luò)波動(dòng)和舞臺(tái)上的信號(hào)干擾等情況,任何一點(diǎn)風(fēng)吹草動(dòng)都可能導(dǎo)致攻擊演示現(xiàn)場翻車。
“DNS在互聯(lián)網(wǎng)世界里無處不在。”小楊說,8月份接到攻擊演示的任務(wù)時(shí),本來他們想了很多種攻擊場景。
比如劫持收銀系統(tǒng)的支付訂單,“可以做到你伸出二維碼讓店員掃,你扣了款,但是店員其實(shí)沒收到錢,錢進(jìn)了壞人的口袋。”
再比如汽車安全,“你的汽車要更新系統(tǒng)固件,本來應(yīng)該去官方地址請(qǐng)求,但是黑客可以通過DNS把它劫持到黑客的服務(wù)器,給你下發(fā)一個(gè)留有后門的固件。”
類似的方法還可以用到攝像頭、門鈴、手機(jī)APP等各種等各種場景,他們甚至設(shè)想過“讓所有參會(huì)者的健康碼都由綠碼變成紅碼,再變回綠碼。”
他們準(zhǔn)備了一套收銀系統(tǒng)、攝像頭,但是最終主辦方考慮到舞臺(tái)網(wǎng)絡(luò)環(huán)境復(fù)雜,以及可能引起不必要的誤會(huì)(比如不明真相的吃瓜群眾看到收銀系統(tǒng)被黑,可能以為是設(shè)備有漏洞,或者誤以為是支付寶或者微信支付出了漏洞,三人成虎,以訛傳訛,相當(dāng)可怕),于是他們最終決定取消這些展示,僅展示了劫持手機(jī)訪問網(wǎng)站。
當(dāng)然,在展示之前,他們已經(jīng)提前把漏洞通報(bào)給了Linux社區(qū)等相關(guān)單位和機(jī)構(gòu)。
11、網(wǎng)絡(luò)世界的修復(fù)者
臨走前,我問小楊:“當(dāng)你得知錢老師破了2008年DNS安全事件的緩解機(jī)制時(shí),你心情怎么樣?激動(dòng)不?”
小楊:“就還好吧,很正常啊……”
這對(duì)他們司空見慣。他說,研究諸如TCP、HTTP、DNS、CDN之類的底層網(wǎng)絡(luò)基礎(chǔ)協(xié)議或設(shè)施的安全問題,是他們的日常。
“錢老師的團(tuán)隊(duì)之前就在極棒舞臺(tái)上展示過很多次各種破解。2019年,我們清華奇安信聯(lián)合實(shí)驗(yàn)室也出過一個(gè)Https的攻擊演示。”他說。
走出奇安信的大樓,我看到不遠(yuǎn)處帶著頭盔的工人叮叮咣咣正在修路,不由地感慨互聯(lián)網(wǎng)其實(shí)也像現(xiàn)實(shí)世界一樣,很多東西用著用著就老了,舊了,有些基礎(chǔ)設(shè)施在最初設(shè)計(jì)時(shí)并沒有考慮網(wǎng)絡(luò)安全問題,用著用著問題就暴露出來。
所幸,有這么一群白帽子黑客,他們能看到網(wǎng)絡(luò)世界的千瘡百孔,也有本事利用這些漏洞獲得高人一等的權(quán)和利,但他們決定一點(diǎn)一點(diǎn)修復(fù)這個(gè)世界。
也許這就是黑客精神吧。
參考資料:
Steve Friedl's Unixwiz.net Tech Tips.《An Illustrated Guide to the Kaminsky DNS Vulnerability》
看雪『Pwn』版主 BDomne.《TCP 的厄運(yùn),網(wǎng)絡(luò)協(xié)議側(cè)信道分析及利用 | GeekPwn 重點(diǎn)項(xiàng)目剖析》
總結(jié)
以上是生活随笔為你收集整理的DNS劫持新方法(“侧信道攻击“攻破“端口随机化“的研究)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tree 命令使用
- 下一篇: python实现栅栏密码加解密