子域名劫持漏洞
轉發:原文先知社群:https://xz.aliyun.com/t/2414
在搜資料的時候偶然發現了這麼一種子域名劫持(Subdomain Takeover)漏洞,平時沒遇到過,感覺很有趣,可以利用劫持玩出很多花樣,同樣,HackOne上也有很多例子:
https://hackerone.com/reports/172137
https://hackerone.com/reports/32825
https://hackerone.com/reports/38007
https://hackerone.com/reports/175070
一、CNAME解析
CNAME解析是子域名劫持漏洞的關鍵因素,因此這裡我們先簡單說一下。我們知道域名解析是由DNS協議完成的,包含了多種記錄型別,比如其中的A (Address) 記錄是用來指定主機名(或域名)對應的IP地址記錄;NS記錄,解析伺服器記錄,用來表明由哪臺伺服器對該域名進行解析;而CNAME記錄通常也叫別名記錄,是一種將一個域名對映到另一個域名的記錄。
換句話說,CNAME像是一個域名到另一個域名的解析。如下圖所示,是一個域名解析的過程,第3步通過CNAME記錄找到了另外的域名,第5步找到了實際的ip地址,最後在第7/8步完成了訪問。
二、子域名劫持原理
這裡先假設一個場景,你申請了一個域名abc.com,那麼主站的域名當然www.abc.com
之後為了快速開闢一個新的業務,你直接在阿里雲上購買了相應的服務,阿里雲分配了你一個二級域名shop.aliyun.com,雖然這個阿里雲的二級域名是你獨有的,但是你肯定仍然希望能使用自己的域名。這個時候CNAME解析就排上用場了,如下所示,這時候使用者只需要訪問你的shop.abc.com域名即會解析到shop.aliyun.com上。
三、漏洞利用
子域名劫持可以構造多種利用方式,以如下兩種為例。
1、網頁釣魚
由於使用者對shop.abc.com的訪問會解析到攻擊者控制的shop.aliyun.com,那麼攻擊者就可以構造特定的頁面誘導使用者操作,比如登陸表單、密碼錶單等,由於瀏覽器顯示的是正常的可信的域名,就算有安全意識的使用者也難以分別是否存在釣魚。
2、Cookie操縱
Cookie是使用者許可權的憑證,一般也會擁有一個特定的作用域。但是現在很多網站使用單點登陸(SSO),那麼Cookie就可能是在整個域共享的,當然也包括shop.abc.com,那麼攻擊者只需要誘導攻擊者訪問存在漏洞子域名,即可在後臺接受到使用者的Cookie。
一個典型的例子:https://hackerone.com/reports/172137
四、漏洞檢測
一種是用nslookup手動檢測,這是上一個例子裡的截圖,可以看到ping.ubnt.com解析到了d2cnv2pop2xy4v.cloudfront.net,這是亞馬遜的雲服務。(nslookup是一個程式的名字,這個程式讓因特網伺服器管理員或任何的計算機使用者輸入一個主機名(舉例來說,“whatis.com.cn”)並發現相應的IP地址。它也會相反的名字查詢為一個你指定的 IP 住址找出主機名。)
另一種是使用工具,一個較好的工具aquatone,它本身是一個強大的子域名掃描工具,結合了搜尋引擎、各大API介面以及爆破等多種手段,它本身還支援其他額外的功能,詳情可以參見http://michenriksen.com/blog/aquatone-tool-for-domain-flyovers/。檢測之前首先要進行子域名探測,一些API介面需要自己配置APIKey。(kalinux直接使用gem install aquatone進行安裝即可)
探測完成後會生成兩個檔案,後續其他功能的呼叫主要依賴hosts.json檔案
下圖使用aquatone-takeover進行子域名劫持探測
五、漏洞防護
防範子域名劫持的最直接的方法就是刪除多餘的DNS的相關記錄,這種情況就是本方也不在使用相關雲服務了;另一種方法就是保持對域名的所有權,避免被攻擊者惡意申請。