0x00 前言
DNS重繫結攻擊的用法有很多種,這篇文章主要理解DNS重繫結攻擊的原理,並介紹如何通過DNS重繫結來攻擊內網裝置。為了更好的理解DNS重繫結攻擊,我們先從Web瀏覽器的同源策略開始介紹。
點選檢視往期關於DNS文章:
SAD DNS--新型DNS快取中毒攻擊
DNS 快取中毒--Kaminsky 攻擊復現
0x01 Web瀏覽器同源策略(SOP)
同源策略(Same origin policy) 是一個重要的安全策略,它用於限制一個origin的文件或者它載入的指令碼如何能與另一個源的資源進行互動。它能幫助阻隔惡意文件,減少可能被攻擊的媒介。
-
其實換句話來說就是在瀏覽器中,同一個域名下的網站只能呼叫本域名下的資源。就好比說現在有一個網址
http://www.psgq.com/index.html
的頁面,在同源策略的約束下可以呼叫http://www.psgq.com/index2.html
的資源,但是不能呼叫http://www.psgq123.com/index.html
的資源(<script>
,<link>
,<iframe>
,<img>
等標籤的SRC屬性除外)。同源策略最直接的表現就是能夠區分出各個網站的cookie資訊,使得我們能夠有條不紊的訪問各個網站而不會照成資訊混亂。 -
另外,如果我在瀏覽器同時訪問新浪和搜狐兩個網站並且這兩個網站都在瀏覽器儲存了使用者名稱和密碼,那麼他們各自只能訪問各自儲存的使用者資訊,無法交叉訪問,否則就會造成使用者資訊洩露。
-
試想這樣一種情況:如果沒有同源策略,A網站是一家銀行,往往用來儲存使用者的登入狀態,如果使用者沒有退出登入,其他網站就可以冒充使用者,為所欲為。因為瀏覽器同時還 Cookie 可以共享,網際網路就毫無安全可言了。
同源的定義:如果兩個 URL 的 協議、域名、埠都相同的話,則這兩個 URL 是同源。
舉例來說, https://www.cnblogs.com/PsgQ/
這個網址中, https
是協議, www.cnblogs.com是域名,埠是443
(https協議預設埠可以省略,你也可以把他看成:https://www.cnblogs.com:443/PsgQ/
)。任意兩個網址,只要這三點全部相同,那麼瀏覽器就認為它們是同源的,任意一個不相同都會被瀏覽器認為是跨域。
注:IE例外
IE瀏覽器對於同源策略有兩個主要的例外:
- 授信範圍(Trust Zones):兩個相互之間高度互信的域名,如公司域名(corporate domains),不遵守同源策略的限制。
- 埠:IE瀏覽器沒有將埠號加入到同源策略的組成部分之中,因此
http://example.com:81/index.html
和http://example.com/index.html
屬於同源並且不受任何限制。
在瀏覽器中, <script>
、<img>
、<iframe>
、<link>
等標籤都可以跨域載入,而不受瀏覽器的同源策略的限制, 這些帶src屬性的標籤每次載入的時候,實際上都是瀏覽器發起一次GET請求, 不同於普通請求(XMLHTTPRequest)的是,通過src屬性載入的資源,瀏覽器限制了JavaScript的許可權,使其不能讀寫src載入返回的內容
瀏覽器同源策略中,除了上述的幾個標籤可以跨域載入外,其他出現跨域請求時,請求會發到跨域的伺服器,並且會伺服器會返回資料,只不過瀏覽器"拒收"返回的資料。
0x02 什麼是DNS重繫結攻擊?
在網頁瀏覽過程中,使用者在位址列中輸入包含域名的網址。瀏覽器通過DNS伺服器將域名解析為IP地址,然後向對應的IP地址請求資源,最後展現給使用者。而對於域名所有者,他可以設定域名所對應的IP地址。當使用者第一次訪問,解析域名獲取一個IP地址;然後,域名持有者修改對應的IP地址;使用者再次請求該域名,就會獲取一個新的IP地址。對於瀏覽器來說,整個過程訪問的都是同一域名,所以認為是安全的。(瀏覽器同源策略) 這就是DNS Rebinding攻擊。
通過DNS重繫結攻擊可以繞過同源策略,攻擊內網的其他裝置。
攻擊條件:
1.攻擊者可以控制惡意的DNS伺服器,來回復域名查詢,如 www.attacker.com
2.攻擊者可以欺騙使用者在瀏覽器載入 www.attacker.com。可以通過多種方式,從網路釣魚到永續性XSS,或購買HTML橫幅廣告,來實現這一目標。
3.攻擊者 控制 www.attacker.com 釣魚網站的伺服器。
下面是DNS重繫結攻擊的原理圖:
-
受害者開啟釣魚郵件的連結,他們的Web瀏覽器會發出DNS查詢請求,查詢www.attacker.com的IP地址,基本流程:瀏覽器快取 -> 系統快取 -> 路由器 快取 -> ISP DNS解析器快取 -> 根域名伺服器 -> 頂級域名伺服器 -> 權威域名伺服器,具體解析過程可參考之前關於DNS的介紹文章。
-
攻擊者控制的DNS伺服器收到受害者的DNS請求時,會使用www.attacker.com的真實IP地址93.185.216.36進行響應。 它還將響應的TTL值設定為0秒,以便受害者的機器不會長時間快取它。
-
受害者的瀏覽器向釣魚網站伺服器發出HTTP請求載入網頁。
-
攻擊者進行HTTP響應,並通過JS載入一些惡意程式碼,該頁面反覆向www.attacker.com 發出POST請求。(POST請求包含惡意程式碼)
5.因為之前DNS ttl設定為0,快取很快就失效,所以瀏覽器繼續向惡意權威域名伺服器發出查詢。
6.此時,惡意DNS伺服器收到查詢後,回覆一個內網裝置的IP(也可以是一些物聯網裝置),如192.168.0.5。
7.因為滿足同源策略,瀏覽器認為是安全的,於是向內網其他裝置傳送POST惡意請求。
為什麼繞過了同源策略?
因為同源策略瀏覽器看的是協議,域名,埠,這些並沒有變化,而背後的IP地址卻已經變了,所以造成了跨域的請求。
TTL是什麼?
TTL是英語Time-To-Live的簡稱,意思為一條域名解析記錄在DNS伺服器中的存留時間。當各地的DNS伺服器接受到解析請求時,就會向域名指定的NS伺服器發出解析請求從而獲得解析記錄;在獲得這個記錄之後,記錄會在DNS伺服器中儲存一段時間,這段時間內如果再接到這個域名的解析請求,DNS伺服器將不再向NS伺服器發出請求,而是直接返回剛才獲得的記錄;而這個記錄在DNS伺服器上保留的時間,就是TTL值。
它表示DNS記錄在DNS伺服器上快取的時間,數值越小,修改記錄各地生效的時間越快。
0x03 總結
本篇文章詳細介紹了Web瀏覽器的同源策略,以及DNS重繫結攻擊內網裝置的原理,後續會為大家繼續介紹關於DNS重繫結攻擊的其它用法。