# CName Hijacking

小弟目前在一間 Defi 新創任職，我們常常因為臨時所需會需要在 AWS 以外的平台上建立服務，然後在 Route53 上建立 CName 紀錄指向該服務。同時我們又有在 [Immunefi 平台上進行資安懸賞](https://immunefi.com/bug-bounty/termstructurelabs/scope/#top)，其中我們有一個懸賞項目是我們公告的子網域只要你能造成維護，我們就視為高風險而給予賞金。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1750499271238/cc9bb853-5789-4e70-a7b9-13dc458f8e90.png align="center")

而要發現該域名下有多少 subdomain 或是有什麼 CName 本身也不難，有簡單的方式能白嫖。我們自己有用 DNS subfinder 這工具在 GitLab schedule CI 上每天檢查有公司主域名下哪些subdomain。也有 AWS CLI 能取得 route53上的全部紀錄。但維運人員只知道這 CName 紀錄存在並指向某個外部資源，但其實他不知道這外部資源是不是還存在，就算還存在還是我們的嗎？ (此時可能有人會嘴，用Terraform 部署? 也得你都有綁 EIP 啊, TF 每次重建資源都是全新的那 IP 也是狂變。）

GitLab 排程每天都在檢查。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1750500855967/e90d0b4d-c503-42e9-9a5c-d4dbc32bfb87.png align="center")

下圖是簡易的圖示，瀏覽器輸入網址後怎麼透過 CName 指向到服務。

[![How Route 53 Routes Traffic](https://jayendrapatil.com/wp-content/uploads/2022/07/how-route-53-routes-traffic.png align="left")](https://www.mlytics.com/blog/introducing-cname-flattening-multi-cdn-on-steroids/)

然後近期有兩次，我們一個名為 sandbox.xx.xx 的子域名的網站被劫持了，該服務本來指向 GCP 某台服務，但因為是演示用的，某天就下架該服務了。但此時 Route53 上的.CName 還是指向該 IP。就給獵人們有機會搞台機器，綁定這CName指定的 IP，然後就順理成章的劫持走了 XD，再來通報，2500 美刀就得手了。

經過這故事我們可以簡單地知道，SubDomain hijack 或叫 SubDomain takeover的幾種攻擊方式：

1. **DNS CNAME 或 A 記錄指向第三方**
    
    * 例：[`assets.example.com`](http://assets.example.com) `CNAME →` [`mybucket.s3-website-us-east-1.amazonaws.com`](http://mybucket.s3-website-us-east-1.amazonaws.com)
        
2. **第三方資源被移除或停用**
    
    * 開發團隊可能在部署或維護後，忘記刪除 DNS 記錄。
        
3. **攻擊者發現該映射仍可被使用**
    
    * 註冊相同名稱的 S3 bucket、建立同名的 GitHub Pages Repo，或重新啟用同名的 Heroku app。
        
4. **DNS 解析依然生效**
    
    * [`assets.example.com`](http://assets.example.com) 依舊指向新的（惡意）服務。
        

## SubDomain Finder

[SubDomain Finder](https://github.com/projectdiscovery/subfinder?tab=readme-ov-file#installation) 是用 Go 開發的工具，所以能安裝在各種 OS 上執行。簡單用法如下

```bash
subfinder -d domain_name -o output
```

能看見小弟公司的網域下有超多 sub domains。這要管理起來其實頗累人。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1750500681770/2afefa0b-8726-4b3b-a169-9fd73df7dd85.png align="center")

## 如果要知道有哪些 CName 或 A 紀錄？

Cloudflare … 就能了 XD 小弟公司沒在 CF 上註冊自己是該網域的擁有者，且禁止閒雜人等透過 CF 來掃描。

像是你能輸入 `104.com.tw` CF就會顯示出 `The zone name provided is` [`subject to a hold`](https://developers.cloudflare.com/dns/zone-setups/troubleshooting/cannot-add-domain/) [`which disallows`](https://developers.cloudflare.com/dns/zone-setups/troubleshooting/cannot-add-domain/) `the creation of this zone. Please contact the owner of the Cloudflare account that manages this domain to have the hold removed.` 禁止我們掃描。

而 `1111.com.tw` 則是沒買所以…也是一覽無遺啊 XD

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1750502342651/1fa2fb4d-d718-4d6a-89c5-9aff94e4f592.png align="center")

  

首先來到 CF 首頁點擊 `Add a domain`

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1750501097906/e3d1a4a6-6809-494d-9533-8414cbcba095.png align="center")

輸入 Domain 後，按下 Countine。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1750501132042/ab92fc9a-8678-4497-bcbe-fb5d205fcaff.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1750501319251/11c3e429-e812-4551-b0ed-f2d62aae9f45.png align="center")

啥就都出來了 XD 還能去改呢。自然就能知道你有哪些 IP 能虎視眈眈來做劫持了。

# 總結

我知道現在很多方便的託管平臺，像是小弟公司最近用的 [Render](https://render.com/) 其他還有很多。但千萬要記住，在這種平台上建立資源，然後有 A or CName 指向這裡的話。當資源移除時，記得 DNS 上的紀錄也得要跟著移除掉。不然就是等著被劫持，不論是去跟公司要錢，或者用來當作釣魚網站跟使用者做釣魚或社交攻擊。都是很容易留給駭客作為攻擊手段的。
