DNS安全淺議、域名A記錄(ANAME),MX記錄,CNAME記錄

相關學習資料

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:協議.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有關的安全風險
4. DNS記錄類型

?

1. DNS簡介?

DNS是指:域名系統(Domain Name System)。在Internet上域名與IP地址之間是一一對應的,域名雖然便于人們記憶,但機器之間只能互相認識IP地址,它們之間的轉換工作稱為域名解析,域名解析需要由專門的域名解析系統來完成,DNS就是進行域名解析的系統。

DNS協議運行在UDP協議之上,使用端口號53。在傳輸層TCP提供端到端可靠的服務,在UDP端提供盡力交付的服務。其控制端口作用于UDP端口53。

0x1: DNS記錄類型

DNS系統中,常見的資源記錄類型有:

1. 主機記錄(A記錄)
RFC 1035定義,A記錄是用于名稱解析的重要記錄,它將特定的主機名映射到對應主機的IP地址上。過A記錄,大家可以設置自己的不同域名轉到不同的IP上去,如:1) www.dns.la 轉到IP 116.255.202.12) web.dns.la 轉到IP 116.255.202.113) mail.dns.la 轉到IP 116.255.202.1112. 別名記錄(CNAME記錄)
RFC 1035定義,CNAME記錄用于將某個別名指向到某個A記錄上,這樣就不需要再為某個新名字另外創建一條新的A記錄。對于CNAME的原理要注意和URL轉發進行區分:1) url轉發可以轉發到某一個目錄下,甚至某一個文件上2) 而cname是不可以,這就是url轉發和cname的主要區別所在3. MX記錄(Mail Exchange)
郵件交換記錄,用戶可以將該域名下的郵件服務器指向到自己的mail server上,然后即可自行操作控制所有的郵箱設置。要注意的是郵箱DNS解析和HTTP DNS解析是獨立的,如果你設置A記錄
是指向123.
12.123.123,而MX記錄你設置是指向222.22.222.222,那么你的DNS服務器接收到別人的郵件路 由請求時就將會將它的請求解釋到222.22.222.222上去!而別人訪問你的網頁
的時候仍然是訪問123.12.123.1234. NS(Name Server) 域名服務器記錄,用來指定該域名由哪個DNS服務器來進行解析,可以把一個域名的不同二級域名分別指向到不同的DNS系統來解析5. IPv6主機語錄(AAAA記錄) RFC 3596定義,與A記錄對應,用于將特定的主機名映射到一個主機的IPv6地址。6. 服務位置記錄(SRV記錄) RFC 2782定義,用于定義提供特定服務的服務器的位置,如主機(hostname),端口(port number)等。7. NAPTR記錄 RFC 3403定義,它提供了正則表達式方式去映射一個域名。NAPTR記錄非常著名的一個應用是用于ENUM查詢。

0x2: 域名系統分類

DNS的名字空間和Unix的文件系統相似,也具有層次結構。每個結點有 一個至多63個字符長的標識。這顆樹的樹根是沒有任何標識的特殊結點(即全球根DNS)。命名標識中一律不區分大寫和小寫。命名樹上任何一個結點的域名就 是將從該結點到最高層的域名串連起來,中間使用一個點"."分隔這些域名,域名樹中的每個結點必須有一個唯一的域名,但域名樹中的不同結點可使用相同的標 識。
以點"."結尾的域名稱為絕對域名或完全合格的域名FQDN(Full Qualified Domain Name),例如sun.tuc.noao.edu. ?
如果一個域名不以點結尾,則認為該域名是不完全的。

DNS根域名服務器
全球共有13臺根"邏輯域名服務器"。這13臺邏輯根域名服務器中名字分別為"A""M",真實的根服務器在2014年1月25日的數據為386臺,分布于全球各大洲。
之所以是13臺,這要從DNS協議(域名解析協議)說起。DNS協議使用了端口上的UDP和TCP協議,UDP通常用于查詢和響應,TCP用于主服務器和從服務器之間的傳送。由于在所有UDP查詢和響應中
能保證正常工作的最大長度是512字節,512字節限制了根服務器的數量和名字。要讓所有的根服務器數據能包含在一個512字節的UDP包中,根服務器只能限制在13個,而且每個服務器要使用字
母表中的單個字母命名,這也是根服務器是從A
~M命名的原因。 在根域名服務器中雖然沒有每個域名的具體信息,但儲存了負責每個域(如COM、NET、ORG等)的解析的域名服務器的地址信息,如同通過北京電信你問不到廣州市某單位的電話號碼,但是北京電
信可以告訴你去查020114。世界上所有互聯網訪問者的瀏覽器的將域名轉化為IP地址的請求(瀏覽器必須知道數字化的IP地址才能訪問網站)理論上都要經過根服務器的指引后去該域名的權威域
名服務器(authoritative name server),當然現實中提供接入服務的ISP的
"緩存域名服務器"上可能已經有了這個對應關系(域名到IP地址)的緩存。 1. 頂級域名 頂級域名被分為三個部分1) arpa是一個用作地址到名字轉換的特殊域(即反過來用IP來解析域名)2) 7個3字符長的普通域。有些書也將這些域稱為組織域2.1) com: 商業組織2.2) edu: 教育機構2.3) gov: 政府部門2.4) int: 國際組織2.5) mil: 軍事網點2.6) net: 網絡2.7) org: 其他組織3) 所有2字符長的域均是基于ISO3166中定義的國家代碼,這些域被稱為國家域,或地理域。,例如3.1) hk3.2) us 2. 二級域名 一個獨立管理的DNS子樹稱為一個區域(zone)。一個常見的區域是一個二級域,如noao.edu。許多二級域將它們的區域劃分成更小的區域。例如,大學可能根據不同的系來劃分區域,公司可能
根據不同的部門來劃分區域。

0x3: DNS協議格式

1. 標識
一個4字節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(服務器狀態請求)3) A 1bit標志,表示"授權回答(authoritative answer)"。該名字服務器是授權于該域的。4) TC1bit字段,表示"可截斷的(truncated)"。使用UDP時,它表示當應答的總長度超過512字節時,只返回前512個字節5) RD1bit字段,表示"期望遞歸(recursion desired)"。該比特能在一個查詢中設置,并在響應中返回。這個標志告訴名字服務器必須處理這個查詢,也稱為一個遞歸查詢。如果該位為0,且
被請求的名字服務器沒有一個授權回答,它就返回一個能解答該查詢的其他名字服務器列表,這稱為迭代查詢。
6) RA1bit字段,表示"可用遞歸"。如果名字服務器支持遞歸查詢,則在響應中將該比特設置為1。大多數名字服務器都提供遞歸查詢,除了某些根服務器7) 隨后3bit必須為08) rcode4bit的返回碼字段。通常的值為:8.1) 0(沒有差錯)8.2) 3(名字差錯)名字差錯只有從一個授權名字服務器上返回,它表示在查詢中制定的域名不存在。 3. 問題數 查詢問題的數量,對于請求報文,通常為1 4. 資源記錄數 返回的資源記錄數 5. 授權資源記錄數 返回的授權資源記錄數 6. 額外資源記錄數 返回的額外資源記錄數 7. 查詢問題 注意,一個DNS數據報中可能會有多個查詢問題,這也是為什么在之前的"問題數"等字段會有大于1數字的原因。每個"查詢問題格式"都相同,如下:1) 查詢名查詢名是要查找的名字,它是一個或多個字符串的序列。每個字符串以首字節的計數值來說明隨后標識符的字節長度,每個名字以最后字節為0結束,字符串之間以"."分隔,例如
www.baidu.com中www、baidu、com都是字符串,長度為0的字符串是根標識符。計數字節的值必須是0~63的數,因為單個字符串的最大長度僅為63 2) 查詢類型2.1) A: IP地址2.2) NS: 名字服務器2.3) CNAME: 規范名稱2.4) PTR: 指針記錄,即IP到域名的反向查詢2.5) HINFO: 主機信息2.6) MX: 郵件交換記錄2.7) AXFR: 區域傳送請求 2.8) */ANY: 對所有記錄的請求 最常用的查詢類型是A類型,表示期望獲得查詢名的IP地址。一個PTR查詢則請求獲得一個IP地址對應的域名。這是一個指針查詢3) 查詢類查詢類通常是1,指互聯網地址(某些站點也支持其他非IP地址) 8. 回答(只在DNS響應數據報中存在)1) 域名客戶端請求解析的域名,和請求報文中的問題中的查詢名一樣 2) 類型2.1) A: IP地址2.2) NS: 名字服務器2.3) CNAME: 規范名稱2.4) PTR: 指針記錄,即IP到域名的反向查詢2.5) HINFO: 主機信息2.6) MX: 郵件交換記錄2.7) AXFR: 區域傳送請求 2.8) */ANY: 對所有記錄的請求 3) 類通常是1,指互聯網地址(某些站點也支持其他非IP地址)4) 生存時間客戶程序保留該資源記錄的秒數。資源記錄通常的生存時間值為2天。5) 資源數據長度資源數據的數量。該數據的格式依賴于類型字段的值5.1) 對于類型1(A記錄)資源數據是4字節的IP地址5.2) 對于類型CNAME資源數據是域名字符串長度 9. 授權(只在DNS響應數據報中存在) 10. 額外信息(只在DNS響應數據報中存在)

?

2. DNS查詢方式

0x1: 遞歸查詢和迭代查詢的區別

1.遞歸查詢: 
一般客戶機和首選DNS服務器(寬帶連接是設置的默認DNS)之間屬遞歸查詢,即當客戶機向DNS服務器發出請求后,若DNS服務器本身不能解析,則會向另外的DNS服務器發出查詢請求,得到最終結
果后轉交給客戶機
2.迭代查詢(反復查詢): 一般DNS服務器之間屬迭代查詢,如:若DNS2不能響應DNS1的請求,則它會將DNS3的IP給DNS2,以便其再向DNS3發出請求

下圖為一次完整的DNS查詢過程,包括客戶端和本地DNS的遞歸查詢、以及本地DNS和上機DNS之間的迭代查詢

1. 網絡客戶端準備訪問www.163.com這個域名,瀏覽器準備進行DNS解析以獲取對應的IP
2. 網絡客戶端將DNS解析請求發送到"本地DNS服務器"后,就進行等待狀態,因為對于網絡客戶端和本地DNS服務器來說它們是遞歸關系,本地DNS服務器最終一定會把結果返回給網絡客戶端
(IP、或者是不存在)
3. 本地DNS服務器接收到DNS解析請求后,開始和上機DNS服務之間進行迭代查詢1) 向全球根域名DNS服務器發送解析請求,根DNS根據請求中的頂級域名,返回該域名對應的頂級DNS服務器(.com)IP2) 本地DNS服務器接著繼續向".com"DNS服務器發送解析請求,".com"服務器查詢自己的DNS緩存,返回.163.com域名服務器,要求本地DNS繼續迭代查詢3) 本地DNS繼續向".163.com"進行請求,并得到解析IP: 1.1.1.1 4. 本地DNS服務器將最終的解析結果返回給網絡客戶端,完成一次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有關的安全風險

DNS是互聯網的一個基礎設施,針對DNS的安全風險大致有如下幾個:

1. 防火墻不會限制對DNS的訪問
這導致攻擊者可能會借助DNS通道進行數據庫帶外信道注入、或者DNS隱藏隧道等攻擊2.DNS可以泄漏內部的網絡拓樸結構
即DNS Zone Transfer攻擊 3.DNS的本身性能問題
安全的一個重要標志是可用性。對于DNS服務器而言這點尤其重要,在現實生活中經常定義攻擊者入侵系統獲取數據為一個安全問題,但是對于DNS服務器來說,遭到了拒絕服務攻擊則是一件更嚴
重的問題。失去了DNS服務器的話,任何在internet網絡上的人將不能夠再使用域名找到你的服務器,不可想像讓普通的網民們使用202.
106.184.200來代替www.sina.com.cn使用。更嚴重的
是,沒有了DNS的服務,所有的郵件發送都將失敗,而你的內部網絡將由于解析域名的失敗而失去和外部網絡的聯系。 注冊了一個域名以后,可以最大為你的域名設置6個DNS服務器名。 例如,microsoft.com公司的就為自己設置了五個DNS服務器來解析自己的域名: 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 這樣,即使這三個中的兩個停止了工作,但是了,仍然可以有一個會對外提供服務,而對于廣大的用戶而言,當出現這種多個DNS服務器停止服務帶來的唯一的影響就是查詢域名的時候會延遲,因
為它需要一個一個的去查詢,直到找到最后的一個為止。而上面這一個步驟也是你應付惡意攻擊者對DNS服務器進行拒絕服務攻擊的一個保護手段。

0x1: DNS Zone Transfer

Zone Transfer漏洞可以被滲透測試人員用來進行內網信息搜集、拓樸獲取等目的,是內網橫向滲透、信息搜集的一個很重要的手段。

一個名字服務器(NS)負責一個或多個區域(zone)。一個區域的管理者必須為該區域提供一個主名字服務器(master)和至少一個輔助名字服務器(slave)。主、輔名字服務器必須是獨立和冗余的,以便當某個名字服務器發生故障時不會影響該區域的名字服務。
主、輔名字服務器的主要區別在于主名字服務器從磁盤文件中調入該區域的所有信息,而輔名字服務器則從主服務器調入所有信息。我們將輔名字服務器從主服務器調入信息稱為區域傳送(zone transfer)

了解了DNS Zone Transfer的基本概念之后,我們來一起學習一下dig、nslookup這2個命令,看看我們都能利用Zone Transfer獲得哪些信息

nslookup命令解釋

在win上,nslookup會根據ipconfig連接后的默認DNS去找到所要使用的local DNS server
在linux上,nslookup會根據/etc/resolv.conf的內容去找到所要使用的local DNS server

C:\Users\LittleHann>nslookup
默認服務器:  FJ-DNS.fz.fj.cn
Address:  218.85.157.99
> ?
命令:   (標識符以大寫表示,[] 表示可選)
1. NAME            
打印有關使用默認DNS服務器(系統默認的DNS服務器)的主機/域NAME的信息,例如www.baidu.com 
2. set OPTION     
設置選項,OPTION可選項如下,[no]代表默認關閉1) all: 打印選項、當前服務器和主機2) [no]debug: 打印調試信息3) [no]d2: 打印詳細的調試信息4) [no]defname: 將域名附加到每個查詢5) [no]recurse: 詢問查詢的遞歸應答6) [no]search: 使用域搜索列表7) [no]vc: 始終使用虛擬電路8) domain=NAME: 將默認域名設置為 NAME9) srchlist=N1[/N2/.../N6]: 將域設置為 N1,并將搜索列表設置為 N1、N2 等10) root=NAME: 將根服務器設置為 NAME11) retry=X: 將重試次數設置為 X12) timeout=X: 將初始超時間隔設置為 X 秒13) type=X: 設置查詢類型(如 A、AAAA、A+AAAA、ANY、CNAME、MX、NS、PTR、SOA 和 SRV)
set type=ptr
本來要由IP反查 domain name時, 在直接打IP就行了, 但如果已經下了type=any的話, 要由IP反查時就沒那么方便了, 此時IP 4個數字要倒著寫, 最后還要加上in-addr.arpa.
以查140.116.72.219 為例, 要輸入的就是219.72.116.140.in-addr.arpa
14) querytype=X: 與類型相同15) class=X: 設置查詢類(如IN(Internet)和ANY)16) [no]msxfr: 使用MS快速區域傳送17) ixfrver=X: 用于IXFR傳送請求的當前版本 3. server NAME 將默認服務器設置為NAME(例如8.8.8.8),同時對NAME進行解析
很多情況下,我們的DNS查詢并不會被發送到跟DNS服務器上,而是由DNS Cache服務器進行返回,為了獲得最新的數據,我們需要手動去修改"默認本地DNS"從而獲得最新的DNS數據
4. lserver NAME 將默認服務器設置為NAME,使用初始服務器 5. root 將當前默認服務器設置為根服務器 6. ls [opt] DOMAIN [> FILE] 列出DOMAIN中的地址(可選: 輸出到文件 FILE)
這個命令是要求name server將其負責的zone內容show出來, 這個動作相當于name server的整份記錄從server端傳回給nslookup這個程序, 這種傳回整個zone的動作叫作zone transfer
1) -a列出規范名稱和別名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)
  給你的公眾服務器提供清楚的統計信息
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)
  查詢的結果
25) +[no]authority (Control display of authority)
  告訴我們哪個DNS服務器給我們提供權威的答案
26) +[no]additional (Control display of additional)
  包含了列出的權威DNS的IP地址
27) +[no]stats (Control display of statistics)
  輸出包含了查詢的統計數據
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的權威DNS: dig yahoo.com NS +noall +answer4. 查詢上面所有的記錄: dig yahoo.com ANY +noall +answer5. 在現在這種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服務器 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數據傳輸 dig @server www.baidu.com AXFR13. 用dig查看zone數據的增量傳輸 dig @server www.baidu.com IXFR=N14. 用dig查看反向解析 dig -x 8.8.8.8 @server15. 查找一個域的授權dns服務器 dig www.baidu.com +nssearch

0x2: Anti-DNS Zone Transfer配置

正常情況下,在一個信任網域下,將DNS資料列出是沒有問題的(即正常的主從服務器的Zone Transfer),但是若是能由外界進行任意查詢,那將衍變為具有危險的行為,因此,對DNS服務器進行Zone Transfer安全配置是十分重要的。對于DNS的安全加固,大致可以從以下幾個方面入手:

1. 控制允許可以向DNS服務器提出查詢請求的主機:
allow-query { myAddresses; trusted; };
如果你沒有定義選項 allow-query ;那么Bind默認會允許所有的來訪者都可以查詢這個DNS服務器,相當于:
allow-query { any; };2. 控制允許可以進行迭代解析或查詢的主機列表:
allow-recursion { match-list; };
如果你沒有定義選項 allow-recursion ; 那么Bind默認會允許所有可以訪問DNS的來訪者都可以進行迭代查詢3. 定義可以與主DNS服務器進行數據交流的輔助DNS服務器的ip地址,即限制zone transfer的訪問
allow-transfer { match-list; };
允許這些match-list中的輔助DNS與主DNS服務器進行數據的交流與傳送。
例如:我的主DNS服務器192.168.68.128;輔助DNS服務器192.168.68.2,允許它們進行數據交流:
allow-transfer { 192.168.68.2; };:
如果你沒有定義選項 allow-transfer ;那么Bind默認會允許所有的輔助DNS服務器與主DNS服務器進行數據交流4. 定義主DNS服務器的對客戶的請求查詢失敗時的行為:
forwarders { match-list; };
forward first | only;
選項forwarders定義了當DNS服務器應答失敗時,就將客戶端的請求轉發到match-list中的其他服務器;
選項forward 定義DNS服務的轉發類型:first 是優先轉發上述定義的DNS服務器;only是只會轉發到上述定義的DNS服務器;
如果你沒有定義選項 forwarders的選項 ;那么Bind默認不做任何轉發動作。

?

4. DNS記錄類型

0x1: TXT記錄

TXT記錄是DNS記錄的一種類型,可向您網域外部的源提供文本信息。該文本可以是用戶可讀型文本或機讀型文本,并可用于多種用途
可以向您網域的DNS設置中添加TXT記錄以驗證網域所有權并實施多種電子郵件安全措施
TXT記錄可包含任何文本值,具體取決于它的用途(它由DNS管理員自己定制)。例如,Google使用TXT記錄來驗證您擁有希望用于我們企業服務的網域,其值為"google-site-verification=rXOxyZounnZasA8Z7oaD3c14JdjS9aKSWvsR1EbUSIQ"。之后,Google會查詢您的網域以確定該TXT記錄是否已生效。如果TXT記錄已生效,那么Google會知道管理員有權訪問該網域的DNS設置,那么管理員一定擁有該網域

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:

<owner> <class> <ttl> TXT "<attribute name>=<attribute value>"

Example:

name  ttl  class   rr     text
joe        IN      TXT    "Located in a black hole"

2. TXT記錄用途

1. 驗證網域所有權
2. 使用SPF向發件人授權
3. 使用DKIM添加電子郵件數字簽名
4. 使用DMARC阻止外發垃圾郵件
//按照spf格式在dns中增加一條txt類型的記錄,將提高該域名的信譽度,同時可以防止垃圾郵件偽造該域的發件人發送垃圾郵件

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系統返回第一個域名記錄就是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記錄發生更改,以便重新同步
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會繼續請求傳送DNS記錄,并且在此時間里,secondary dns會根據已有的記錄應答相關的DNS查詢。如果到了過期時間后,secondary dns會停止應答該域名的DNS查詢 
5. min TTL(最小TTL): 域名所有記錄的最小生存時間值。當用戶DNS查詢到記錄后,將存在緩存中,直到至少過了這個時間才將緩存刷新重新查詢 
6. Negative caching TTL: 有的DNS服務器還會有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

?

Copyright (c) 2014 LittleHann All rights reserved

?

轉載于:https://www.cnblogs.com/LittleHann/p/3828927.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376832.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376832.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376832.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ThinkInJava4讀書筆記之第一章對象入門

那句話怎么說來著&#xff0c;原句記不住了好像是出來混的遲早要還的。話說當初學校剛開Java課程&#xff0c;自己沒有好好學啊&#xff0c;后來直接做了jsp和servlet&#xff0c;然后學了SSH框架和Extjs、jQuery&#xff0c;接著是mybatis&#xff08;ibatis&#xff09;、fre…

C++多線程快速入門(三):生產者消費者模型與條件變量使用

互斥鎖完成 #include <iostream> #include <deque> #include <thread> #include <mutex>std::deque<int> q; std::mutex mtx;static void produce(int val) {while(val--) {std::unique_lock<std::mutex> guard(mtx);q.push_front(val);m…

【blade利刃出鞘】一起進入移動端webapp開發吧

前言 在移動浪潮襲來的時候&#xff0c;小釵有幸進入框架組做webapp框架開發&#xff0c;過程中遇到了移動端的各種坑&#xff0c;也產生了各種激情&#xff0c;就我們公司的發展歷程來說 第一階段&#xff1a;使用傳統方式開發移動站點&#xff0c;少量引入HTML5元素 第二階段…

題目理解。。

有時候一道大水題&#xff0c;因為英文描述可能有點復雜或者其它云云&#xff0c; 就比如那道PRO。。 別先被一道題嚇一跳&#xff0c;&#xff0c;&#xff0c; 英文描述看深入一點總歸會能解決的&#xff0c;盡可能多的考慮情況。大膽嘗試。轉載于:https://www.cnblogs.com/c…

C++多線程快速入門(四)shared_mutex以及讀寫鎖應用

在前面的三講中我們使用的mutex都是普通的std::mutex&#xff0c;這里介紹一下shared_mutex&#xff0c;版本為C17 std::shared_mutex的底層實現時操作系統提供的讀寫鎖&#xff0c;在讀多寫少的情況下&#xff0c;該shared_mutex比mutex更加高效。 它提供了常用的四種方法&am…

Tornado/Python 學習筆記(一)

1.源代碼下載及安裝&#xff1a;http://www.tornadoweb.org/en/stable/ 2.python中xmlrpc庫官方文檔&#xff1a;https://docs.python.org/3/library/xmlrpc.html?highlightxmlrpc 3.xml介紹與學習&#xff1a;http://www.w3school.com.cn/xml/xml_intro.asp XML 被設計為傳輸…

spring-aop-annotation

1。假設你已經配好依賴注入那一塊。此時的bean.xml為 <?xml version"1.0" encoding"UTF-8"?><beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:cont…

c++實現簡單線程池代碼

目錄完整代碼TaskPool.cppTaskPool.hmain.cpp完整代碼 TaskPool.cpp // // Created by LENOVO on 2021/10/25. //#include "TaskPool.h" #include <functional>std::mutex printMutex;TaskPool::TaskPool() : m_bRunning(false) {}TaskPool::~TaskPool() {re…

Android靜態圖片人臉識別的完整demo(附完整源碼)

Demo功能&#xff1a;利用android自帶的人臉識別進行識別&#xff0c;標記出眼睛和人臉位置。點擊按鍵后進行人臉識別&#xff0c;完畢后顯示到imageview上。 第一部分&#xff1a;布局文件activity_main.xml [html] view plaincopyprint?<RelativeLayout xmlns:android&qu…

圖論:最短路徑搜索--Dijkstra算法(c代碼實現)

最近因為辭職&#xff0c;有不少閑功夫&#xff0c;重溫下數據結構&#xff0c;順便練練手。今天說說最短路徑搜索算法中的Dijkstra原理和實現。 一&#xff1a;簡介 這個算法用于解決圖中單源最短路徑問題。所謂單源節點是指給定源節點&#xff0c;求圖中其它節點到此源節點的…

C++多線程快速入門(五)簡單線程池設計

目錄設計思路主線程運行邏輯task以及taskpool設計詳細流程講解完整代碼打印結果往期回顧設計思路 線程池實際上就是一組線程&#xff0c;當我們需要異步執行一些任務時&#xff0c;經常要通過OS頻繁創建和銷毀線程&#xff0c;不如直接創建一組在程序生命周期內不會退出的線程…

C--函數

函數:具有特定功能的代碼段,分為庫函數,自定義函數. 函數定義: 函數返回值類型 函數名(形式參數列表) { 代碼段; return 返回值; } 注意:每個函數返回值最多只有一個.return是一個函數結束的標志. 形式參數(形參):函數定義時使用的虛擬參數名,用以接收函數調用是傳遞過來的實際…

公式系統 - TradeBlazer公式基礎 - Bar數據

Bar數據 在介紹Bar數據之前&#xff0c;首先&#xff0c;我們需要討論一下TradeBlazer公式的計算方法&#xff0c;針對上面介紹的各種公式類型&#xff0c;包含公式應用&#xff0c;在公式進行計算時&#xff0c;都是建立在基本數據源(Bar數據)之上&#xff0c;我們這里所謂的B…

C++網絡編程快速入門(一):TCP網絡通信基本流程以及基礎函數使用

目錄流程概述服務器端代碼實現客戶端代碼實現函數和結構講解sockaddr_in和sockaddrsocket &#xff1a; 創建一個socket連接bind &#xff1a;綁定地址以及端口號問題流程概述 客戶端與服務器之間的網絡通信基本原理如下所示&#xff0c;復雜一點的架構可能會添加消息中間件。…

php 字符串處理

addcslashes — 為字符串里面的部分字符添加反斜線轉義字符addslashes — 用指定的方式對字符串里面的字符進行轉義bin2hex — 將二進制數據轉換成十六進制表示chop — rtrim() 的別名函數chr — 返回一個字符的ASCII碼chunk_split — 按一定的字符長度將字符串分割成小塊conve…

使用前端框架Foundation 4來幫助簡化響應式設計開發

日期&#xff1a;2013-3-12 來源&#xff1a;GBin1.com Foundation是一套使用廣泛的前端開發套件&#xff0c;可以幫助你快速的網站。最近ZURB發布了一個新版本的Foundation 4前端框架&#xff0c;能夠有效的幫助你快速的開發響應式的網站。 和另外一個套知名的前端框架BootSt…

C++網絡編程快速入門(二):Linux下使用select演示簡單服務端程序

目錄select參數解釋select使用規范select使用缺點基本流程實例代碼通信效果演示往期文章select參數解釋 extern int select (int __nfds, fd_set *__restrict __readfds,fd_set *__restrict __writefds,fd_set *__restrict __exceptfds,struct timeval *__restrict __timeout)…

Android轉載一:Android文件命名規范

REF&#xff1a;http://blog.csdn.net/gulianchao/article/details/23391651 (一) Layout命名 1&#xff0e;contentview命名&#xff1a;activity_功能模塊.xml 例如&#xff1a;activity_main.xml、activity_more.xml 2&#xff0e;Dialog命名&#xff1a;dialog_描述.xml …

[轉]XBRL應用軟件分類

1) 分類標準編輯軟件(Taxonomy editor)&#xff1a; 分類標準是XBRL技術的應用基礎&#xff0c;每一個采用XBRL技術的國家都必須先按各國的GAAP制訂XBRL分類標準&#xff0c;上市公司才能據以編制實例文件。由于一套XBRL 2.0或2.1版分類標準必須包含至少一份XML Schema文…

C++網絡編程快速入門(三):阻塞與非阻塞式調用網絡通信函數

目錄阻塞與非阻塞定義send與recvconnect一些問題為什么要將監聽socket設置為非阻塞阻塞與非阻塞定義 阻塞模式指的是當前某個函數執行效果未達預期&#xff0c;該函數會阻塞當前的執行線程&#xff0c;程序執行流在超時時間到達或者執行成功后恢復原有流程。非阻塞模式相反&am…