資 訊 分 享
DNSSEC 技術 -- TSIG於ZONE Transfer實驗[ 技術專欄 ]

本次技術專欄將解說如何利用TSIG來進行ZONE Transfer之實作,將持續進行五項實驗,藉由實驗來觀看TSIG是否運作正常及是否有作用
本次將介紹實驗A

設備:電腦*3、Hub*1
系統:Windows 2000 Server、Linux RedHat 9
軟體:windows DNS、ISC Bind 9.2.1、ethereal(用來監控封包狀態)

實驗項目:

A master dns與slave dns皆無使用TSIG之機制
B master dns與slave dns皆使用TSIG之機制
C master dns啟用TSIG機制,slave dns未啟用TSIG機制
D slave dns啟用TSIG機制,master dns未啟用TSIG機制
E master與slave皆啟用TSIG機制,但雙方之金鑰不同

環境設定:
在實驗開始之前,有幾點事情是需要注意到的,在為ZONE Transfer進行設定時,如果沒有注意到下列幾點事項,那進行ZONE Transfer將會發生錯誤:


*時間同步化
*產生一對金鑰(shared secret)
*於master dns建立一個允許金鑰傳送的清單(allow-transfer)
*於slave dns的設定檔中加入master dns所使用的金鑰


關於時間同步化的問題,如果二台dns server的時間差距大於數分鐘,則即使所有的設定檔的設定都是沒問題,但是進行ZONE Transfer時依然會發生失敗的情形,這個問題可以利用NTP來解決即可;而金鑰的部分可以使用dnssec-keygen工具來產生,關於dnssec-keygen使用語法在往後會做大致的介紹。需要注意的是雖然RSA、DSA、RSASHA1…等等演算法都能產生金鑰以供使用,但目前TSIG只支援"hmac-md5"演算法。


master dns 與 slave dns 設定檔的部分,需要建立一個TSIG金鑰的設定,為安全起見避免金鑰被篡改,可以把金鑰的部分存成另一個新的唯讀檔案,並只能以root權限來讀取,之後再利用include的方式將金鑰加入到設定檔之內(例如:include /var/named/shared.keys),而金鑰的使用設定如下:


key keyname {
algorithm string;
secret string;
};


另外,在master dns需要建立一個允許金鑰傳送的清單,其設定方式如下:


zone "domain name"{
type zonetype;
file filename;
allow-transfer { key keyname; };
};


最後,在slave dns 的設定檔中加入master dns 所使用的金鑰,其設定方式如下:


server 10.1.1.1 {
keys { keyname; };
};


本次的主角實驗A-master dns與slave dns皆無使用TSIG之機制

將master dns 與 slave dns 的環境架設好之後,利用sniffer軟體監聽ZONE Transfer 時的封包並記錄其封包數量、長度與內容,做為一個照對的實驗樣本。

實驗A之實驗架構


進行ZONE Transfer時,利用 sinffer 軟體所截取的封包與system log檔如下圖所示:



master dns之system log檔內容



slave dns之system log檔內容



利用sniffer軟體截取的封包



利用sniffer軟體截取的封包之一的dns header



利用sniffer軟體截取的封包之一的dns response內容


結果:因為沒有做TSIG,因此資訊將是明文傳送,請注意此項實驗結果一定要為成功,若不成功,接下來就不做囉…


下此將繼續進行實驗B,請待續……



TWCERT/CC

[X] close window