DNS“遞歸與緩存分離”架構評測

近幾年來,DNS解析服務頻繁受到攻擊。僅以國內爲例,2009年5月19日晚21時左右,江蘇、河北、山西、廣西、浙江、天津、內蒙古、黑龍江、廣東等省市出現大範圍網絡故障,各地網民均遇到網絡不暢通、網頁無法打開等問題。據工業和信息化部通信保障局發佈的公告,確認該事件是由於暴風網站域名解析受到網絡攻擊,導致電信運營商的遞歸域名解析服務器收到大量異常請求而引發擁塞。此後不久又發生了百度域名被劫持事件,2010年1月12日,國內最大的中文搜索引擎公司百度的域名被解析到非法地址,導致網民無法正常登陸百度網站達8小時。這是百度成立以來最嚴重的訪問故障事件,給該公司造成的直接損失超過700萬元。

在諸多安全事件的背景下,DNS服務器的性能和安全性受到了空前關注。部分研究人員借鑑了被廣泛採用的Web緩存技術,提出了“遞歸與緩存分離”的架構解決方案。該方案使用兩臺服務器來做DNS解析,其中一臺只做DNS遞歸解析,另一臺只做DNS緩存查詢。研究人員認爲這個方案與Web緩存技術一樣,會帶來兩大優點:首先是整體性能的提升,因爲DNS解析的兩個過程已經被進行了分解,絕大多數情況下可以從緩存中得到結果,只有在必要時才需要遞歸解析,因而提高了性能;二是在受到攻擊時具有更好的安全性,因爲DNS攻擊往往是針對遞歸解析的,由於兩臺服務器各司其職,至少可以保證緩存查詢服務器的安全運行。

從表現上看來,“遞歸與緩存分離”架構確實有一定的吸引力,但事實真的如此嗎?我們對這種架構進行了研究測試,得到這樣一個結論:DNS技術與Web緩存技術存在本質區分,兩者並不能夠混爲一談。儘管“遞歸與緩存分離”架構可能會給性能和安全性帶來一定程度的提升,但同時也存在更大的隱患,並不是一個理想的架構。

首先,讓我們來看一看“遞歸與緩存分離”架構給性能帶來的影響。據統計,正常應用環境下,超過90%的DNS解析請求在DNS系統穩定運行後是可以緩存命中的,只有少量解析請求需要遞歸進行,新架構對性能的提升可能會比較有限。爲了驗證這一點,我們做了一個傳統的通用緩存架構和“遞歸與緩存分離”架構的性能對比測試。測試環境中共有5臺配置相同的服務器([email protected] x 2/8GB內存/雙千兆網卡),統一連接到一臺千兆以太網交換機。其中3臺安裝了在國內擁有較大市場份額的IDNS服務軟件,另2臺作爲高性能發包機使用。3臺IDNS服務器中,1臺爲通用緩存架構,其餘2臺配置爲“遞歸與緩存分離”的部署架構。(測試拓撲見圖1)

接下來,我們在發包機上通過resperf工具,採用現網的域名日誌分別對通用緩存架構和“遞歸與緩存分離”架構進行了壓力測試。這個步驟一共進行5次,取最終穩定的QPS(query per second,每秒請求數)值做爲結果。最終,通用緩存架構的QPS值穩定在20萬,而“遞歸與緩存分離”架構的QPS值爲20.2萬。我們可以看出,DNS系統運行穩定後,“遞歸與緩存分離”架構只會面臨很少量的遞歸請求,因此實際性能與通用緩存架構趨於一致,而不是大幅提升。

實際上,“遞歸與緩存分離”架構在實際使用中也帶來了更多的安全問題。一方面,遞歸與緩存分離帶來了新故障點,它們彼此間又相互影響,使維護監控工作變得複雜。另一方面,由於緩存服務是從遞歸服務處取得解析結果,“遞歸與緩存分離”架構在遞歸服務受到緩存污染攻擊後會出現污染放大效應,且不容易被查覺,可能導致更嚴重的安全事件。此外,由於這種架構有着相對特殊的業務模型,緩存服務器受到的壓力通常遠大於遞歸服務器,因此惡意攻擊者可以採用比緩存服務器小得多的攻擊流量對遞歸服務器進行攻擊。這是一個相當嚴重的問題,因爲它來源於“遞歸與緩存分離”架構本身。一些研究者認爲採用隱藏遞歸服務器IP外加訪問控制策略的手段可以防止有針對性的攻擊,但雖然大部分遞歸服務器的IP地址不會被公開,通過建立一個授權DNS的方式卻可以很容易地得到遞歸服務器IP,並且如果攻擊者採用了源端口爲53的攻擊方式,傳統的訪問控制手段顯然也難以阻擋。

一些研究者還指出,採用“遞歸與緩存分離”架構可在DNS系統受到攻擊,當大量遞歸請求產生導致遞歸服務器崩潰而無力返回解析結果時起到一定的保護作用。理由是緩存服務器的域名在TTL時間內緩存,還能夠做有限度的正常解析,從而可以在類似2009年5月19日暴風影音攻擊那樣的情況下起到保護作用。其實,這種正常解析的效果是相對有限的,因爲目前大型網站的域名傾向於使用較短的TTL,如百度、谷歌都只有20分鐘。因此,“遞歸與緩存分離”架構可能能夠正常解析一段時間,但肯定比較短暫。

還有一些觀點認爲,在缺乏專業抗攻擊安全設備的情況下,用戶可以測試使用不同的DNS系統或不同的功能模塊或插件,利用合理的策略配置,在一定程度上應對攻擊。我們也做了一個測試去驗證這一觀點,利用上一個測試環境,我們移除了一臺服務器,將其餘4臺分別配置爲發包機、壓力機、BIND服務器及IDNS服務器。作爲開放源代碼的DNS服務器軟件,BIND已經成爲世界範圍內使用最爲廣泛的產品,在測試中具有一定的代表性。壓力機使用的是開源的dnsflood攻擊工具,分別針對IDNS服務器和BIND服務器進行攻擊。在此前提下,發包機再採用resperf工具及現網域名日誌進行測試,觀察www.baidu.com以及www.google.com的解析情況。(測試拓撲見圖2)

我們在測試中注意到,針對標準的BIND服務器進行dnsflood攻擊,很快便不能夠解析包括www.baidu.com和www.google.com在內的所有域名;針對IDNS服務器進行攻擊,可以解析出大部分域名,並能夠正確解析www.baidu.com和www.google.com。這個差異來源於DNS服務系統的設計,根據文檔說明,IDNS針對解析隊列進行了一定程度的優化,在擁塞時將採用概率智能拋棄策略,隨時保證到達的請求有機會獲得解析。而對於百度、谷歌等實際中訪問量較大的常見域名來說,獲得解析結果的機會更大一些,從而在DNS系統受到攻擊時仍然能夠保持訪問相對正常。

事實證明,隨着技術的發展進步,DNS系統對類似暴風影音那一類的拒絕服務攻擊已經可以做到一定程度的防護。用戶在部署時可以通過測試、試用等手段評估更多的軟件解決方案。而目前業界比較關注的DNS“遞歸與緩存分離”架構,還存在着較多的安全隱患,選擇時宜慎重。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章