作者:胡 洋 / 北區學術資訊安全中心資安工程師
北區學術資訊安全中心近期發現許多DNS放大攻擊,經詢問相關設備負責人,多為DNS設定錯誤與管理失當,本文將說明此攻擊之原理及特徵,並解說市面主要DNS服務如何避免遭利用做為放大攻擊主機,期盼藉由本文的說明,能大幅降低此類型 的攻擊事件。
DNS 簡介
在早期 TCP/IP 協定的網路環境中,兩台主機間若要進行通訊,則必須先知道對方的 IP 位置,才能開始通訊行為,而人們對記憶於純數位的 IP 格式資料的記憶並不在行,DNS 服務就是為了解決此一這問題而誕生,DNS 全名為Domain Name Service,主要的用途在於將一般人易於記憶的網址轉換成電腦所使用的 IP 格式,而 DNS 其實沒有想像中的遙遠,當打開瀏覽器鍵入網址連上網時,其實就已經正在使用 DNS 的服務了。
![Art editor Img](001/Upload/354/ckfile/55c2ffff-39b0-45cd-985c-fe138f1e441a.jpg)
DNS系統基本是一種採樹狀階層式(hierarchy)的結構,類似 Windows 中的目錄樹結構,最頂層的有數十個 root DNS servers,記錄著所有最頂層 DNS server 資料,稱為「root」或根目錄,接著下分為幾個基本的類別,如:com、org、edu,而在此層級,後因網際網路的蓬勃發展,也加入的國別代號,如 tw(台灣)、hk(香港)、jp(日本),而美國則是因為當初發展制定Internet 規範,則而沒有國域名稱,再往下便是組織名稱,如 google、facebook、yahoo…等等,繼組織名稱後,便是主機名稱,如 www、mail、ftp…等等,所以一個完整的 DNS 名稱就會像是:www(主機名稱).google(組織名稱).com(國別代號因美國而省略)。
DNS 封包格式:
Query Identifier(16)
|
QR
|
OPCodes
|
|
Flags
|
Reserved
|
RCodes
|
QDCount(16)
|
ANCount(16)
|
NSCount(16)
|
ARCount(16)
|
Question Section(32)
|
Answer Section(32)
|
Authority Section(32)
|
Additional Records Section(32)
|
● QID:為 DNS 查詢封包編號。
● QR:若為查詢封包則為 0,回應查詢封包為 1。
● OPCodes:代表封包的類別(QUERY, IQUERY, STATUS, Reserved)。
● Flags:共有四種值: AA(權威回覆)、TC(捨去)、RD(需要遞迴)、RA(遞迴可用)。
● Reserved:保留未用。
● RCodes:回應訊息。
● Question Section、Answer Section、Authority Section、Additional Records Section:每一欄位分別有三個子欄位,為 NAME、TYPE、CLASS,分別負責記錄Question、Answer、Authority、Additional Records 四個欄位的封包相關資訊。
一、 DNS amplification attack(放大攻擊)簡介
![Art editor Img](001/Upload/354/ckfile/eaf81bbd-396e-46fa-8d8c-6e9a231bf903.jpg)
Figure 1 DNS Amplification Attack [1]
DNS 放大攻擊可參考上圖來了解攻擊的流程與資料流的方向。
Step1: 攻擊者向已受控制的殭屍電腦群下達開始攻擊指令。
Step2: 遭感染的殭屍電腦群向未做好安全設定的 DNS server發出偽造的DNS query 封包,偽造成受害者的 IP 位置成來源位置來進行遞迴查詢。
Step3: 受害的 DNS 主機向根目錄 Server 進行 domain 查詢。
Step4: 根目錄主機向受害 DNS 主機回傳查詢無此 domain 的訊息,並回傳另一根伺服器可能有其 domain 資料。
Step5: 受害 DNS 主機轉向另一根目錄 Server 進行 domain 查詢。
Step6: 外部根目錄 Server 回傳知道此 domain 資料的 DNS server 位置。
Step7: 受害 DNS 主機再度向此 DNS 發出查詢。
Step8: 外部 DNS 回傳受害 DNS 主機 domain 查詢資料。
Step9: 受害 DNS 主機向遭偽造來源的主機回傳 domain 查詢資料。
攻擊者透過不斷重複上述步驟,向目標主機發送大量 UDP 封包,藉此阻斷其正常服務,也由於受害 DNS 主機回傳到目標主機之封包大小會大於殭屍電腦群所發送的封包大小, 攻擊過程中流量具有放大的效果,故稱其為 DNS 放大攻擊。
2013年三月歐洲反垃圾郵件組織 Spamhaus 即是遭此 DDoS 攻擊,攻擊流量高達300Gbps,成為目前為止最嚴重的DDoS 攻擊。
![Art editor Img](001/Upload/354/ckfile/ada6917d-6f49-4723-9741-2dfe58fc8c11.jpg)
Figure 2 DNS Amplification Attack [2]
參考上圖可了解此種攻擊模式下的放大效果,約可從32byte(殭屍電腦群出發)放大至3296byte(受害 DNS 主機回傳給受害主機),攻擊頻寬約可被放大 100 倍左右,當殭屍電腦群發出大量的 DNS query 封包時,甚至會導致封包在 router 轉送時出現壅塞,進而產生更大規模的影響,所以 DNS 主機安全性設定,已成為不可忽視的重要項目之一。
二、 DNS amplification attack 分析說明
![Art editor Img](001/Upload/354/ckfile/7adf94e2-9d99-4ad7-8ff3-54f981ea2cd6.jpg)
北區 ASOC 透過 IPS 即時監測各區網有無 DNS 放大攻擊事件,偵測基本架構可參考上圖,透過放置於流量骨幹 IPS,同時來監看 Inbound 以及 Outbound 的流量,一但有外部攻擊者發出偽造來源的惡意 DNS 封包或內部 DNS 主機發出異常 query 封包時,皆可被 IPS 偵測到,避免 DDoS攻擊之情事發生,在此種偵測模式下,我們可以確保轄下連線單位內的 DNS不被外部惡意攻擊者所利用,同時,也能確保內部不受到此種攻擊模式危害,在大規模攻擊情事發生前,亦能提早發出告警,避免攻擊進一步擴大而影響整體網路環境。
![Art editor Img](001/Upload/354/ckfile/029d06e7-2e02-4a35-9dc6-441f9f7b8881.jpg)
而在經過 Arcsightg 收容前端 IPS 資料後,進行後續的關聯分析,便可得如上攻擊拓撲圖,來了解此種攻擊行為的模式及彼此關連性,其中紅色方形代表攻擊發動者,藍色圓形表示攻擊事件類型,而白色方形代表攻擊目的端主機,圖形的大小代表攻擊量的多寡,綜合以上資訊來看,可以發現DNS 放大攻擊模式具有多攻擊來源、單一目標、及龐大數量等特性,在此模式下,目標主機若沒有相關防護措施,網路環境很容易就被攻擊者癱瘓。
![Art editor Img](001/Upload/354/ckfile/f133861a-cbfd-470d-90d9-76a61c2efd32.jpg)
檢視 IPS 所偵測到的事件封包如上圖,可發現具有明確的攻擊特徵,攻擊者偽造來源後,並會針對特定 domain 發送大量 query 封包,正常使用者不應發出如此頻繁的 DNS query,且查詢的 Domain name 皆為「sandia.gov」,這明顯為異常行為,故研判攻擊者想藉此癱瘓受害主機頻寬,屬 DNS 放大攻擊。
三、 DNS amplification attack 解決方案
Windows DNS[3]為避免 DNS 主機被利用為攻擊的跳板,建議 DNS 設定須符合下列兩項安全性設定:
設定 ACL,僅允許符合 ACL 設定的網段進行 recursive query 或關閉 recursive query
設定 ACL
1. 開啟 [DNS 管理員]。
2. 在主控台樹狀目錄中按一下適用的 DNS 伺服器。
位置:DNS/適用的 DNS 伺服器
3. 在 [執行] 功能表,按一下 [內容]。
4. 在 [介面] 索引標籤上,按一下 [只有下列 IP 位址]。
5. 在 [IP 位址] 中,輸入為此 DNS 伺服器啟用的 IP 位址,然後按一下[新增]。
6. 視需要重複上一個步驟,以指定為此 DNS 伺服器啟用的其他伺服器 IP 位址。
若要從清單移除 IP 位址,然後按一下 [移除]。或使用命令列執行:
1. 開啟命令提示字元。
2. 輸入下列命令,再按 ENTER 鍵:
dnscmd <ServerName> /ResetListenAddresses [<ListenAddress> ...]
關閉 recursive query
1. 開啟 [DNS 管理員]。
2. 在主控台樹狀目錄的適當 DNS 伺服器上按一下滑鼠右鍵,然後按一下 [內容]。
位置:DNS/適用的 DNS 伺服器
3. 按一下 [進階] 索引標籤。
4. 在 [伺服器選項]中,選取 [停用遞迴] 核取方塊,然後按一下 [確定]。
或使用命令列執行:
1. 開啟命令提示字元。
2. 輸入下列命令,再按 ENTER 鍵:
dnscmd <ServerName> /Config /NoRecursion {1|0}
四、 下以各 Windows 版本作業系統實作為例:
Windows 2012
1. 開啟 DNS Manager
![Art editor Img](001/Upload/354/ckfile/6a5ae26e-93ff-4038-8a2d-d062b1a84aad.jpg)
2. 選擇 DNS 伺服器名稱右鍵>內容
3. 選擇屬性
![Art editor Img](001/Upload/354/ckfile/3fcdfd74-5e56-4ce4-ac12-317ee29276e7.jpg)
4. 選擇”介面”標籤頁
5. 選擇僅有下列 IP 可以連線
6. 勾選允許連線之介面
![Art editor Img](001/Upload/354/ckfile/ea39281a-375a-4a44-8eef-e3e2f0102e6b.jpg)
7. 選擇”進階”標籤頁
8. 勾選停用遞迴查詢選項
9. 選取”套用”
![Art editor Img](001/Upload/354/ckfile/4b074929-3259-4c14-80a3-4889d939e72f.jpg)
CMD 操作模式如下:
1. 設定查詢 ACL
![Art editor Img](001/Upload/354/ckfile/b8a11d95-59d0-4a70-be28-fcddcfa1362e.jpg)
2. 關閉遞迴查詢
![Art editor Img](001/Upload/354/ckfile/44f84de3-5df6-40b9-97b6-bbde2ad25e0e.jpg)
Windows 2008
1. 執行伺服器管理員
![Art editor Img](001/Upload/354/ckfile/eb0b9ecc-b77c-4abf-8827-1f35c2eb84b7.jpg)
2. 選取 DNS 伺服器後,點選右鍵>內容
![Art editor Img](001/Upload/354/ckfile/a7b27f86-17da-40e5-8728-0b47c873bb84.jpg)
3. 選取”介面”標籤頁
4. 選擇只有下列 IP 位置
5. 勾選允許連線之介面
![Art editor Img](001/Upload/354/ckfile/fae90055-7c61-4a70-9007-d46fa6179200.jpg)
6. 選擇「進階」頁面
7. 勾選「停用遞迴」
8. 選擇「套用」
![Art editor Img](001/Upload/354/ckfile/bc59f15c-fd0e-461f-9f0b-89eece425847.jpg)
CMD 操作模式如下:
1. 設定查詢 ACL
![Art editor Img](001/Upload/354/ckfile/f6d80075-5cf2-4f57-9225-08b3c94488e4.jpg)
2. 關閉遞迴查詢
![Art editor Img](001/Upload/354/ckfile/810bb3b3-5059-45fd-b27b-079832d2224a.jpg)
Windows 2003
1. 執行 DNS 管理員
![Art editor Img](001/Upload/354/ckfile/0573f0b3-8419-456b-ad5b-321bcc8967f8.jpg)
2. 選擇 DNS 伺服器,右鍵>內容
3. 選擇「內容」
![Art editor Img](001/Upload/354/ckfile/b78aa372-f4ca-454a-8414-7ebfc7e5e025.jpg)
4. 選擇「介面」標籤頁
5. 選擇只有下列 IP 位置
6. 輸入允許連線之 IP 位置
7. 點擊「新增」
8. 選擇「套用」
![Art editor Img](001/Upload/354/ckfile/15fb23fc-b2ca-4510-85ce-ad1de1ab9c6c.jpg)
9. 選擇「進階」標籤頁
10. 勾選「停用遞迴」
11. 選擇「套用」
![Art editor Img](001/Upload/354/ckfile/ca8ab8dd-12ad-42d2-9681-e5dc1e451b42.jpg)
4.2 Linux DNS
為避免 DNS 主機被利用為攻擊的跳板,建議 DNS 設定須符合下列兩項安全性設定:
● 在 BIND 版本 9.5 之前,recursion 的功能是預設開啟的,故管理者必須自行關閉此功能或設定適當的存取權限。
● 以下為 BIND 的組態設定檔 Name.conf 的建議設定
/*定義一個 ACL,設定能存取 DNS 服務的 IP 範圍,此例192.168.0.0/16,可自行調整為貴單位的網段*/
Acl “allowed-IP”{
192.168.0.0/16;
};
/*僅允許符合 ACL 設定的網段進行 recursive query*/
Options {
……
Allow-recursion { allowed-IP; };
……
};
/*提供貴單位管轄下的網域給其它 DNS 查詢*/
zone "XXX.edu.tw" in {
……
allow-query { any; };
……
};
詳細的設定步驟可參考ISC BIND9[4] 的相關文件。
參考資料
[1] DNS Amplification Attack, Nirlog.com
http://nirlog.com/2006/03/28/dns-amplification-attack/
[2] DNS Amplification Attack, nsfocusblog.com
http://nsfocusblog.com/tag/dns-amplification-attacks/
[3] 設定 DNS 伺服器服務安全性, microsoft
http://technet.microsoft.com/zh-tw/library/cc731367.aspx
[4] BIN9, ISC Knowledge Base
https://kb.isc.org/category/116/0/10/Software-roducts/BIND9/Documentation/