文/段海新
DNSSEC原理、配置與部署(二)
文/段海新
DNSSEC是為解決DNS欺騙和緩存污染而設(shè)計(jì)的一種安全機(jī)制。本文概要介紹DNSSEC的背景、工作原理以及在BIND上的配置,最后介紹它在國際上的部署情況和可能對互聯(lián)網(wǎng)安全機(jī)制的影響。本刊上期已經(jīng)刊載其背景、目的和工作原理。
DNSSEC是為解決DNS欺騙和緩存污染而設(shè)計(jì)的一種安全機(jī)制。本文概要介紹DNSSEC在BIND上的配置,最后介紹國際上的部署情況和它可能對互聯(lián)網(wǎng)安全機(jī)制的影響。
盡管DNSSEC的工作原理看起來讓人氣餒,實(shí)際的配置操作卻并不復(fù)雜。本節(jié)以BIND 9為例介紹DNSSEC的基本配置。盡管BIND 9.3以上就開始支持DNSSEC,仍然建議使用當(dāng)前最高版本的BIND(當(dāng)前最新的版本是9.8)。
配置或部署DNSSEC有兩種場景:
(1)配置安全的域名解析服務(wù)器(Resolver),該服務(wù)器可以保護(hù)使用它的用戶,防止被DNS 欺騙攻擊。這里只涉及數(shù)字簽名的驗(yàn)證工作。
(2)配置安全的權(quán)威域名服務(wù)器(Name Server),對權(quán)威域的資源記錄進(jìn)行簽名,保護(hù)服務(wù)器不被域名欺騙攻擊。
配置安全解析服務(wù)器
激活D N S S E C
首先,在BIND的配置文件(一般是/etc/named.conf)中打開DNSSEC選項(xiàng),比如:
配置Trust anchor
其次,要給解析服務(wù)器配置可信錨(Trust Anchors),也就是你所信任的權(quán)威域的DNSKEY。理想情況下我們可以配置一個(gè)根的密鑰就夠了,但是目前DNSSEC還沒有完全部署的情況下,我們需要配置很多安全島(Secure Island)的密鑰,可以從很多公開的網(wǎng)站下載這些可信域的DNSKEY文件,包括:
(1)Root Zone DNSSEC Trust Anchors:https://www.iana.org/dnssec/。2010年7月部署實(shí)施,如果DNSSEC全部部署成功,這一個(gè)公開密鑰就足夠了。
(2)The UCLA secspider : https://secspider.cs.ucla.edu,由美國加州大學(xué)洛杉磯分校(UCLA)張麗霞教授的實(shí)驗(yàn)室維護(hù)。
(3)The IKS Jena TAR:https://www.iksjena.de/leistungen/dnssec.php
這些文件大概是這樣的格式:
假設(shè)上述trust anchors的文件為/var/named/trust-anchors.conf,則在/etc/named.conf中增加下面一行:
測試
在完成上述配置修改之后重新啟動(dòng)named進(jìn)程,然后選擇一個(gè)trust anchor文件中有的區(qū)或者它下一級(jí)的域名,在解析服務(wù)器上用dig測試一下,例如:
如果配置正確,應(yīng)該返回test.net的SOA記錄和相應(yīng)的RRSIG記錄,另外返回的頭部中應(yīng)該包含A D標(biāo)志位,表示DNSSEC相關(guān)的數(shù)字簽名驗(yàn)證是正確的,類似下面的樣子:
如果沒有得到期望的結(jié)果,需要查看DNS的日志來找出問題。BIND為DNSSEC相關(guān)的事件增加了一個(gè)dnssec類別,可以在/etc/named.conf配置日志如下:配置權(quán)威服務(wù)器
生成簽名密鑰對
首先為你的區(qū)(zone)文件生成密鑰簽名密鑰KSK:
然后生成區(qū)簽名密鑰ZSK:
其中的-a 參數(shù)是簽名算法,-b是密鑰長度。上述命令共產(chǎn)生兩對DNSKEY密鑰(共四個(gè)文件),分別以.key和.private結(jié)尾,表明這個(gè)文件存儲(chǔ)的是公開密鑰或私有密鑰。
簽名
簽名之前,你需要把上面的兩個(gè)DNSKEY寫入到區(qū)文件中
然后執(zhí)行簽名操作:
上面的-o選項(xiàng)指定代簽名區(qū)的名字。生成的db.test.net.signed
然后修改/etc/named.conf如下:
記住,你每次修改區(qū)中的數(shù)據(jù)時(shí),都要重新簽名:
發(fā)布公鑰
要讓其他人驗(yàn)證你的數(shù)字簽名,其他人必須有一個(gè)可靠的途徑獲得你的公開密鑰。DNSSEC通過上一級(jí)域名服務(wù)器數(shù)字簽名的方式簽發(fā)你的公鑰。
用dnssec-signzone時(shí),會(huì)自動(dòng)生成keyset-文件和dsset-開頭的兩個(gè)文件,分別存儲(chǔ)著KSK的DNSKEY記錄和DS記錄。作為test.net區(qū)的管理員,你需要把這兩個(gè)文件發(fā)送給.net的管理員,.net的管理員需要把這兩條記錄增加到.net區(qū)中,并且用.net的密鑰重新簽名。
如果你的上一級(jí)域名服務(wù)器還沒有配置DNSSEC,你不得不另找其他方式了,比如,把上述兩個(gè)文件提交到一些公開的trust anchor數(shù)據(jù)庫中發(fā)布(如上面介紹過的secspider),或者直接交給愿意相信你的解析服務(wù)器的管理員,配置到他們的trust anchor文件中。
互聯(lián)網(wǎng)工程技術(shù)領(lǐng)域普遍認(rèn)為DNSSEC是增強(qiáng)互聯(lián)網(wǎng)基礎(chǔ)設(shè)施安全非常關(guān)鍵的一步,比如,美國國土安全部發(fā)起了DNSSEC部署計(jì)劃,美國網(wǎng)絡(luò)空間國家戰(zhàn)略安全明確要求部署DNSSEC。DNSSEC的大規(guī)模部署還可能解決其他的安全問題,比如密鑰的分發(fā)和安全的電子郵件。
盡管互聯(lián)網(wǎng)工程界認(rèn)為DNSSEC非常重要,但是大規(guī)模的部署仍然非常謹(jǐn)慎。巴西 (.br)、保加利亞 (.bg)、捷克 (.cz)、波多黎各 (.pr) 和瑞典 (.se), 很早就開始在他們國家的頂級(jí)域名上部署DNSSEC,IANA在2007年開始在一個(gè)根域名服務(wù)器上進(jìn)行簽名試驗(yàn)。許多機(jī)構(gòu)在DNSSEC的部署上付出了巨大的努力。
在ICANN和VeriSign的推動(dòng)下,2010年7月,所有13個(gè)根域名服務(wù)器都對根域簽名完畢且投入運(yùn)營。頂級(jí)域名(如.org, .net等)也在計(jì)劃之中,有些國家級(jí)的頂級(jí)域名服務(wù)器(如.cz、.jp、.us、.fr等)已經(jīng)完成了這一任務(wù)。
國際上一些大的ISP已經(jīng)開始部署支持DNSSEC的解析服務(wù)器,以保護(hù)他們接入用戶的安全,美國Comcast 公司是其中的先驅(qū)者之一。
作者認(rèn)為如果DNSSEC能夠普遍部署,可能對互聯(lián)網(wǎng)的安全體系產(chǎn)生重大的影響;因?yàn)橛辛薉NSSEC的數(shù)字簽名,把DNS作為密鑰分發(fā)的PKI在很多應(yīng)用場合已經(jīng)具有了可行性。它不僅僅可以加強(qiáng)DNS系統(tǒng)本身的安全,作為網(wǎng)絡(luò)的基礎(chǔ)設(shè)施,還給其他的應(yīng)用,特別是端到端的移動(dòng)通信、IPv6網(wǎng)絡(luò)環(huán)境的安全問題提供新的解決辦法。
但是作者也認(rèn)為,離這一目標(biāo)的實(shí)現(xiàn)還有很長的路要走。一方面DNSSEC自身的協(xié)議還在發(fā)展,另一方面其他的應(yīng)用要想利用DNSSEC的機(jī)制還需要大規(guī)模的研究試驗(yàn)和最后的標(biāo)準(zhǔn)化。另外,DNSSEC在某些國家是否會(huì)遭遇政策性的阻礙,也是個(gè)未知數(shù)。
盡管如此,因?yàn)镈NS對互聯(lián)網(wǎng)實(shí)在太重要了,如果DNSSEC是通往一個(gè)安全可靠的互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的必由之路(目前作者還沒有看到可以替代DNSSEC的其他解決方案),為此付出代價(jià),也是別無選擇的。
(作者單位為清華大學(xué)信息網(wǎng)絡(luò)工程研究中心)