Kaspersky發佈了一篇KeyTrap:如何用單一資料包破壞 DNS 伺服器
DNS是網際網路上的一個重要服務,它負責將域名轉換為IP地址,讓我們可以訪問各種網站和資源。但是,DNS也有一些安全問題,例如DNS欺騙,就是攻擊者利用偽造的DNS回應,將用戶導向惡意的網站或伺服器。為了防止這種攻擊,DNSSEC(DNS安全擴展)被提出,它是一套對DNS協定進行加密簽名的機制,可以驗證DNS回應的真實性和完整性。
然而,最近一些德國的研究人員發現了一個DNSSEC的漏洞,它可以讓攻擊者通過一個惡意的封包,就能使DNS伺服器陷入無法工作的狀態。這種攻擊被稱為KeyTrap,它利用了DNSSEC簽名驗證的邏輯錯誤,造成DNS伺服器在處理惡意封包時,CPU使用率飆升,並持續很長時間。根據研究人員的測試,一個KeyTrap封包可以讓DNS伺服器停擺170秒到16小時,取決於伺服器使用的軟體。
KeyTrap攻擊不僅會影響DNS伺服器的正常運行,也會對使用該伺服器的客戶端造成網路中斷,無法訪問任何網站或資源。此外,KeyTrap攻擊還可能破壞一些基礎設施服務,例如垃圾郵件防護、數位證書管理(PKI)和安全跨域路由(RPKI)。研究人員稱KeyTrap為“有史以來最惡劣的DNS攻擊”。
令人驚訝的是,KeyTrap攻擊利用的DNSSEC漏洞並不是新發現的,而是存在了將近25年。這個漏洞源於1999年發布的DNSSEC規範的一個版本,即RFC-2035。這個版本的DNSSEC規範定義了一種簽名算法,稱為RSAMD5,它使用RSA公鑰加密和MD5雜湊函數。然而,這種算法存在一個缺陷,就是它允許簽名者在簽名中添加任意長度的填充數據,而不影響簽名的有效性。這就給了攻擊者一個機會,他們可以在簽名中插入大量的填充數據,使得DNS伺服器在驗證簽名時,需要進行大量的數學運算,從而耗盡CPU資源。
雖然RSAMD5算法已經被廢棄,並被其他更安全的算法取代,但是DNSSEC規範仍然保留了對它的支援,以確保向後兼容。這意味著,即使DNS伺服器使用了其他的簽名算法,它們仍然可能受到KeyTrap攻擊的影響,只要它們接收到了一個使用RSAMD5算法的惡意封包。
為了防止KeyTrap攻擊,研究人員已經通知了所有的DNS伺服器軟體開發者和主要的公共DNS提供者。目前,已經有一些DNS伺服器軟體發布了更新和安全通告,以修復CVE-2023-50387這個漏洞,例如PowerDNS、NLnet Labs Unbound和Internet Systems Consortium BIND9。如果您是一個DNS伺服器的管理員,請盡快安裝這些更新。不過,請注意,DNSSEC邏輯問題是根本性的,並不容易解決。DNS伺服器軟體開發者提供的補丁只能在一定程度上緩解問題,而不能完全消除風險。研究人員甚至表示,他們可以設計出一個對抗補丁的KeyTrap變體,同樣可以造成100%的CPU使用率。
因此,對於DNS伺服器的安全,我們不能掉以輕心。我們需要持續關注DNSSEC的漏洞和攻擊,並採取適當的防護措施,以保護我們的網路連線和資料安全。
詳情請看: