中間人攻擊——DNS欺騙的原理、實戰及防御
1.1 域名系統(Domain Name System)
DNS即Domain Name System 的縮寫,域名系統以分布式數據庫的形式將域名和IP地址相互映射。DNS協議即域名解析協議,簡單的說:DNS是用來解析域名的。有了DNS我們就不用再記住煩人的IP地址,用相對好記的域名就可以對服務器進行訪問,即使服務器更換了IP地址,我們依舊可以通過域名訪問該服務器,這樣能夠使我們更方便的訪問互聯網。
為了方便理解DNS的工作原理,我簡單做了一幅圖:
假如我們要訪問 www.baidu.com ,首先要向本地DNS服務器發出DNS請求,查詢 www.baidu.com 的IP地址,如果本地DNS服務器沒有在自己的DNS緩存表中發現該網址的記錄,就會向根服務器發起查詢,根服務器收到請求后,將com域服務器的地址返回給本地DNS服務器,本地DNS服務器則繼續向com域發出查詢請求,域服務器將 baidu.com 授權域名服務器的地址返回給本地DNS服務器,本地DNS服務器繼續向 baidu.com 發起查詢,得到 www.baidu.com 的IP地址。
本地DNS服務器得到 www.baidu.com 對應的IP地址后以dns應答包的方式傳遞給用戶,并且在本地建立DNS緩存表。
Windows下查看和刷清空DNS緩存表的命令: ipconfig /displaydns ipconfig /flushdns
1.2 DNS欺騙原理
盡管DNS在互聯網中扮演著如此重要的角色,但是在設計DNS協議時,設計者沒有考慮到一些安全問題,導致了DNS的安全隱患與缺陷。
DNS欺騙就是利用了DNS協議設計時的一個非常嚴重的安全缺陷。
首先欺騙者向目標機器發送構造好的ARP應答數據包(關于ARP欺騙請看文章《中間人攻擊——ARP欺騙的原理、實戰及防御 》),ARP欺騙成功后,嗅探到對方發出的DNS請求數據包,分析數據包取得ID和端口號后,向目標發送自己構造好的一個DNS返回包,對方收到DNS應答包后,發現ID和端口號全部正確,即把返回數據包中的域名和對應的IP地址保存進DNS緩存表中,而后來的當真實的DNS應答包返回時則被丟棄。
假設嗅探到目標靶機發出的DNS請求包有以下內容:
Source address : 192.168.1.57
Destination address : ns.baidu.com
Source port : 1234
Destination port : 53 (DNS port)
Data : www.baidu.com
我們偽造的DNS應答包如下:
Source address : ns.baidu.com
Destination address : 192.168.1.57
Source port : 53 (DNS port)
Destination port : 1234
Data : www.baidu.com 192.168.1.59
目標靶機收到應答包后把域名以及對應IP保存在了DNS緩存表中,這樣www.baidu.com的地址就被指向到了192.168.1.59上。
2.1 實戰DNS欺騙
同ARP欺騙一樣,DNS欺騙也可以被稱為DNS毒化,屬于中間人攻擊,我還是用虛擬機來模擬DNS欺騙攻擊
用到的工具是Ettercap
首先來看目標靶機,
很明顯現在www.baidu.com指向到的IP地址是正確的,
接著我們用ettercap來進行DNS欺騙,首先找到etter.dns這個配置文件并且編輯
添加一條A記錄,將 www.baidu.com 指向到本機IP
保存并且退出,使用ettercap開始欺騙:
接著我們在到受到攻擊的主機上看一下:
可以看到,目標主機對域名www.baidu.com的訪問已經被指向到192.168.1.59
在瀏覽器中訪問該域名便訪問到事先搭建好的一臺WEB服務器
以上就是一次成功的DNS欺騙
DNS欺騙的危害是巨大的,我不說大家也都懂得,常見被利用來釣魚、掛馬之類的
2.2 DNS欺騙的防范
DNS欺騙是很難進行有效防御的,因為大多情況下都是被攻擊之后才會發現,對于避免DNS欺騙所造成危害,本菜鳥提出以下建議
1.因為DNS欺騙前提也需要ARP欺騙成功。所以首先做好對ARP欺騙攻擊的防范。
2.不要依賴于DNS,盡管這樣會很不方便,可以使用hosts文件來實現相同的功能,Hosts文件位置:
windows xp/2003/vista/2008/7 系統的HOSTS文件位置 c:\windows\system32\drivers\etc 用記事本打開即可進行修改。
3.使用安全檢測軟件定期檢查系統是否遭受攻擊
4.使用DNSSEC。