DNS解析通常是確保應用程式安全存取的第一步,而DNS緩存是一項關鍵因素,可能會暴露在各種攻擊之下。如果DNS系統被入侵,攻擊者可以劫持應用存取並影響DNS資源和您的網路基礎設施。
在這篇,我們將探討Citrix ADC如何幫助您保護DNS基礎架構免受一些知名的DNS漏洞的攻擊。
緩存中毒
為了減少攻擊者成功欺騙回應的機會,DNS用戶端要隨機化DNS事務ID或查詢ID和用於發送DNS請求的臨時源埠。這就要求攻擊者迅速猜對一個32位元整數。但如果DNS用戶端在同一個UDP的4元組上向命名伺服器發送多個DNS請求,攻擊者只需要猜測一個16位的查詢ID(因為UDP臨時源埠是恒定的)就可以成功地欺騙回應。
限制同一UDP 的4元組上的查詢次數。一旦達到配置的閾值,Citrix ADC 就會開始放棄進入該UDP的4元組的請求。您可以使用此命令調整 Citrix ADC 上的此限制:
set dns parameter -maxPipeline <positive_integer>
請注意,將該參數設置為零將意味著對請求的數量沒有限制,因此您應該將限制設置為適當的非零數。
您還可以為託管在 Citrix ADC 上的區域啟用 DNSSEC,以減輕緩存中毒。
放大攻擊
在DNS放大攻擊中,攻擊者使用小型DNS請求來耗盡DNS伺服器資源。這使用了DNS伺服器的計算資源、記憶體和頻寬,拒絕了合法應用存取的DNS服務。有不同的方法來實現DNS回應放大。
保護DNS基礎設施免受放大攻擊的一種方法是將用戶端IP列入白名單或黑名單。如果基於IP的緩解措施不可行,您可以識別攻擊模式,使用Citrix ADC的策略運算式配置適當的DNS策略,並強制用戶端通過TCP重新啟動查詢。此外,您還可以在Anacast IP上配置DNS端點,以防止DDoS攻擊。
Roof 引用放大攻擊
建議DNS權威伺服器在權威部分返回根NS記錄,作為對請求非權威功能變數名稱資訊的查詢的回應。根NS記錄的大小,包括Glue記錄在內,會接近512位元組。這可以給普通的DNS查詢帶來至少5倍的放大率。攻擊者可以利用這個DNS規範,向授權的命名伺服器發送查詢,查詢的功能變數名稱不在該命名伺服器授權的區域內。
您可以通過以下命令在Citrix ADC上減輕這種情況。當您禁用該配置參數時,Citrix ADC 將不會回應對 ADC 被配置為權威的區域之外的域的查詢:
set dns parameter -dnsRootReferral DISABLED
ANY查詢類型的放大攻擊
ANY查詢類型會返回一個給定功能變數名稱的所有記錄。這意味著儘管查詢大小與其他查詢相當,但回應大小是巨大的。攻擊者使用ANY查詢對脆弱的網路基礎設施進行DDoS攻擊。在Citrix ADC中使用下面的命令來配置限制速率的DNS策略,將限制速率的識別字作為DNS查詢類型,並將ANY查詢限制在網路可以處理的閾值:
add stream selector dns_anyquery_amplification "dns.req.question.type.eq(ANY)" add ns limitIdentifierdns_ampl_attack_limitid -threshold 1000 -timeSlice 10000 -selectorName dns_anyquery_amplification add dns policy dns_amp_attack_pol "sys.check_limit(\"dns_ampl_attack_limitid\")" dns_default_act_Drop bind dns global dns_amp_attack_pol -priority 10add ns variable dns_tcp_requests -type ulong -scope transaction
基於NXDOMAIN的放大攻擊
DNS機器人可以為不存在的功能變數名稱注入惡意查詢。這些功能變數名稱通常是隨機生成的。製作NXDOMAIN響應可能比為權威名稱伺服器提供配置記錄更密集。在啟用 DNSSEC 的區域中,NXDOMAIN 回應可能會更加消耗資源。
緩解基於NXDOMAIN的攻擊的一種常見方法是識別域模式並放棄此類查詢,或者通過發送截斷的回應來迫使用戶端通過TCP過來。強迫用戶端通過TCP過來是確定DNS用戶端是否真實的方法之一。但是惡意的DNS機器人已經變得更加複雜,他們擁有完整的TCP/IP堆疊,可以通過TCP重新開機查詢來進行回應。理想情況下,你會識別功能變數名稱中的模式,並配置合適的策略來放棄此類查詢。
Citrix ADC可以作為DNS區域的權威名稱伺服器,你可以使用這個配置選項來緩解基於NXDOMAIN的放大攻擊:
set dns parameter -NXDomainRateLimitThreshold <positive_integer>
如果您的 Citrix ADC 被配置為 DNS 代理,NXDOMAIN 引導查詢通常會導致緩存丟失。後端伺服器將被超過其處理能力的查詢蜂擁而至,並將拒絕為真正的查詢提供服務。當Citrix ADC收到NXDOMAIN回應時,會進行緩存,拒絕為合法配置的記錄提供緩存資源。
您可以通過只為負記錄緩存分配一小部分記憶體 (MBs),並使用此配置將負記錄的 TTL 設置為低值(最好是最長 1 或 2 分鐘)來保護 DNS 緩存免受 NXDOMAIN 攻擊:
set dns parameter -maxNegativeCacheSize 200 -maxnegcacheTTL 120
請注意,在上面的示例配置中,maxNegativeCache大小以百萬位元組為單位,maxnegcacheTTL以秒為單位。
DNS隧道
攻擊者可以利用DNS隧道進行命令和控制、資料滲透或任何互聯網協議(IP)流量的隧道。DNS隧道可以實現DNS的超載,拒絕支援合法應用存取所需的DNS資源。
DNS隧道檢測技術,如:有效載荷分析和流量分析均可以提供幫助。通過有效載荷分析,分析一個或多個請求和回應的DNS有效載荷,以確定隧道指標。通過流量分析,分析一段時間內的流量和模式。還可以考慮計數、頻率和其他請求屬性。您可以使用Citrix ADC豐富的DNS策略基礎架構實現基於有效載荷和流量的檢測。
如果 Citrix ADC 是 LDNS 伺服器的前端,您應該為 DNS 隧道應用緩解措施,以便資源僅用於合法的 DNS 用例。下面的緩解措施基於以下假設:功能變數名稱的平均長度將小於 200 位元組,合法使用案例中的 DNS 查詢有效載荷大小將小於 256 位元組:
add dns policy dns_tunnel_payload_1 "dns.req.question.domain.length.gt(200)" dns_default_act_Drop add dns policy dns_tunnel_payload_2 "dns.length.gt(256)" dns_default_act_Drop bind dns global dns_tunnel_payload_1 20 -gotoPriorityExpression next -type REQ_DEFAULT bind dns global dns_tunnel_payload_2 30 -gotoPriorityExpression next -type REQ_DEFAULT
TCP慢速連接攻擊
攻擊者可以分塊發送DNS請求,DNS堆疊會在一個空閒超時的時間段內等待完整的查詢到來。然而,攻擊者可能不會發送完整的資料,或者發送資料塊,每個資料塊之間有巨大的延遲。這可能會導致拒絕為合法查詢提供服務(通過消耗nameserver上的記憶體來維持閒置時間段的TCP連接和維持多個查詢分塊)。您可以通過使用以下配置來緩解Citrix ADC的這種攻擊:
set dns parameter -splitPktQueryProcessing DROP
瞭解更多
對於大多數眾所周知的攻擊,在DNS參數中都可以進行緩解。其他一些攻擊,您可以利用Citrix ADC豐富的策略基礎架構來檢查DNS請求和回應的異常情況,並可以採取適當的行動來保護您的DNS資源,更廣泛地保護您的網路基礎架構。Citrix ADC的策略基礎架構是一個可擴展的框架,IT管理員可以利用它來實施針對較新漏洞的規則,並在不斷變化的安全環境中立即保護您的DNS基礎架構。
本文翻譯自:https://www.citrix.com/blogs/2021/02/25/secure-your-dns-infrastructure-with-citrix-adc/
發表迴響