浅析DNS安全
DNS安全淺議、域名A記錄(ANAME),MX記錄,CNAME記錄
相關(guān)學習資料
http://baike.baidu.com/link?url=77B3BYIuVsB3MpK1nOQXI-JbS-AP5MvREzSnnedU7F9_G8l_Kvbkt_O2gKqFw7vm http://www.rfc-editor.org/rfc/rfc1035.txt http://www.rfc-editor.org/rfc/rfc3596.txt http://www.rfc-editor.org/rfc/rfc2782.txt http://www.rfc-editor.org/rfc/rfc3403.txt http://zhumeng8337797.blog.163.com/blog/static/10076891420110694312990/ tcp-ip詳解卷1:協(xié)議.pdf http://wenku.baidu.com/link?url=gIwRwFkKbwB-x45_xVShR10VII_r3nchf0wYTPwelAu5CrS7T5N3zxoBtImYD8i3-mwJhgi5ix-XWMcXkI0uNg6gJCgCihZkRwVydqyFWF3 ftp://ftp.rs.internic.net/domain/ http://www.laojia1987.cn/show.asp?id=756 http://technet.microsoft.com/zh-cn/cc779148(WS.10).aspx http://blog.csdn.net/lastsweetop/article/details/5692312 http://blog.sina.com.cn/s/blog_6441e0640100scj2.html http://zhumeng8337797.blog.163.com/blog/static/100768914201082910759244/?
目錄
1. DNS簡介 2. DNS查詢方式 3. 和DNS有關(guān)的安全風險 4. DNS記錄類型?
1. DNS簡介?
DNS是指:域名系統(tǒng)(Domain Name System)。在Internet上域名與IP地址之間是一一對應的,域名雖然便于人們記憶,但機器之間只能互相認識IP地址,它們之間的轉(zhuǎn)換工作稱為域名解析,域名解析需要由專門的域名解析系統(tǒng)來完成,DNS就是進行域名解析的系統(tǒng)。
DNS協(xié)議運行在UDP協(xié)議之上,使用端口號53。在傳輸層TCP提供端到端可靠的服務(wù),在UDP端提供盡力交付的服務(wù)。其控制端口作用于UDP端口53。
0x1: DNS記錄類型
DNS系統(tǒng)中,常見的資源記錄類型有:
1. 主機記錄(A記錄) RFC 1035定義,A記錄是用于名稱解析的重要記錄,它將特定的主機名映射到對應主機的IP地址上。過A記錄,大家可以設(shè)置自己的不同域名轉(zhuǎn)到不同的IP上去,如:1) www.dns.la 轉(zhuǎn)到IP 116.255.202.12) web.dns.la 轉(zhuǎn)到IP 116.255.202.113) mail.dns.la 轉(zhuǎn)到IP 116.255.202.1112. 別名記錄(CNAME記錄) RFC 1035定義,CNAME記錄用于將某個別名指向到某個A記錄上,這樣就不需要再為某個新名字另外創(chuàng)建一條新的A記錄。對于CNAME的原理要注意和URL轉(zhuǎn)發(fā)進行區(qū)分:1) url轉(zhuǎn)發(fā)可以轉(zhuǎn)發(fā)到某一個目錄下,甚至某一個文件上2) 而cname是不可以,這就是url轉(zhuǎn)發(fā)和cname的主要區(qū)別所在3. MX記錄(Mail Exchange) 郵件交換記錄,用戶可以將該域名下的郵件服務(wù)器指向到自己的mail server上,然后即可自行操作控制所有的郵箱設(shè)置。要注意的是郵箱DNS解析和HTTP DNS解析是獨立的,如果你設(shè)置A記錄是指向123.12.123.123,而MX記錄你設(shè)置是指向222.22.222.222,那么你的DNS服務(wù)器接收到別人的郵件路 由請求時就將會將它的請求解釋到222.22.222.222上去!而別人訪問你的網(wǎng)頁
的時候仍然是訪問123.12.123.123。4. NS(Name Server) 域名服務(wù)器記錄,用來指定該域名由哪個DNS服務(wù)器來進行解析,可以把一個域名的不同二級域名分別指向到不同的DNS系統(tǒng)來解析5. IPv6主機語錄(AAAA記錄) RFC 3596定義,與A記錄對應,用于將特定的主機名映射到一個主機的IPv6地址。6. 服務(wù)位置記錄(SRV記錄) RFC 2782定義,用于定義提供特定服務(wù)的服務(wù)器的位置,如主機(hostname),端口(port number)等。7. NAPTR記錄 RFC 3403定義,它提供了正則表達式方式去映射一個域名。NAPTR記錄非常著名的一個應用是用于ENUM查詢。
0x2: 域名系統(tǒng)分類
DNS的名字空間和Unix的文件系統(tǒng)相似,也具有層次結(jié)構(gòu)。每個結(jié)點有 一個至多63個字符長的標識。這顆樹的樹根是沒有任何標識的特殊結(jié)點(即全球根DNS)。命名標識中一律不區(qū)分大寫和小寫。命名樹上任何一個結(jié)點的域名就 是將從該結(jié)點到最高層的域名串連起來,中間使用一個點"."分隔這些域名,域名樹中的每個結(jié)點必須有一個唯一的域名,但域名樹中的不同結(jié)點可使用相同的標 識。
以點"."結(jié)尾的域名稱為絕對域名或完全合格的域名FQDN(Full Qualified Domain Name),例如sun.tuc.noao.edu. ?
如果一個域名不以點結(jié)尾,則認為該域名是不完全的。
DNS根域名服務(wù)器 全球共有13臺根"邏輯域名服務(wù)器"。這13臺邏輯根域名服務(wù)器中名字分別為"A"至"M",真實的根服務(wù)器在2014年1月25日的數(shù)據(jù)為386臺,分布于全球各大洲。 之所以是13臺,這要從DNS協(xié)議(域名解析協(xié)議)說起。DNS協(xié)議使用了端口上的UDP和TCP協(xié)議,UDP通常用于查詢和響應,TCP用于主服務(wù)器和從服務(wù)器之間的傳送。由于在所有UDP查詢和響應中
能保證正常工作的最大長度是512字節(jié),512字節(jié)限制了根服務(wù)器的數(shù)量和名字。要讓所有的根服務(wù)器數(shù)據(jù)能包含在一個512字節(jié)的UDP包中,根服務(wù)器只能限制在13個,而且每個服務(wù)器要使用字
母表中的單個字母命名,這也是根服務(wù)器是從A~M命名的原因。 在根域名服務(wù)器中雖然沒有每個域名的具體信息,但儲存了負責每個域(如COM、NET、ORG等)的解析的域名服務(wù)器的地址信息,如同通過北京電信你問不到廣州市某單位的電話號碼,但是北京電
信可以告訴你去查020114。世界上所有互聯(lián)網(wǎng)訪問者的瀏覽器的將域名轉(zhuǎn)化為IP地址的請求(瀏覽器必須知道數(shù)字化的IP地址才能訪問網(wǎng)站)理論上都要經(jīng)過根服務(wù)器的指引后去該域名的權(quán)威域
名服務(wù)器(authoritative name server),當然現(xiàn)實中提供接入服務(wù)的ISP的"緩存域名服務(wù)器"上可能已經(jīng)有了這個對應關(guān)系(域名到IP地址)的緩存。 1. 頂級域名 頂級域名被分為三個部分1) arpa是一個用作地址到名字轉(zhuǎn)換的特殊域(即反過來用IP來解析域名)2) 7個3字符長的普通域。有些書也將這些域稱為組織域2.1) com: 商業(yè)組織2.2) edu: 教育機構(gòu)2.3) gov: 政府部門2.4) int: 國際組織2.5) mil: 軍事網(wǎng)點2.6) net: 網(wǎng)絡(luò)2.7) org: 其他組織3) 所有2字符長的域均是基于ISO3166中定義的國家代碼,這些域被稱為國家域,或地理域。,例如3.1) hk3.2) us 2. 二級域名 一個獨立管理的DNS子樹稱為一個區(qū)域(zone)。一個常見的區(qū)域是一個二級域,如noao.edu。許多二級域?qū)⑺鼈兊膮^(qū)域劃分成更小的區(qū)域。例如,大學可能根據(jù)不同的系來劃分區(qū)域,公司可能
根據(jù)不同的部門來劃分區(qū)域。
0x3: DNS協(xié)議格式
1. 標識 一個4字節(jié)16bit的字段,Transaction ID,表明當前DNS請求的序號 2. 標志 16bit的標志字段1) QR1bit字段1.1) 0表示查詢報文1.2) 1表示響應報文。2) opcode4bit字段2.1) 通常值為0(標準查詢)2.2) 其他值為1(反向查詢)2.3) 2(服務(wù)器狀態(tài)請求)3) A 1bit標志,表示"授權(quán)回答(authoritative answer)"。該名字服務(wù)器是授權(quán)于該域的。4) TC1bit字段,表示"可截斷的(truncated)"。使用UDP時,它表示當應答的總長度超過512字節(jié)時,只返回前512個字節(jié)5) RD1bit字段,表示"期望遞歸(recursion desired)"。該比特能在一個查詢中設(shè)置,并在響應中返回。這個標志告訴名字服務(wù)器必須處理這個查詢,也稱為一個遞歸查詢。如果該位為0,且
被請求的名字服務(wù)器沒有一個授權(quán)回答,它就返回一個能解答該查詢的其他名字服務(wù)器列表,這稱為迭代查詢。 6) RA1bit字段,表示"可用遞歸"。如果名字服務(wù)器支持遞歸查詢,則在響應中將該比特設(shè)置為1。大多數(shù)名字服務(wù)器都提供遞歸查詢,除了某些根服務(wù)器7) 隨后3bit必須為08) rcode4bit的返回碼字段。通常的值為:8.1) 0(沒有差錯)8.2) 3(名字差錯)名字差錯只有從一個授權(quán)名字服務(wù)器上返回,它表示在查詢中制定的域名不存在。 3. 問題數(shù) 查詢問題的數(shù)量,對于請求報文,通常為1 4. 資源記錄數(shù) 返回的資源記錄數(shù) 5. 授權(quán)資源記錄數(shù) 返回的授權(quán)資源記錄數(shù) 6. 額外資源記錄數(shù) 返回的額外資源記錄數(shù) 7. 查詢問題 注意,一個DNS數(shù)據(jù)報中可能會有多個查詢問題,這也是為什么在之前的"問題數(shù)"等字段會有大于1數(shù)字的原因。每個"查詢問題格式"都相同,如下:1) 查詢名查詢名是要查找的名字,它是一個或多個字符串的序列。每個字符串以首字節(jié)的計數(shù)值來說明隨后標識符的字節(jié)長度,每個名字以最后字節(jié)為0結(jié)束,字符串之間以"."分隔,例如
www.baidu.com中www、baidu、com都是字符串,長度為0的字符串是根標識符。計數(shù)字節(jié)的值必須是0~63的數(shù),因為單個字符串的最大長度僅為63 2) 查詢類型2.1) A: IP地址2.2) NS: 名字服務(wù)器2.3) CNAME: 規(guī)范名稱2.4) PTR: 指針記錄,即IP到域名的反向查詢2.5) HINFO: 主機信息2.6) MX: 郵件交換記錄2.7) AXFR: 區(qū)域傳送請求 2.8) */ANY: 對所有記錄的請求 最常用的查詢類型是A類型,表示期望獲得查詢名的IP地址。一個PTR查詢則請求獲得一個IP地址對應的域名。這是一個指針查詢3) 查詢類查詢類通常是1,指互聯(lián)網(wǎng)地址(某些站點也支持其他非IP地址) 8. 回答(只在DNS響應數(shù)據(jù)報中存在)1) 域名客戶端請求解析的域名,和請求報文中的問題中的查詢名一樣 2) 類型2.1) A: IP地址2.2) NS: 名字服務(wù)器2.3) CNAME: 規(guī)范名稱2.4) PTR: 指針記錄,即IP到域名的反向查詢2.5) HINFO: 主機信息2.6) MX: 郵件交換記錄2.7) AXFR: 區(qū)域傳送請求 2.8) */ANY: 對所有記錄的請求 3) 類通常是1,指互聯(lián)網(wǎng)地址(某些站點也支持其他非IP地址)4) 生存時間客戶程序保留該資源記錄的秒數(shù)。資源記錄通常的生存時間值為2天。5) 資源數(shù)據(jù)長度資源數(shù)據(jù)的數(shù)量。該數(shù)據(jù)的格式依賴于類型字段的值5.1) 對于類型1(A記錄)資源數(shù)據(jù)是4字節(jié)的IP地址5.2) 對于類型CNAME資源數(shù)據(jù)是域名字符串長度 9. 授權(quán)(只在DNS響應數(shù)據(jù)報中存在) 10. 額外信息(只在DNS響應數(shù)據(jù)報中存在)
?
2. DNS查詢方式
0x1: 遞歸查詢和迭代查詢的區(qū)別
1.遞歸查詢: 一般客戶機和首選DNS服務(wù)器(寬帶連接是設(shè)置的默認DNS)之間屬遞歸查詢,即當客戶機向DNS服務(wù)器發(fā)出請求后,若DNS服務(wù)器本身不能解析,則會向另外的DNS服務(wù)器發(fā)出查詢請求,得到最終結(jié)果后轉(zhuǎn)交給客戶機 2.迭代查詢(反復查詢): 一般DNS服務(wù)器之間屬迭代查詢,如:若DNS2不能響應DNS1的請求,則它會將DNS3的IP給DNS2,以便其再向DNS3發(fā)出請求
下圖為一次完整的DNS查詢過程,包括客戶端和本地DNS的遞歸查詢、以及本地DNS和上機DNS之間的迭代查詢
1. 網(wǎng)絡(luò)客戶端準備訪問www.163.com這個域名,瀏覽器準備進行DNS解析以獲取對應的IP 2. 網(wǎng)絡(luò)客戶端將DNS解析請求發(fā)送到"本地DNS服務(wù)器"后,就進行等待狀態(tài),因為對于網(wǎng)絡(luò)客戶端和本地DNS服務(wù)器來說它們是遞歸關(guān)系,本地DNS服務(wù)器最終一定會把結(jié)果返回給網(wǎng)絡(luò)客戶端(IP、或者是不存在) 3. 本地DNS服務(wù)器接收到DNS解析請求后,開始和上機DNS服務(wù)之間進行迭代查詢1) 向全球根域名DNS服務(wù)器發(fā)送解析請求,根DNS根據(jù)請求中的頂級域名,返回該域名對應的頂級DNS服務(wù)器(.com)IP2) 本地DNS服務(wù)器接著繼續(xù)向".com"DNS服務(wù)器發(fā)送解析請求,".com"服務(wù)器查詢自己的DNS緩存,返回.163.com域名服務(wù)器,要求本地DNS繼續(xù)迭代查詢3) 本地DNS繼續(xù)向".163.com"進行請求,并得到解析IP: 1.1.1.1 4. 本地DNS服務(wù)器將最終的解析結(jié)果返回給網(wǎng)絡(luò)客戶端,完成一次DNS解析
dig maps.google.com +trace
?
; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> maps.google.com +trace ;; global options: +cmd . 276507 IN NS c.root-servers.net. . 276507 IN NS d.root-servers.net. . 276507 IN NS h.root-servers.net. . 276507 IN NS b.root-servers.net. . 276507 IN NS g.root-servers.net. . 276507 IN NS j.root-servers.net. . 276507 IN NS a.root-servers.net. . 276507 IN NS i.root-servers.net. . 276507 IN NS k.root-servers.net. . 276507 IN NS l.root-servers.net. . 276507 IN NS m.root-servers.net. . 276507 IN NS e.root-servers.net. . 276507 IN NS f.root-servers.net. . 467210 IN RRSIG NS 8 0 518400 20160720050000 20160710040000 46551 . hoEAAYtNaUlG8/AB1vZwqsgIUb2NPrbs6CIBjstfNe3xvAfTeMVQb7oy KPGxlCxBtkR4S+jaoR//Es3FHqUDk7Okap5VroNJxfUq2ZCugTOIp8g4 aaSi13vb/ShFmfN4ADfUqXOHgqGRz/QOkSdZ+0tElkQoDcd63U6ETlJM IAQ= ;; Received 913 bytes from 10.143.22.116#53(10.143.22.116) in 24 mscom. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 com. 86400 IN RRSIG DS 8 1 86400 20160720170000 20160710160000 46551 . TtxKBdFbscgs26hOkVaP5DV5bvrczgFJ91Vq79iRhvRu5PveAjT8af8G yF0+JZMUAXyMbU7uxhgs0Rpec7ldBu/palvN9edTXZTUmmRCHiCoJwSX 46nzphAUeWh6+BB8FRZl6FpRMaSfZ02Vd3f3pxabNzLYtHzsizMXAOBv 8go= ;; Received 739 bytes from 198.41.0.4#53(a.root-servers.net) in 298 msgoogle.com. 172800 IN NS ns2.google.com. google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns4.google.com. CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20160717050355 20160710035355 34745 com. FRl3kWjrLQDbv3KST9JdLeQN0FgGqik8Pau80HDFSwQV9ON0D9L9CnyT 3qLHbgsh8MMt9ma0AnxjnfZx00YoRySt+0vwQfzk0/7Z6pTeyXEZCBQU 9we3XmqWg56sIDVDK3KKyTaPE2mJUZjweRpuvv3RsfjQ7qHeDeFR/spT eNk= S84AE3BIT99DKIHQH27TRC0584HV5KOH.com. 86400 IN NSEC3 1 1 0 - S84HQQBBMVORSCH4GNB3G868OHH33GUR NS DS RRSIG S84AE3BIT99DKIHQH27TRC0584HV5KOH.com. 86400 IN RRSIG NSEC3 8 2 86400 20160715050611 20160708035611 34745 com. oXeZcWKIL0ov3ySqHKlaBI6m7I1IgGjLzWBjiVUHBmgw7VWWrhibPvWu jeUSLDHNtyhC7LXgiMl18hjTB+frknLNG5gA/lut82uheMGHMV4VrsvP CREQ1mSgNqV7eNNocPoIHcFgL+3+wOrxLc1QzhJ6UK5/ni/kSewbHJQE qo0= ;; Received 665 bytes from 192.48.79.30#53(j.gtld-servers.net) in 268 msmaps.google.com. 300 IN A 216.58.197.110 ;; Received 49 bytes from 216.239.36.10#53(ns3.google.com) in 52 ms?
dig 8uc.gddos.com? +trace
; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> 8uc.gddos.com +trace ;; global options: +cmd . 276370 IN NS i.root-servers.net. . 276370 IN NS m.root-servers.net. . 276370 IN NS d.root-servers.net. . 276370 IN NS h.root-servers.net. . 276370 IN NS b.root-servers.net. . 276370 IN NS a.root-servers.net. . 276370 IN NS e.root-servers.net. . 276370 IN NS j.root-servers.net. . 276370 IN NS c.root-servers.net. . 276370 IN NS l.root-servers.net. . 276370 IN NS k.root-servers.net. . 276370 IN NS f.root-servers.net. . 276370 IN NS g.root-servers.net. . 467073 IN RRSIG NS 8 0 518400 20160720050000 20160710040000 46551 . hoEAAYtNaUlG8/AB1vZwqsgIUb2NPrbs6CIBjstfNe3xvAfTeMVQb7oy KPGxlCxBtkR4S+jaoR//Es3FHqUDk7Okap5VroNJxfUq2ZCugTOIp8g4 aaSi13vb/ShFmfN4ADfUqXOHgqGRz/QOkSdZ+0tElkQoDcd63U6ETlJM IAQ= ;; Received 913 bytes from 10.143.22.116#53(10.143.22.116) in 2 mscom. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 com. 86400 IN RRSIG DS 8 1 86400 20160720170000 20160710160000 46551 . TtxKBdFbscgs26hOkVaP5DV5bvrczgFJ91Vq79iRhvRu5PveAjT8af8G yF0+JZMUAXyMbU7uxhgs0Rpec7ldBu/palvN9edTXZTUmmRCHiCoJwSX 46nzphAUeWh6+BB8FRZl6FpRMaSfZ02Vd3f3pxabNzLYtHzsizMXAOBv 8go= ;; Received 737 bytes from 192.5.5.241#53(f.root-servers.net) in 29 msgddos.com. 172800 IN NS ns1cwy.name.com. gddos.com. 172800 IN NS ns2gtx.name.com. gddos.com. 172800 IN NS ns3dkz.name.com. gddos.com. 172800 IN NS ns4dls.name.com. CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20160717050355 20160710035355 34745 com. FRl3kWjrLQDbv3KST9JdLeQN0FgGqik8Pau80HDFSwQV9ON0D9L9CnyT 3qLHbgsh8MMt9ma0AnxjnfZx00YoRySt+0vwQfzk0/7Z6pTeyXEZCBQU 9we3XmqWg56sIDVDK3KKyTaPE2mJUZjweRpuvv3RsfjQ7qHeDeFR/spT eNk= 7P30T8CNL78NE7VK927QBUTOVFF0A00H.com. 86400 IN NSEC3 1 1 0 - 7P35935AMQU5C7SUS076VU2RMISV0DF9 NS DS RRSIG 7P30T8CNL78NE7VK927QBUTOVFF0A00H.com. 86400 IN RRSIG NSEC3 8 2 86400 20160717044119 20160710033119 34745 com. I9KyGVdi7ZOHtlVKCUcShMkCSwuR61D5tpD/yVD8IRammwLEUlQizyxv uiF3kWTC4PKZCcaJemBATBDhZIm+ZshdwL1sToMTbEYWucq+HGBgl6jM pVPbREB/ywa0U3dS9C6UiUvSuYP119LevJBkOVxkJ2SvlUsEVWkirKl6 EE8= ;; Received 708 bytes from 192.31.80.30#53(d.gtld-servers.net) in 276 msgddos.com. 300 IN SOA ns1cwy.name.com. support.name.com. 1 10800 3600 604800 300 ;; Received 87 bytes from 98.124.217.1#53(ns4dls.name.com) in 287 ms?
?
0x2: DNS解析抓包實驗過程
1. DNS普通查詢
2. DNS查詢響應
可以看到,www.baidu.com是一個CNAME地址,是百度為了用戶好記而登記的域名
3. Zone Transfer(AXFR)請求
4. PTR域名反向查詢
?
3. 和DNS有關(guān)的安全風險
DNS是互聯(lián)網(wǎng)的一個基礎(chǔ)設(shè)施,針對DNS的安全風險大致有如下幾個:
1. 防火墻不會限制對DNS的訪問 這導致攻擊者可能會借助DNS通道進行數(shù)據(jù)庫帶外信道注入、或者DNS隱藏隧道等攻擊2.DNS可以泄漏內(nèi)部的網(wǎng)絡(luò)拓樸結(jié)構(gòu) 即DNS Zone Transfer攻擊 3.DNS的本身性能問題 安全的一個重要標志是可用性。對于DNS服務(wù)器而言這點尤其重要,在現(xiàn)實生活中經(jīng)常定義攻擊者入侵系統(tǒng)獲取數(shù)據(jù)為一個安全問題,但是對于DNS服務(wù)器來說,遭到了拒絕服務(wù)攻擊則是一件更嚴重的問題。失去了DNS服務(wù)器的話,任何在internet網(wǎng)絡(luò)上的人將不能夠再使用域名找到你的服務(wù)器,不可想像讓普通的網(wǎng)民們使用202.106.184.200來代替www.sina.com.cn使用。更嚴重的
是,沒有了DNS的服務(wù),所有的郵件發(fā)送都將失敗,而你的內(nèi)部網(wǎng)絡(luò)將由于解析域名的失敗而失去和外部網(wǎng)絡(luò)的聯(lián)系。 注冊了一個域名以后,可以最大為你的域名設(shè)置6個DNS服務(wù)器名。 例如,microsoft.com公司的就為自己設(shè)置了五個DNS服務(wù)器來解析自己的域名: Name Servers: DNS4.CP.MSFT.NET 207.46.138.11 DNS5.CP.MSFT.NET 207.46.138.12 Z1.MSFT.AKADNS.COM 216.32.118.104 Z7.MSFT.AKADNS.COM 213.161.66.158 DNS1.TK.MSFT.NET 207.46.232.37 這樣,即使這三個中的兩個停止了工作,但是了,仍然可以有一個會對外提供服務(wù),而對于廣大的用戶而言,當出現(xiàn)這種多個DNS服務(wù)器停止服務(wù)帶來的唯一的影響就是查詢域名的時候會延遲,因
為它需要一個一個的去查詢,直到找到最后的一個為止。而上面這一個步驟也是你應付惡意攻擊者對DNS服務(wù)器進行拒絕服務(wù)攻擊的一個保護手段。
0x1: DNS Zone Transfer
Zone Transfer漏洞可以被滲透測試人員用來進行內(nèi)網(wǎng)信息搜集、拓樸獲取等目的,是內(nèi)網(wǎng)橫向滲透、信息搜集的一個很重要的手段。
一個名字服務(wù)器(NS)負責一個或多個區(qū)域(zone)。一個區(qū)域的管理者必須為該區(qū)域提供一個主名字服務(wù)器(master)和至少一個輔助名字服務(wù)器(slave)。主、輔名字服務(wù)器必須是獨立和冗余的,以便當某個名字服務(wù)器發(fā)生故障時不會影響該區(qū)域的名字服務(wù)。
主、輔名字服務(wù)器的主要區(qū)別在于主名字服務(wù)器從磁盤文件中調(diào)入該區(qū)域的所有信息,而輔名字服務(wù)器則從主服務(wù)器調(diào)入所有信息。我們將輔名字服務(wù)器從主服務(wù)器調(diào)入信息稱為區(qū)域傳送(zone transfer)
了解了DNS Zone Transfer的基本概念之后,我們來一起學習一下dig、nslookup這2個命令,看看我們都能利用Zone Transfer獲得哪些信息
nslookup命令解釋
在win上,nslookup會根據(jù)ipconfig連接后的默認DNS去找到所要使用的local DNS server
在linux上,nslookup會根據(jù)/etc/resolv.conf的內(nèi)容去找到所要使用的local DNS server
set type=ptr
本來要由IP反查 domain name時, 在直接打IP就行了, 但如果已經(jīng)下了type=any的話, 要由IP反查時就沒那么方便了, 此時IP 4個數(shù)字要倒著寫, 最后還要加上in-addr.arpa.
以查140.116.72.219 為例, 要輸入的就是219.72.116.140.in-addr.arpa14) querytype=X: 與類型相同15) class=X: 設(shè)置查詢類(如IN(Internet)和ANY)16) [no]msxfr: 使用MS快速區(qū)域傳送17) ixfrver=X: 用于IXFR傳送請求的當前版本 3. server NAME 將默認服務(wù)器設(shè)置為NAME(例如8.8.8.8),同時對NAME進行解析
很多情況下,我們的DNS查詢并不會被發(fā)送到跟DNS服務(wù)器上,而是由DNS Cache服務(wù)器進行返回,為了獲得最新的數(shù)據(jù),我們需要手動去修改"默認本地DNS"從而獲得最新的DNS數(shù)據(jù) 4. lserver NAME 將默認服務(wù)器設(shè)置為NAME,使用初始服務(wù)器 5. root 將當前默認服務(wù)器設(shè)置為根服務(wù)器 6. ls [opt] DOMAIN [> FILE] 列出DOMAIN中的地址(可選: 輸出到文件 FILE)
這個命令是要求name server將其負責的zone內(nèi)容show出來, 這個動作相當于name server的整份記錄從server端傳回給nslookup這個程序, 這種傳回整個zone的動作叫作zone transfer1) -a列出規(guī)范名稱和別名2) -d列出所有記錄3) -t TYPE列出給定 RFC 記錄類型3.1) A3.2) CNAME3.3) MX3.4) NS3.5) PTR等的記錄 7. view FILE 對 'ls' 輸出文件排序,并使用 pg 查看 8. exit 退出程序
dig命令解釋
Dig是linux中的域名解析工具,Dig是domain information groper的縮寫
Usage: dig [@global-server] [domain] [q-type] [q-class] {q-opt}{global-d-opt} host [@local-server] {local-d-opt}[ host [@local-server] {local-d-opt} [...]] 1. domain 要查詢的域名 2. q-class 1) IN(默認)2) HS3) CH 3. q-type1) A(默認)2) ANY3) MX4) NS5) SOA6) HINFO7) AXFR8) TXT 4. q-opt1) -x dot-notation (shortcut for reverse lookups)2) -i (use IP6.INT for IPv6 reverse lookups)3) -f filename (batch mode)4) -b address[#port] (bind to source address/port)5) -p port (specify port number)6) -q name (specify query name)7) -t type (specify query type)8) -c class (specify query class)9) -k keyfile (specify tsig key file)10) -y [hmac:]name:key (specify named base64 tsig key)11) -4 (use IPv4 query transport only)12) -6 (use IPv6 query transport only)13) -m (enable memory usage debugging) 5. d-opt 格式為: +keyword[=value],keyword的可選值如下1) +[no]vc (TCP mode)2) +[no]tcp (TCP mode, alternate syntax)3) +time=### (Set query timeout) [5]4) +tries=### (Set number of UDP attempts) [3]5) +retry=### (Set number of UDP retries) [2]6) +domain=### (Set default domainname)7) +bufsize=### (Set EDNS0 Max UDP packet size)8) +ndots=### (Set NDOTS value)9) +edns=### (Set EDNS version)10) +[no]search (Set whether to use searchlist)給你的公眾服務(wù)器提供清楚的統(tǒng)計信息11) +[no]showsearch (Search with intermediate results)12) +[no]defname (Ditto)13) +[no]recurse (Recursive mode)14) +[no]ignore (Don't revert to TCP for TC responses.)15) +[no]fail (Don't try next server on SERVFAIL)16) +[no]besteffort (Try to parse even illegal messages)17) +[no]aaonly (Set AA flag in query (+[no]aaflag))18) +[no]adflag (Set AD flag in query)19) +[no]cdflag (Set CD flag in query)20) +[no]cl (Control display of class in records)21) +[no]cmd (Control display of command line)22) +[no]comments (Control display of comment lines)23) +[no]question (Control display of question)24) +[no]answer (Control display of answer)
查詢的結(jié)果25) +[no]authority (Control display of authority)
告訴我們哪個DNS服務(wù)器給我們提供權(quán)威的答案26) +[no]additional (Control display of additional)
包含了列出的權(quán)威DNS的IP地址27) +[no]stats (Control display of statistics)
輸出包含了查詢的統(tǒng)計數(shù)據(jù)28) +[no]short (Disable everything except short form of answer)29) +[no]ttlid (Control display of ttls in records)30) +[no]all (Set or clear all display flags)31) +[no]qr (Print question before sending)32) +[no]nssearch (Search all authoritative nameservers)33) +[no]identify (ID responders in short answers)34) +[no]trace (Trace delegation down from root)35) +[no]dnssec (Request DNSSEC records)36) +[no]nsid (Request Name Server ID)37) +[no]sigchase (Chase DNSSEC signatures)38) +trusted-key=#### (Trusted Key when chasing DNSSEC sigs)39) +[no]topdown (Do DNSSEC validation top down mode)40) +[no]multiline (Print records in an expanded format) 6. global d-opts and servers (before host name) affect all queries. 7. local d-opts and servers (after host name) affect only that lookup.1) -h: (print help and exit)2) -v: (print version and exit)
常用的dig命令
1. 查找yahoo.com的A記錄: dig yahoo.com A +noall +answer(注意:TTL的單位為秒s)2. 查找yahoo.com MX記錄的列表: dig yahoo.com MX +noall +answer3. 查找yahoo.com的權(quán)威DNS: dig yahoo.com NS +noall +answer4. 查詢上面所有的記錄: dig yahoo.com ANY +noall +answer5. 在現(xiàn)在這種IPv4和IPV6混用的情況下,你也可以使用AAAA的選項查詢主機的IPv6 AAAA記錄: dig www.isc.org AAAA +short6. 答案的精簡查詢 dig +nocmd www.baidu.com mx +noall +answer7. 用-x的選項查找IP地址的主機名 dig -x 8.8.8.8 +short8. 顯式指定NS服務(wù)器 dig @ns1.google.com www.google.com9. 查詢大量的主機名 dig -f /path/to/host-list.txt10. 找到最新的named.root文件 dig +nocmd . NS +noall +answer +additional11. 跟蹤DNS解析過程 dig gentoo.de +trace 可以在dig輸出的頭部分看到根DNS,然后找到負責解析所有*.de的DNS,最后找到gentoo.de的域名IP12. 用dig查看zone數(shù)據(jù)傳輸 dig @server www.baidu.com AXFR13. 用dig查看zone數(shù)據(jù)的增量傳輸 dig @server www.baidu.com IXFR=N14. 用dig查看反向解析 dig -x 8.8.8.8 @server15. 查找一個域的授權(quán)dns服務(wù)器 dig www.baidu.com +nssearch
0x2: Anti-DNS Zone Transfer配置
正常情況下,在一個信任網(wǎng)域下,將DNS資料列出是沒有問題的(即正常的主從服務(wù)器的Zone Transfer),但是若是能由外界進行任意查詢,那將衍變?yōu)榫哂形kU的行為,因此,對DNS服務(wù)器進行Zone Transfer安全配置是十分重要的。對于DNS的安全加固,大致可以從以下幾個方面入手:
1. 控制允許可以向DNS服務(wù)器提出查詢請求的主機: allow-query { myAddresses; trusted; }; 如果你沒有定義選項 allow-query ;那么Bind默認會允許所有的來訪者都可以查詢這個DNS服務(wù)器,相當于: allow-query { any; };2. 控制允許可以進行迭代解析或查詢的主機列表: allow-recursion { match-list; }; 如果你沒有定義選項 allow-recursion ; 那么Bind默認會允許所有可以訪問DNS的來訪者都可以進行迭代查詢3. 定義可以與主DNS服務(wù)器進行數(shù)據(jù)交流的輔助DNS服務(wù)器的ip地址,即限制zone transfer的訪問 allow-transfer { match-list; }; 允許這些match-list中的輔助DNS與主DNS服務(wù)器進行數(shù)據(jù)的交流與傳送。 例如:我的主DNS服務(wù)器192.168.68.128;輔助DNS服務(wù)器192.168.68.2,允許它們進行數(shù)據(jù)交流: allow-transfer { 192.168.68.2; };: 如果你沒有定義選項 allow-transfer ;那么Bind默認會允許所有的輔助DNS服務(wù)器與主DNS服務(wù)器進行數(shù)據(jù)交流4. 定義主DNS服務(wù)器的對客戶的請求查詢失敗時的行為: forwarders { match-list; }; forward first | only; 選項forwarders定義了當DNS服務(wù)器應答失敗時,就將客戶端的請求轉(zhuǎn)發(fā)到match-list中的其他服務(wù)器; 選項forward 定義DNS服務(wù)的轉(zhuǎn)發(fā)類型:first 是優(yōu)先轉(zhuǎn)發(fā)上述定義的DNS服務(wù)器;only是只會轉(zhuǎn)發(fā)到上述定義的DNS服務(wù)器; 如果你沒有定義選項 forwarders的選項 ;那么Bind默認不做任何轉(zhuǎn)發(fā)動作。?
4. DNS記錄類型
0x1: TXT記錄
TXT記錄是DNS記錄的一種類型,可向您網(wǎng)域外部的源提供文本信息。該文本可以是用戶可讀型文本或機讀型文本,并可用于多種用途
可以向您網(wǎng)域的DNS設(shè)置中添加TXT記錄以驗證網(wǎng)域所有權(quán)并實施多種電子郵件安全措施?
TXT記錄可包含任何文本值,具體取決于它的用途(它由DNS管理員自己定制)。例如,Google使用TXT記錄來驗證您擁有希望用于我們企業(yè)服務(wù)的網(wǎng)域,其值為"google-site-verification=rXOxyZounnZasA8Z7oaD3c14JdjS9aKSWvsR1EbUSIQ"。之后,Google會查詢您的網(wǎng)域以確定該TXT記錄是否已生效。如果TXT記錄已生效,那么Google會知道管理員有權(quán)訪問該網(wǎng)域的DNS設(shè)置,那么管理員一定擁有該網(wǎng)域
1. TXT格式
To store new types of information, the experimental RFC 1464 suggests a structured format in TXT data fields. The format consists of the attribute name followed by the value of the attribute. The name and value are separated by an equals sign (=)
The general syntax is:
Example:
name ttl class rr text joe IN TXT "Located in a black hole"2. TXT記錄用途
1. 驗證網(wǎng)域所有權(quán) 2. 使用SPF向發(fā)件人授權(quán) 3. 使用DKIM添加電子郵件數(shù)字簽名 4. 使用DMARC阻止外發(fā)垃圾郵件 //按照spf格式在dns中增加一條txt類型的記錄,將提高該域名的信譽度,同時可以防止垃圾郵件偽造該域的發(fā)件人發(fā)送垃圾郵件3. Sender Policy Framework(SPF)
"v=spf1 mx -all"Allow domain's MXes to send mail for the domain, prohibit all others. "v=spf1 -all"The domain sends no mail at all. "v=spf1 +all"The domain owner thinks that SPF is useless and/or doesn't care.0x2: SOA記錄
任何DNS系統(tǒng)返回第一個域名記錄就是SOA(Start of Authority)
在域名配置中,SOA記錄格式如下 IN SOA nameserver.place.dom. postmaster.place.dom. (1 ; serial number 3600 ; refresh [1h] 600 ; retry [10m] 86400 ; expire [1d] 3600 ) ; min TTL [1h]使用"dig"時的返回格式為 gddos.com. 300 IN SOA ns1cwy.name.com. support.name.com. 1 10800 3600 604800 300其中的每個部分含義如下 1. serial number(序列號): 是域名記錄的版本,每更改一次域名的任何DNS記錄,版本號就會自動加一,這時secondary dns就會知道DNS記錄發(fā)生更改,以便重新同步 2. refresh(刷新時間): 告訴secondary dns多久應該查詢primary dns,看看DNS記錄是否有更新。每次查詢時,secondary dns會向primary dns請求SOA記錄。如果記錄中的serial number跟secondary dns已有的序列號不一樣,則會向primary dns請求傳送域名的當前的DNS記錄 3. retry(重試時間): 如果想primary dns請求傳送域名當前的DNS記錄失敗后,間隔重試時間后再次重試請求。一般來說,retry小于refresh 4. expire(過期時間): 在過期時間之前,secondary dns會繼續(xù)請求傳送DNS記錄,并且在此時間里,secondary dns會根據(jù)已有的記錄應答相關(guān)的DNS查詢。如果到了過期時間后,secondary dns會停止應答該域名的DNS查詢 5. min TTL(最小TTL): 域名所有記錄的最小生存時間值。當用戶DNS查詢到記錄后,將存在緩存中,直到至少過了這個時間才將緩存刷新重新查詢 6. Negative caching TTL: 有的DNS服務(wù)器還會有Negative caching TTL,就是當用戶DNS查詢到無此域名記錄(NXDOMAIN)時,將把這個"沒有此域名的記錄"的聲明保存在緩存中的時間Relevant Link:
https://support.google.com/a/answer/2716800?hl=zh-Hans http://mxtoolbox.com/TXTLookup.aspx https://en.wikipedia.org/wiki/TXT_record http://www.openspf.org/SPF_Record_Syntax http://blog.csdn.net/qingchn/article/details/9719545總結(jié)
- 上一篇: C语言基础语法【1】
- 下一篇: Temporal action loca