2014年1月21日全國DNS汙染始末以及分析

ovear發表於2014-01-22

  =w=大概今天15:30的時候,Ovear正在除錯新的伺服器,結果發現腫麼突然上不去了。。結果ping了以下,結果嚇尿了,Ovear的域名都指向到[65.49.2.178]這個IP。Ovear第一反應就是,尼瑪DNSPOD又被黑了! 為什麼說DNSPOD被黑了呢,其實以前DNSPOD就出過一次類似的問題=。=,導致所有的域名都跪了,剛好Ovear這個域名還有測試的幾個域名都是那裡的,然後就到某交流群吐槽。結果管理員說他們的DNS被汙染了,Ovear心想不會是全國DNS都被汙染了吧。結果烏鴉嘴說中了。。還真的是全國劫持。

  然後Ovear就很好奇,到底是怎麼回事呢~有誰能做到這樣的事情~於是就有了以下的分析和科普~

  ——以下內容為Ovear家電腦中病毒所致,跟本人無任何關係,謝絕跨省——

  balablabala說了這麼久,肯定有同學問了,窩又不是學計算機的,(╯‵□′)╯︵┻━┻dns是什麼玩意,跟我有什麼關係!

  那麼DNS是什麼呢,Ovear就來科普下┑( ̄Д  ̄)┍。

  我們訪問一般是通過域名[Domain]來訪問的,咦DNS怎麼也是D開頭的,難道有關係?說對了!就是有關係:DNS的全稱其實是[Domain Name System]翻譯過來就是域名系統。

  在網際網路中,是隻存在IP的,IP其實就是一串數字,相當於你家裡的門牌號,大家在網路中想找到你,必須通過這個,所以IP對於每個人來說是唯一的。但是第四代IP都是http://XXX.XXX.XXX.XXX這樣的,多難記啊,誰會沒事記住IP呢,更何況以後天那麼長的IPV6,要記住不是得要人命!

  這時候一個聰明的科學家出來,我們給IP加一個別名,大家通過別名不就可以不記住這個IP,也可以知道這個IP了!於是就有了域名[Domain]這個東西.

  當你訪問Ovear’s Blog的時候

  電腦的DNS解析系統就會自動問DNS伺服器:尼知道Ovear’s Blog對應的IP地址是神馬麼?

  • DNS:窩幫你查查,奧,找到了,IP是[122.10.94.169].
  • Ovear的電腦:謝啦,再見
  • DNS:恩

  對應現實就是,問知道張三的人:尼知道張三家在哪裡麼? 回答 在南山區 balabalabla。

  當然這樣解釋還是不怎麼恰當的,因為一個DNS伺服器是不可能知道所有域名的地址的,因為這需要耗費極大地代價,所以這時候就出現了遞迴DNS和根DNS。

  (由於篇幅原因,Ovear就簡單的說一下,其實還是有問題的。Ovear以後再寫一篇文章詳細闡述下DNS的工作原理,或者看[Domain Name System] QAQ)

  (補充:QAQ這裡Ovear說的有點過簡單了,其實根DNS(ROOT DNS)指的是全球一共13臺的根DNS,負責記錄各字尾所對應的TOPLEVEL Domain Server[頂級域名根伺服器],然後接下來的就是[權威DNS伺服器],就是這個域名用的DNS伺服器(可以在whois中看到)

  總結一下:

  • [根伺服器]:全球一共13個A-M[.http://root-servers.net],儲存著各個字尾域名的[頂級域名根伺服器]
  • [頂級域名根伺服器]:每個字尾對應的DNS伺服器,儲存著該[字尾]所有域名的權威DNS
  • [權威DNS]:這個域名所使用的DNS,比如說我設定的DNSPOD的伺服器,權威DNS就是DNSPOD。在WHOIS(一個檢視域名資訊的東西)中可以看到。儲存著這個域名[對應著的每條資訊] 如IP等~

  所以正確的解析過程應該跟下面的圖一樣

  使用者使用的DNS(邊緣DNS)->(還會網上推很多級最終到)根DNS->頂級域名根伺服器->權威DNS)

  根DNS是什麼呢?大家想想,每個域名都有一個字尾,比如說ovear是[.info]字尾的。那麼就有一個專門記錄[.info]字尾的dns伺服器,其他字尾也一樣。這個DNS就是該域名的根DNS。

  那麼遞迴DNS呢?其實遞迴DNS就是一個代理人,是用來緩解[根DNS]壓力的,如果大家都去問[根DNS],那[根DNS]不早就跪了。畢竟一個人(網站)的地址不是經常變的,所以就有了TTL這一說法,根據DNS的規定,在一個TTL時間呢,大家就認為你家裡(域名所指向的IP)的地址是不會變的,所以代理人[遞迴DNS]在這個時間內,是隻會問一次[根DNS]的,如果你第二次問他,他就會直接告訴你域名所指向的IP地址。這樣就可以解決[根DNS]負載過大的問題啦。

  順便這一張圖也可以很準確反映出來之前所說的~ =w=

  說了這麼久,口水都幹了,那麼DNS到底跟這次事件有什麼關係呢~

  首先來看張圖

QQ20140121154922

  瓦特!腫麼這麼多域名都指向同一個IP了,這是什麼情況0 0。其實這就是典型的[DNS汙染]了。

  我們知道網際網路有兩種協議,一種是TCP,一種則是UDP了(知道泥煤啊(╯‵□′)╯︵┻━┻都說我不是學計算機的了)。

  TCP和UDP的主要差別就是:能不能保證傳遞資訊的可靠性。UDP是不管訊息是否到達了目標,也不管通過什麼途徑的,他只管我發出去了就好,所以UDP比TCP快得多,但是可靠性沒有TCP好。

20140121180655

  而DNS查詢預設就是用的是UDP,那麼就很好劫持啦。在UDP包任何傳輸的路途上,直接攔截,然後返回給接收端就行了。

  嘖嘖,說道這大家也隱隱約約知道這次事件的問題了吧,範圍如此之廣的劫持,必須要在各個省市的主幹網上進行,而能處理這麼大資料,同時能控制這麼多主幹網的。。嘖嘖嘖。。。沒錯!就是***了~至於***是什麼,Ovear在這就不說了,不然可能大家都見不到Ovear了QAQ。

  說道這裡,Ovear就準備手動查一下,到底是不是所推測的***呢?於是拿到了這個圖(From XiaoXin)

d2c0c26c8b00a17a01806b3f0c7b163b_r

  與此同時運維也在各地的伺服器上開始了跟蹤查詢,發現全國各地解析時間均為25ms左右。這時候結論就出來了。

  這樣就明顯了,肯定是***做的了~~於是Ovear又好奇的查了下,這個IP是什麼來頭,為什麼都要指向到這裡去,於是Ovear發現了一些好玩的東西~(65.49.2.0/24)

  從側面點出了此次事件的始作俑者。

  那麼某FW為什麼要這麼做呢?Ovear在這裡做一個無責任的推測,最有可能的就是:某FW的員工本來是想遮蔽這個IP段的,但是呢一不小心點進去了DNS汙染這個選項,然後又沒寫汙染目標,於是就全域性汙染了嘖嘖嘖~

  但是有些童鞋會問了(╯‵□′)╯︵┻━┻為什麼他們都說用8.8.8.8就沒事了~

  其實這樣子說是不正確的,因為Ovear之前用的就是8.8.8.8,上面也說了DNS查詢預設使用的UDP查詢,所以不管你用什麼,照樣劫持不誤。其實8.8.8.8沒問題是因為汙染事件已經基本結束導致的,那麼為什麼汙染結束後其他國內DNS都不能用,而Goole的DNS確可以正常的使用~於是Ovear就找到了張有趣的圖片~

  我先來解釋下上面命令的用途吧~這個命令是用來直接向DNS伺服器查詢域名的~

  其中的[-vc]引數是強制使用TCP來查詢DNS伺服器,這樣就可以避免UDP汙染的地圖炮。

  那麼為什麼汙染結束後,DNS還會受到汙染呢?其實原因很簡單。Ovear之前說了,[遞迴DNS]是需要詢問[根DNS]的,而預設的詢問方式是採用的UDP,所以在國內的DNS伺服器,自然就受到汙染了。而之前Ovear也提到過TTL這件事~

  在TTL週期內,根據協議[遞迴DNS]是直接吧結果快取在自己那,是不會再去查詢[根DNS]的,所以國內的DNS就把錯誤的結果快取起來了~

  而Google的DNS伺服器基本都是在國外,所以查詢的時候影響並不大,但是國內挺多域名使用DNSPOD啦,DNSLA的DNS,所以Google進國內查,還是會受到一定影響的。

  因此,如果要完全避免這次的影響,有兩個條件

  1、你的域名的DNS必須是在國外
  2、你查詢的DNS必須在國外,而且如果在汙染期需要通過TCP查詢。

  這樣就可以避免這個問題了。

  然後Ovear又手賤查了下這次的TTL,嘖嘖

  如果沒有人員來手動干預,這次的事件還是要持續蠻久的~。

  哎呀先不說了,Ovear去開門收個快遞~,雙十二買的好東西終於到了,咕嘿嘿期待了很久呢~回來繼續說O(∩_∩)O~~

相關文章