活動報導

【雲協技術專家專欄】無聲的資料盜取管道:網域名稱系統隧道攻擊

字級:
小字級
中字級
大字級
友善列印

中山大學資訊工程學系教授 雲協技術專家 李宗南

網域名稱系統(Domain Name System, DNS) 在網路系統中扮演重要角色,它將數位IP位址轉換為可記住的功能變數名稱,反之亦然,然而DNS 容易受到各種安全風險的影響,包括 DNS 欺騙、暫存記憶體中毒、DNS 劫持、NXDOMAIN/NSNX、幻像域攻擊、基於殭屍網路的 DDoS、DNS 洪水、DNS隧道和放大攻擊。 DNS隧道是一種通過DNS協定來實現的網路隧道,DNS隧道利用了DNS協定的特性,通過DNS協定來傳輸數據,從而實現在兩個電腦之間傳輸數據的目的。

DNS隧道常常被用來繞過網路封鎖或翻牆,或者是用來在兩個網路之間建立一個安全的通道。它們通常是用來實現匿名上網、傳輸加密數據或者是在受限制的網路環境中進行網路滲透測試。在某些情况下,進階持續性威脅 (Advanced Persistent Threat, APT)的攻擊者可能會使用DNS隧道來傳輸攻擊資料。DNS隧道攻擊也在國外造成多次的信用卡盜竊事件,例如2014年美國的Sally Beauty、2014的Home Depot、2015的BernhardPOS惡意軟體、2016的MULTIGRAIN惡意軟體、2018的UDPoS惡意軟體。SolarWinds 2020年供應鏈攻擊事件,其中在攻擊者配置惡意軟體的方式,就是透過DNS通信聯繫命令和控制(C&C)伺服器。因此DNS隧道成為新的資安威脅手法。

DNS隧道攻擊機制

DNS隧道通過惡意程式利用DNS 請求和DNS 回覆的流程用來達到和外網通訊。假設攻擊者已經將惡意程式成功的在內網的主機內被執行,並且想要建立與其之間隱蔽的連線方式,用來取得內部資料,其詳細流程如圖1。根據圖1攻擊者先設定一個網域,例如"attacker.com"。攻擊者在自己控制的DNS伺服器上設定"attacker.com"的解析記錄,將該網域指向攻擊者的IP地址(步驟 1)。內網的惡意程式在目標系統上運行,並準備透過DNS隧道與攻擊者的DNS伺服器進行通信。惡意程式中的數據要傳送給攻擊者,並且將數據藏在FQDN中。在內網的惡意程式會發起DNS請求例如{secretdata}.attacker.com,其中{secretdata}是要傳送的數據。但由於內網的DNS Server無法找尋到相關紀錄,只能轉發到外網去尋找(步驟2)。DNS 請求轉發到外網後,按照DNS解析的流程由後往前解析FQDN(Fully Qualified Domain Name),先從Root Server、TLD Server最後會轉發到攻擊者事前所架設好的主機,攻擊者成功獲取到藏在FQDN裡面的{secretdata}(步驟3、4和5)。攻擊者獲取到DNS請求內所包含的洩漏資料,而攻擊者同樣的也是將指令封裝成DNS回覆封包回傳給內網的惡意程式(步驟6)。


圖1、 DNS隧道流程
一一

駭客能透過DNS 隧道攻擊來竊取資料,因此如何防止 DNS 隧道攻擊,變得非常重要。以下幾種方法可防止 DNS 隧道攻擊:

  1. 利用防火牆規則:可以利用防火牆設定來阻止除授權 DNS 伺服器之外的所有傳出 DNS 流量,這樣就可以通過限制惡意的駭客與其 DNS 伺服器通信的能力來防止 DNS 隧道攻擊。此外,防火牆可用於檢查和過濾 DNS 流量,阻止可疑的 DNS 查詢或回應。
  2. 實施 DNS 安全擴展(DNSSEC):原始網域名稱系統的設計並不包含任何安全機制,IETF提出DNS 安全擴展 是一套可為 DNS 協定添加一層安全保護。它使用數位簽名來驗證 DNS 數據的真實性,防止欺騙和其他基於 DNS 的攻擊。但是,DNSSEC 不會直接阻止 DNS 隧道,因為它不會檢查 DNS 數據包的有效負載。但是,它可以與其他措施結合使用,以增強整體DNS安全性。
  3. 限制或阻止不必要的 DNS 查詢: 阻止或限制不必要的 DNS 查詢有助於減少 DNS 隧道的攻擊面。這包括阻止對不存在網域的 DNS 查詢,以及限制來自單個來源的 DNS 查詢速率;也可以將 DNS 伺服器配置為拒絕對 DNS 隧道中常用的某些記錄類型(如 TXT 或 NULL 記錄)的查詢。
  4. 保持 DNS 解析器的私密性和受保護:將 DNS 解析器的使用限制為僅網路上的使用者,並且永遠不要將其保留給外部使用者。這可以防止其緩存被外部參與者毒害。
  5. 配置 DNS 以防止緩存中毒:在 DNS 軟體中配置安全性,以保護組織免受緩存中毒,也可以為傳出請求添加可變性,以使威脅參與者難以溜入虛假回應並使其被接受。例如,嘗試隨機化查詢 ID,或使用隨機源埠而不是 UDP 連接埠 53。
  6. 安全地管理您的 DNS 伺服器:權威伺服器可以在內部託管,也可以由服務提供者託管,也可以通過域註冊商的幫助託管。如果公司具備內部託管所需的技能和專業知識,則可以完全控制。如果不具備所需的技能和規模,則可以考慮外包。
  7. 測試您的 Web 應用程式和 API 是否存在 DNS 漏洞: 一般掃描工具皆會自動掃描您的應用程式和API 以尋找數百個漏洞,包括 DNS 安全問題。
  8. DNS 流量監控與攻擊偵測:運用工具持續監控 DNS 流量是抵禦 DNS 隧道攻擊的第一道防線。工具可運用傳統統計分析演算法或深度學習演算法來偵測DNS 攻擊,查找異常情況,例如異常大量的 DNS 查詢、大型 DNS 文本記錄或對未知或可疑域的 DNS 請求。完整的威脅檢測解決方案,可以自動執行攻擊偵測與提供即時監視和警報。

DNS隧道的偵測是基於行為的特徵分析, DNS隧道檢測的典型特徵可分為兩類:負載分析和流量分析。有效負載分析通過分析單個數據包或多個數據包的有效負載資訊,從更具體的微觀角度提取特徵。流量分析從更全球化的角度評估一段時間內的整體 DNS 流量資訊,以提取有效特徵。因此DNS隧道檢測技術根據方法的特點也可以分為兩類。

a.酬載分析

酬載分析主要針對DNS Query或DNS Response封包欄位結構上,或是對網域名稱的大小進行分析。分析方法有利用n-gram分析網域或子網域出現的頻率,正常的網域名稱通常會集中在一小部分高頻率的字元或字串;但被DNS隧道所帶出的資料通常會被Base64或是Base32給編碼,所以字元出現的頻率會趨於隨機。計算DNS請求或回答的FQDN熵值大小是另一種常用分析方法。熵表示字串的混亂程度,字詞平分布愈平均(愈混亂)則熵值愈高根據的觀察,而惡意域名的熵值會有較高的熵值。利用網域名稱生成演算法(Domain Generation Algorithm, DGA)結合機器學習之檢測方法,DGA主要是利用隨機種子做為隨機生成網域的方法。惡意程式在目標的電腦上被執行時,惡意程式會主動連接到DGA所生成的網域和攻擊者的進行連線,同時為了避免被發現這段連線,可以利用DGA可以定期生成新的網域名稱。而除了上述方法可使用深度學習技術,結合域名長度、標籤數量、最大和平均的標籤、子網域長度、數字數量、英文大寫數量和域名熵做為特徵來偵測 。

b.流量分析

流量分析是從網路流量中來做分析,例如說每個DNS網路的命中率、回應的時間或特定時間內的單一網域請求數量作為分析的特徵。一些偵測方法可透過請求和回應的時間差、網域名稱的字串長度、請求的類型當作特徵,有關DNS隧道的請求類型,常見的請求有多種的類型如A、AAAA、CNAME、NS、MX等。對於DNS隧道的封包來說有時會為了能包含更多的資訊可能會使用不常見的紀錄類型如CNAME、TXT,以A紀錄為例最長只能利用15的字元,但TXT最多可以利用到255個字元,藉由以上的特徵用來判斷是否是惡意封包。其他偵測方法有利用平均DNS封包長度、域名熵和詢問紀錄作為特徵、請求和回答時間間隔,因為相比於正常的DNS請求動作,在內網或是RDNS的伺服器中,經過查詢的紀錄會被儲存在快取當中以利下次的重複使用,但是DNS隧道在中繼模式下,每一次的發送為了不讓快取命中,藉由能轉發到外網跟攻擊者通訊所以每次都會發送不同的網域請求,所以每次的查詢都會要去詢問權威DNS伺服器(Authoritative DNS Server),所以相比於良性的DNS封包,隧道流量的時間間隔會比較長。

結論

不像DDoS 大張旗鼓的產生大量的封包或請求,使得目標系統無法負荷;DNS 隧道是一種無聲無息的攻擊手法,常容易被忽略。雖然藉著防火牆設定、DNS 安全擴展、DNS 查詢的限制、DNS 流量監控與攻擊持續偵測等,或可防止 DNS 隧道的攻擊,但挑戰依然存在。

TOP