在「Stop the CNAME chain struggle: Simplified management with Route 53 Resolver DNS Firewall」這邊看到的新功能。
說實話... 我早就忘記 Route 53 Resolver DNS Firewall 這個產品了,我查資料才發現我在 2021 年的時候寫過:「AWS 推出 Amazon Route 53 Resolver DNS Firewall」。
這個產品的用途是避免透過 DNS 將敏感資訊打出去,不過先前的產品的條件很死,遇到 CNAME 或是 DNAME 的情況,你必須事先把可能後續的 record 也放進白名單才行,所以如果遇到類似於 X (Twitter) 用的 pbs.twimg.com
的情況就很麻煩了:
;; ANSWER SECTION: pbs.twimg.com. 300 IN CNAME cs196.wac.edgecastcdn.net. cs196.wac.edgecastcdn.net. 3409 IN CNAME cs2-wac.apr-8315.edgecastdns.net. cs2-wac.apr-8315.edgecastdns.net. 110 IN CNAME cs2-wac-us.8315.ecdns.net. cs2-wac-us.8315.ecdns.net. 110 IN CNAME cs45.wac.edgecastcdn.net. cs45.wac.edgecastcdn.net. 725 IN A 117.18.237.70
理想上是你放行 pbs.twimg.com
就好,但因為 CNAME 的關係,你可能會需要多放行 *.edgecastcdn.net
以及 *.ecdns.net
。
可是這是第三方的服務,你無法控制對方怎麼切換 (沒有 API contract 的概念),像是有時候他會跳到 Fastly:
;; ANSWER SECTION: pbs.twimg.com. 290 IN CNAME dualstack.twimg.twitter.map.fastly.net. dualstack.twimg.twitter.map.fastly.net. 290 IN A 151.101.40.159
如果之後又跑出 Akamai 或是 CloudFront 的話就沒完沒了。
另外一種常見的情況是第三方的 API endpoint,對方有可能有多個不同的點做 DR 切換,有可能 CNAME 到 AWS 的 ELB 或是 GCP 的 Cloud Load balancing 上。
所以為了「保險」,這個方式通常都是開整個 CDN 的服務,但這麼一來攻擊者可以透過租用這些服務 (像是 *.cloudfront.net
),搭配一些其他比較鬆的 rule 鑽出來。
這次的這個功能有點 stateful firewall 的概念,第一個啟動的 record 是被放行的,那 CNAME 或是 DNAME 延伸出來的 record 也跟著放行,這樣算是補強了這個問題...