新的 SAD DNS 攻擊將虛假資料插入 DNS 緩存

加州大學河濱分校的一組研究人員發布了 SAD DNS 攻擊的新變體 (CVE-2021-20322),儘管去年添加了阻止 CVE-2020-25705 漏洞的保護措施,但該攻擊仍然有效。 新方法與去年的漏洞大致相似,不同之處僅在於使用不同類型的 ICMP 封包來檢查活動 UDP 連接埠。 所提出的攻擊允許將虛構資料替換到 DNS 伺服器快取中,這可用於替換快取中任意網域的 IP 位址,並將對該網域的請求重新導向到攻擊者的伺服器。

所提出的方法僅適用於 Linux 網路堆疊,因為它與 Linux 中 ICMP 封包處理機制的特殊性有關,它充當資料洩漏的來源,簡化了伺服器用於發送封包的 UDP 連接埠號碼的確定。外部請求。 5.15 月底,Linux 核心採用了阻止資訊外洩的變更(該修復包含在核心 XNUMX 和核心 LTS 分支的 XNUMX 月更新中)。 該修復歸結為在網路快取中改用 SipHash 哈希演算法,而不是 Jenkins 哈希。 可以在以下頁面評估發行版中修復漏洞的狀態:Debian、RHEL、Fedora、SUSE、Ubuntu。

據發現該問題的研究人員稱,網路上大約 38% 的開放解析器容易受到攻擊,其中包括 OpenDNS 和 Quad9 (9.9.9.9) 等流行的 DNS 服務。 對於伺服器軟體,可以在Linux伺服器上使用BIND、Unbound、dnsmasq等軟體包進行攻擊。 在 Windows 和 BSD 系統上執行的 DNS 伺服器上不會出現該問題。 為了成功地進行攻擊,必須使用IP欺騙,即要求攻擊者的 ISP 不封鎖具有虛假來源 IP 位址的封包。

提醒一下,SAD DNS 攻擊繞過了 DNS 伺服器新增的保護措施,以阻止 Dan Kaminsky 在 2008 年提出的經典 DNS 快取中毒方法。 Kaminsky 的方法操縱了 DNS 查詢 ID 欄位的微小尺寸,該欄位只有 16 位元。 要選擇主機名稱欺騙所需的正確 DNS 事務標識符,發送大約 7000 個請求並模擬大約 140 萬個虛構回應就足夠了。 此攻擊歸結為向 DNS 解析器發送大量具有虛構 IP 綁定和不同 DNS 事務標識符的封包。 為了防止快取第一個回應,每個虛擬回應都包含稍作修改的網域(1.example.com、2.example.com、3.example.com 等)。

為了防止此類攻擊,DNS 伺服器製造商對發送解析請求的來源網路連接埠數量進行了隨機分配,以彌補標識符大小不足的問題。 在實現發送虛假回應的保護之後,除了選擇16位元識別碼之外,還需要從64個連接埠中選擇一個,這將選擇的選項數量增加到2^32。

SAD DNS 方法可讓您從根本上簡化網頁連接埠號碼的確定,並將攻擊減少到經典的 Kaminsky 方法。 攻擊者可以利用處理 ICMP 回應封包時洩漏的網路連接埠活動資訊來偵測對未使用和活動 UDP 連接埠的存取。 此方法允許我們將搜尋選項的數量減少 4 個數量級 - 2^16+2^16 而不是 2^32(131_072 而不是 4_294_967_296)。 允許您快速確定活動 UDP 連接埠的資訊洩漏是由處理帶有分段請求(ICMP 需要分段標誌)或重定向(ICMP 重定向標誌)的 ICMP 封包的代碼中的缺陷引起的。 發送此類封包會更改網路堆疊中快取的狀態,從而可以根據伺服器的回應來確定哪個 UDP 連接埠處於活動狀態,哪個連接埠處於活動狀態。

攻擊場景:當 DNS 解析器嘗試解析網域名稱時,它會向服務該網域的 DNS 伺服器發送 UDP 查詢。 當解析器等待回應時,攻擊者可以快速確定用於發送請求的來源連接埠號碼並向其發送虛假回應,使用 IP 位址欺騙冒充為網域提供服務的 DNS 伺服器。 DNS 解析器將快取偽造回應中發送的數據,並在一段時間內返回攻擊者替換的 IP 位址,以取代該網域的所有其他 DNS 請求。

來源: opennet.ru

添加評論