DNSSEC運作的基本流程(圖片來源/iThome)

簡稱DNSSEC的Domain Name System Security Extensions,是一項由網際網路工程任務小組(Internet Engineering Task Force,IETF)在1999年提出、2005年成型的DNS解析技術,它主要是在現有DNS的基礎上,加入數位簽章的機制,用來驗證DNS伺服器解析結果的真實性,避免DNS快取中毒(DNS cache poisoning)攻擊的發生。

利用驗證機制,有效確認DNS資料的有效性

事實上,保護DNS伺服器傳輸資料的方式並不止一種。像是Transaction SIGnature(TSIG)就是DNSEC之外,可以保護2臺DNS伺服器之間資料傳輸的做法。想要啟用TSIG的功能,首先我們可以透過DNS伺服器當中的內建工具產生一把金鑰,接著修改DNS伺服器的網域設定,以便將網址的解析結果,及變更A、MX,及CNAME等資源記錄(Resource Record,RR)的設定,先行計算出一個獨一無二的雜湊值之後,經過加密成為憑證,一併傳送給另外一臺DNS伺服器,解密之後,比對接收資料的大小是否和雜湊值一致,用來確認資料在傳送的過程中是否經過竄改。

TSIG是採取對稱式加密的做法保護資料,所以我們也必須將先前產生的同一把金鑰,部署到其他的DNS伺服器,可是這麼一來,如何將金鑰提供給DNS伺服器的管理者,及讓他們完成相關的設定,就是很難克服的一個問題。根據我們了解,目前網路上很少有資料是透過TSIG提供保護的。實作上較為容易部署的環境,是企業自行架設,可以完全控制的主、次要DNS伺服器;再者,DNS伺服器一旦遭受攻擊,或者因為金鑰因為各種不小心的可能,而流落到駭客手中,就有可能從中發動攻擊,那麼TSIG的對於DNS伺服器的資料傳輸就不再具有保護,相較之下,能夠一併驗證DNS伺服器可信度的DNSSEC,在安全的保護上,就完整許多。

DNSSEC的實作要比TSIG要得來複雜許多,在加密的做法上,它採用非對稱的方式,也就是分公、私2把金鑰處理加解密,因此更不容易被破解,不過也因為如此,基於伺服器效能上的考量,使得這項功能並不像TSIG一樣是加密所有傳送給其他DNS伺服器的資料,替代的做法,則是將資料計算出一組獨一無二的雜湊值,形成數位簽章之後,再一併傳送出去。

當DNS伺服器接收到上層伺服器的回應資料後,就會使用另外一把的公鑰解密,比對資料大小是否和雜湊值完全一致,完成驗證的動作。

適用DNSSEC的對象,除了ISP,或者是企業所架設的DNS伺服器之外,其他具備DNS解析功能的網路設備也會逐漸支援這項功能,目前F5的BIG-IP就已經具備實作的能力,另外,D-Link也宣稱,會在即將推出的路由器新版韌體內,將這項功能加入。

需要DNS伺服器的充分支援才能運作

DNS解析網址是有階層性的,因此想要完整部署DNSSEC,就必須從最高等級的root,一直到下層的所有DNS伺服器,及個人端電腦都必須提供支援。

DNSSEC目前正積極的推動當中,今年的5月5日,負責掌管全世界DNS業務的最高機構Internet Corporation for Assigned Names and Numbers(ICANN)與美國政府,及網路服務供應商VeriSign聯手合作,在全球現有的13臺root伺服器,啟用了DNSSEC的功能,等到未來下層的其他DNS伺服器也開始支援這項功能之後,企業就可以著手導入,驗證從上層DNS伺服器接收到的回應結果,是否和DNS傳送出來的原始內容完全一致。

新增多種資源記錄,確保DNS伺服器之間傳送的資料不會被偽冒

相較於目前所使用的DNS服務,DNSSEC會在DNS伺服器的網域名稱設定檔(zone file)當中,增加了DNSKEY、RRSIG、DS(Delegation Signer),及NSEC等4種過去所沒有的資源記錄。

其中,DNSKEY就是用來解密數位簽章的公鑰,當個人端電腦,或者是DNS伺服器,向其他DNS伺服器發出查詢時,就會伴隨回應得到這個物件;而RRSIG即是數位簽章,在網域名稱的設定檔當中,還會對於RRSIG的有效時間加以註記;DS則是一項驗證機制,主要是利用DNSKEY的雜湊值,辨別DNSKEY的真偽;至於NSEC,則是DNSSEC特別針對負向查詢所提供的配套措施。

DS在整個DNSEC的運作流程中,扮演著舉足輕重的角色。當你在網路上架設了一臺負責管理abc.com.tw的DNS伺服器,並且啟用DNSSEC的功能,之後需要將公鑰提供給上層網域(例如com.tw、edu.tw)的管理單位,以便於位於使用者近端的DNS伺服器,利用這樣的做法,確認伺服器身分的真實性。舉例來說,當使用者透過瀏覽器要求解析abc.com.tw時,負責管理整個com.tw網域的DNS伺服器,就會將這個網域先前提供的公鑰傳送給使用者,以便和負責管理這個網域的DNS伺服器所提供的DNSKEY做比對,如果不一樣的話,則代表提供該網域解析結果的伺服器是偽造的惡意站臺。

DS的公鑰是需要定期更換的,重新簽證的做法有2種,其中Zone Singing Key(ZSK)是DS傳統採行的做法,由於DNS是採階層管理的一項網路服務,愈上層的網域管理者所要簽署的網域數量就十分驚人,使得DNSSEC的機制到了最後勢必產生難以管理的現象。

為了解決這個問題,於是後來又有所謂Key Singing Key(KSK)的管理機制推出。相較於ZSK,提供給KSK的公鑰可以保存一段較長的時間,在期限之內,僅需要比對DNS伺服器後續提供的金鑰是否和原來的一致,KSK大致上是利用產生第2對金鑰的做法,利用第2對金鑰當中的私鑰,去加密先前所用的ZSK金鑰,最後將加密過後的檔案,連同第2組金鑰當中的私鑰一併傳送給上層網域的管理者,如此一來,往後僅需透過這樣的流程,重新將原有的公鑰加密後,上傳備查,便可以一直被沿用下去,沒有需要重新置換的問題產生,在強化DNS的安全之餘,也讓管理變得更加方便。

 


相關報導請參考「百萬臺路由器陷入危機:缺乏管理的路由器,將成DNS攻擊幫兇!」


Advertisement

更多 iThome相關內容