DNS欺騙技術原理與安全防範技術

  那麼在這背後又有什麼事情正在進行着呢?一般而言,你的瀏覽器將會向DNS服務器發送一個請求,從而要求得到與www.google.com相匹配的IP地址,DNS服務器則會告訴你的瀏覽器google的IP地址,接着你的瀏覽器會連接並顯示主頁內容。哦,等一下,你打開的網頁說google因無錢支付網站費用而轉讓給CSite的消息。你可能會非常吃驚,並打電話告訴你的好朋友。當然你的朋友一定會笑你瘋掉了,因爲你的朋友是可以登陸google並進行搜索的。還確信正在和你通信的IP地址是友好的嗎?說不定你已成圈中之羊。當你在瀏覽器地址裏輸入hxxp://66.249.89.99並回車時,你又會發現,其實www.google.com還健在。
  其實剛剛就是DNS劫持***時目擊者可能看到的情形。
  試想如果跳轉的頁面被無聲無息地掛着馬又會多糟糕
  非常急切地相要知道着其中地玄機吧?是不是DNS服務器給了我們一個錯誤地IP地址?可能是吧。至少,這是我們腦中最符合邏輯地答案。
  按此在新窗口打開圖片事實上,有兩種方法可以實現DNS劫持***。讓我們來看看第一種,“DNSID欺騙”技術。
  A)DNS高速緩衝存儲器麻痹(DNSCachePoisoning)
  可以想象,DNS服務器不可能將所有現存的域名或IP地址存儲在本身的存儲空間裏。這就是爲什麼DNS服務器有一個高速緩衝存儲器(cache),它使得服務器可以存儲DNS記錄一一段時間。
  事實上,一臺DNS服務器只會記錄本身所屬域中的授權的主機,如果它想要知道其它的,在自身域以外主機的信息,就必須向信息持有者(另一臺DNS服務器)發送請求,同時,爲了不每次都發送請求,這臺DNS服務器會將另一臺DNS服務器返回的信息又記錄下來。
  那麼現在,我們就來看看是怎麼麻痹DNS的緩存的。
  ***者有自己的域(attacker.net)和一個已被攻陷的DNS服務器(ns.attacker.net)。注意!我說的是被攻陷的DNS服務器,因爲***者已經自定義了他自己的DNS服務器的記錄,比如,記錄可以是www.google.com=81.81.81.81
  1)***者向你的DNS服務器發送請求查詢www.attacker.net
  2)你的DNS服務器不知道這臺主機的IP地址,因爲他不屬於本身域,所有你的DNS服務器就會問此主機的所屬域的DNS服務器。
  3)這時被黑DNS服務器就會回覆你的DNS服務器,在此同時它也會給出它所有的記錄(包括連接www.google.com的記錄)
  注意,這個過程叫做zonetransfer.
  4)這是你的DNS服務器還沒有被麻痹。***者得到了自己的IP地址,但是他的目標不是得到自己網絡服務器的地址,而是逼迫zonetransfer進行以使你的DNS服務器麻痹直到其緩存不會被清楚或更新。
  5)現在如果你再問你的DNS服務器關於www.google.com的IP地址,它會告訴你172.50.50.50,這也正是***者的服務器所在!現在,***者就能爲所欲爲,例如掛馬什麼的……當然這也對google造成了相當的損失!
  B)DNSID欺騙(DNSIDSpoofing)
  我們可以看到,當主機X要與主機Y聯繫是需要近來的IP地址。然而在絕大多數情況下,X只有Y的名字,這樣,DNS協議就是來解決名字到IP地址的問題的。
  因此,X就會向它所在域的DNS服務器詢問Y的IP地址。其間,主機X分配一個隨即數,這個數也將會出現在從DNS服務器返回的信息裏。當X收到回覆後,X會對比兩個數字,如果一致,則收到信息被視爲有效。
  那這樣一個模型是否安全呢?並非十分安全。任何人都可以組織一次***來獲得這個ID.舉例說如果你用LAN,別人就可以利用嗅探器捕獲你的請求ID,然後根據這個ID僞造一個回覆信息……但是信息裏含有***者所選的IP地址。然後,不加識別的,X會吧***者提供的IP地址當作Y的。
  順便提一句,DNS協議的提出請求是依賴於UDP的(只有在zonetransfer時才用TCP),這也就意味着發送一個僞造的包是極其簡單的,因爲沒有SYN/ACK號(不像TCP,UDP沒有提供一個小型防IP欺騙的防護)
  但是,這樣的***是被侷限的。在我以上的例子中,***者用嗅探器攔獲ID,回覆構造過的包給受害主機。
  換句話說,即使***者攔截了請求,數據包還是會傳去DNS服務器,而DNS服務器也照樣會回覆(除非***者攔截並阻止對網關的請求或實施ARP緩存麻痹纔可能在轉換網絡中***)。
  這就意味着***者必須在真DNS服務器前回復,即爲了***成功,***者必須和被***者同一個LAN,只有這樣他纔可以獲得快速的ping並且捕獲對方的數據包。
  實踐舉例(僅作測試目的)
  看怎麼劫持我們本地網絡連接:
  1、麻痹被***者的ARP緩存
  2、此時,目標主機的出口數據包將會重定向到你的主機上,但是還必須轉發給真正的網關。我們可以用類似WinroutePro的工具來實現。
  3、爲了實施DNSID欺騙我們用valgasu開發的工具WinDNSSpoof
  命令行下輸入類似的命令:
  wds-nwww.google.com-i123.123.123.123-g00-C0-26-DD-59-CF–v這個命令會使目標主機的www.google.com指向123.123.123.123.
  其中00-C0-26-DD-59-CF是網關或DNS服務器的MAC地址。
  Tips:在WindowsNT內核下,查詢遠程IP的MAC地址可以在CMD裏用nbtstat-Axxx.xxx.xxx.xxx命令
  警告:記住!在未授權的情況下使用這些手段是被禁止的!
  C)藉助生日悖論的精確***
  什麼是“生日悖論”?
  “生日悖論”得名於一個能產生奇怪現象的數學模型,即如果有23人在一起,那麼很有可能其中的兩人有相同的生日。其實要理解也不是那麼困難。
  假設現在你在一個派對問某人他的生日,那麼他跟你不同生日的機率就是364/365=0.997,則相同的概率就是1-364/365=0.003.
  現在,如果你再問另外一個人,他的生日不同於前一人且不同於你的概率就是(364/365)*(363/365)=0.992,所以我們至少可以推得我們中兩人有相同生日的概率爲1-0.992=0.008.
  如果我們繼續這樣的推算,很快就能算得23人中有兩人的生日相同的概率高達50%.我們可以通過以下的C代碼看出概率是如何趨近於1的。
  #definePOSSIBILITIES365.0
  voidmain(void)
  {
  floatchances;
  inti,j;
  for(i=1;i
  沒法編譯的朋友可以看下面的結果:
  People
  2
  9
  16
  23
  30
  37
  44
  65
  79
  Chances
  0.0027
  0.0946
  0.2836
  0.5073
  0.7063
  0.8487
  0.9329
  0.9977
  0.9999
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章