我爱电脑技术论坛's Archiver

麦迪 发表于 2008-5-16 00:16

DNS欺骗

定义: DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。
^O%@m1@ R,Y cB O!y8q!d+F5j9F
原理:如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS欺骗的基本原理。DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。
)k!I$O1\q`+fS
;f[,xq0^5o 现在的Internet上存在的DNS服务器有绝大多数都是用bind来架设的,使用的bind版本主要为bind 4.9.5+P1以前版本和bind 8.2.2-P5以前版本.这些bind有个共同的特点,就是BIND会缓存(Cache)所有已经查询过的结果,这个问题就引起了下面的几个问题的存在. B.v3q6x7r}!C0N y O
1>.DNS欺骗
dU3H)edu,xXV 在DNS的缓存还没有过期之前,如果在DNS的缓存中已经存在的记录,一旦有客户查询,DNS服务器将会直接返回缓存中的记录.
1@Y \2g)u%g{C E 下面我们来看一个例子: $Z!Wst} d dIAYW
一台运行着unix的Internet主机,并且提供rlogin服务,它的IP地址为123.45.67.89,它使用的DNS服务器(即/etc/resolv.conf中指向的DNS服务器)的IP地址为98.76.54.32,某个客户端(IP地址为38.222.74.2)试图连接到unix主机的rlogin端口,假设unix主机的/etc/hosts.equiv文件中使用的是dns名称来允许目标主机的访问,那么unix主机会向IP为98.76.54.32的DNS服务器发出一个PTR记录的查询:
m!@u f\ 123.45.67.89 -> 98.76.54.32 [Query] v:J6|,CqbB Ke
NQY: 1 NAN: 0 NNS: 0 NAD: 0 \|h8tN2f{F
QY: 2.74.222.38.in-addr.arpa PTR
MF7y)rFc~l IP为98.76.54.32的DNS服务器中没有这个反向查询域的信息,经过一番查询,这个DNS服务器找到38.222.74.2和38.222.74.10为74.222.38.in-addr.arpa.的权威DNS服务器,所以它会向38.222.74.2发出PTR查询: 8L0}9t T$['}"Y
BSf2W+B E
98.76.54.32 -> 38.222.74.2 [Query] "BI*k.Grn+U0F L ^
NQY: 1 NAN: 0 NNS: 0 NAD: 0 e.[1^.N)SR#^W
QY: 2.74.222.38.in-addr.arpa PTR 'n%}7l)f:jsB
请注意,38.222.74.2是我们的客户端IP,也就是说这台机子是完全掌握在我们手中的.我们可以更改它的DNS记录,让它返回我们所需要的结果:
{/z%T5Gh3j-d ?'PTX{'?*K _
38.222.74.2 -> 98.76.54.32 [Answer] r] M*I#] R*P C+t
NQY: 1 NAN: 2 NNS: 2 NAD: 2 B cXra0K
QY: 2.74.222.38.in-addr.arpa PTR 4vr D/pt5d J.e4c;y
AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com vi}PA,OZ0L
AN: trusted.host.com A 38.222.74.2
+@7Wc)j"P3Y]F ] NS: 74.222.38.in-addr.arpa NS ns.sventech.com )^mh.~a w
NS: 74.222.38.in-addr.arpa NS ns1.sventech.com z9tAY1D.mG
AD: ns.sventech.com A 38.222.74.2
|S2c2K~NW` AD: ns1.sventech.com A 38.222.74.10 Kx7]z YB
当98.76.54.32的DNS服务器收到这个应答后,会把结果转发给123.45.67.98,就是那台有rlogin服务的unix主机(也是我们的目标 :) ),并且98.76.54.32这台DNS服务器会把这次的查询结果缓存起来.
Ns] Z([%~ "C!Ofb&N{[|
这时unix主机就认为IP地址为38.222.74.2的主机名为trusted.host.com,然后unix主机查询本地的/etc/hosts.equiv文件,看这台主机是否被允许使用rlogin服务,很显然,我们的欺骗达到了.
Yad \:jsn/SU 在unix的环境中,有另外一种技术来防止这种欺骗的发生,就是查询PTR记录后,也查询PTR返回的主机名的A记录,然后比较两个IP地址是否相同:
i7V)ij#SZb 123.45.67.89 -> 98.76.54.32 [Query]
^#YJ:r`R&Kd NQY: 1 NAN: 0 NNS: 0 NAD: 0 gX1j4J-R"["tga
QY: trusted.host.com A
Oo#s4q3L.? 很不幸,在98.76.54.32的DNS服务器不会去查询这个记录,而会直接返回在查询2.74.222.38.in-addr.arpa时得到的并且存在缓存中的信息: /E(g3X6K w*]3H
98.76.54.32 -> 123.45.67.89 [Query] &ele1Yq k?!CkKX
NQY: 1 NAN: 1 NNS: 2 NAD: 2
jMN~R+x q1C QY: trusted.host.com A
1WF%` QW9qN Y AN: trusted.host.com A 38.222.74.2
,n |I P-G2W6FQF NS: 74.222.38.in-addr.arpa NS ns.sventech.com o7qL a!`\
NS: 74.222.38.in-addr.arpa NS ns1.sventech.com
?/_.}NuvxxGu1A:N] AD: ns.sventech.com A 38.222.74.2 $^*O3dQ K+B0z%r
AD: ns1.sventech.com A 38.222.74.10
7O7z$O r!Qu(^L 那么现在unix主机就认为38.222.74.2就是真正的trusted.host.com了,我们的目的达到了!
Q#a-k4S)wFt l 这种IP欺骗的条件是:你必须有一台Internet上的授权的DNS服务器,并且你能控制这台服务器,至少要能修改这台服务器的DNS记录,我们的欺骗才能进行.
HuQ.sMqw 0gvU^.xCid4F-j
2>.拒绝服务攻击 Denial of service VS o"K,{p;r:rNK
还是上面的例子,如果我们更改位于38.222.74.2的记录,然后对位于98.76.54.32的DNS服务器发出2.74.222.38.in-addr.arpa的查询,并使得查询结果如下:
l3VV;E]6A6Dd 因为74.222.38.in-addr.arpa完全由我们控制,所以我们能很方便的修改这些信息来实现我们的目的.
%v e1k8W(N.n F 38.222.74.2 -> 98.76.54.32 [Answer]
}f&M,k9NNL NQY: 1 NAN: 2 NNS: 2 NAD: 2
!s gPte({F'F4X QY: 2.74.222.38.in-addr.arpa PTR
6M%g2D!@.Q!fx AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com
5d1s#G wd5R$d%P AN: [url]www.company.com[/url] A 0.0.0.1
f kMwdf8| NS: 74.222.38.in-addr.arpa NS ns.sventech.com
h_%q v'v NS: 74.222.38.in-addr.arpa NS ns1.sventech.com
;lljG|IA6aL AD: ns.sventech.com A 38.222.74.2
;{rP`"ZV1n J AD: ns1.sventech.com A 38.222.74.10 j"e7Kpg.I E:B"^ nk
这样一来,使用98.76.54.32这台DNS服务器的用户就不能访问[url]www.company.com[/url]了,因为这个IP根本就不存在!
A/_`.e2x'OA 3>.偷取服务 Theft of services
9o*sJV GT[ 还是上面的例子,只是更改的查询结果如下:
+Q!H$?/g[(m.Si 38.222.74.2 -> 98.76.54.32 [Answer] F|nH6o3x&[e
NQY: 1 NAN: 3 NNS: 2 NAD: 2 (G]Z q0iy|K O
QY: 2.74.222.38.in-addr.arpa PTR
'CU0cN:f8Rr AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com
6j1|1d"VRAo&\ B AN: [url]www.company.com[/url] CNAME [url]www.competitor.com[/url]
fLI$j0~v Lps)P AN: company.com MX 0 mail.competitor.com |+~9YBv6F8U
NS: 74.222.38.in-addr.arpa NS ns.sventech.com
+xm8[3cX/Y p8RD NS: 74.222.38.in-addr.arpa NS ns1.sventech.com Ml ulE3Q
AD: ns.sventech.com A 38.222.74.2
L/w1z$bi*a&l AD: ns1.sventech.com A 38.222.74.10
d"}4Zx @0I0ZE g
,y\yh+]m%BT*v2S 这样一来,一个本想访问[url]http://www.competitor.com[/url]的用户会被带到另外一个地方,甚至是敌对的公司的竹叶(想想把华为和北电联起来是什么样的感觉. :) ).并且发给company.com的邮件会被发送给mail.compertitor.com.(越来越觉得在网络上的日子不踏实! xxbin这样想).
'x'kF#r vb*qF 4>.限制 -X9R Z1c5Qq*s x
对这些攻击,也有一定的限制. }2W]u8C-Av_+r,SC$pb
首先,攻击者不能替换缓存中已经存在的记录.比如说,如果在98.76.54.32这个DNS服务器上已经有一条[url]www.company.com[/url]的CNAME记录,那么攻击者试图替换为[url]www.competitor.com[/url]将不会成功.然而,一些记录可以累加,比如A记录,如果在DNS的缓存中已经存在一条[url]www.company.com的A记录为1.2.3.4[/url],而攻击者却欺骗DNS服务器说[url]www.company.com的A记录为4.3.2.1[/url],那么[url]www.company.com[/url]将会有两个A记录,客户端查询时会随机返回其中一个.(呵呵,这不是loading balance么?) e [^O^?d*m h
其次,DNS服务器有个缓存刷新时间问题,如果[url]www.netbuddy.org[/url]的TTL为7200,那么DNS服务器仅仅会把[url]www.netbuddy.org[/url]的信息缓存7200秒或者说两个小时.如果攻击者放入一条TLL为604800的A记录,那么这条记录将会在缓存中保存一周时间,过了默认的两天后,这个DNS服务器就会到处"分发"攻击者假造的记录.
6fc*E'E;M&? 下面是常用的几种可以累加和不能累加的记录: @D4].\/f p'Tn @
A can add
z3rMCn~WPb NS can add IoP/?0YO)Z.vM
MX can add
Gh9ed_%M3gm7s PTR cannot add

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.