更新时间:2024-03-09 02:49
中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。
中间人攻击(Man-in-the-Middle Attack, MITM)是一种由来已久的网络入侵手段,并且当今仍然有着广泛的发展空间,如SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击。简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。
随着计算机通信网技术的不断发展,MITM攻击也越来越多样化。最初,攻击者只要将网卡设为混杂模式,伪装成代理服务器监听特定的流量就可以实现攻击,这是因为很多通信协议都是以明文来进行传输的,如HTTP、FTP、Telnet等。后来,随着交换机代替集线器,简单的嗅探攻击已经不能成功,必须先进行ARP欺骗才行。如今,越来越多的服务商(网上银行,邮箱登陆)开始采用加密通信,SSL(Secure Sockets Layer 安全套接层)是一种广泛使用的技术,HTTPS、FTPS等都是建立在其基础上的。
中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)中间人攻击很早就成为了黑客常用的一种古老的攻击手段,并且一直到如今还具有极大的扩展空间。在网络安全方面,MITM攻击的使用是很广泛的,曾经猖獗一时的SMB会话劫持、DNS欺骗等技术都是典型的MITM攻击手段。在黑客技术越来越多的运用于以获取经济利益为目标的情况下时,MITM攻击成为对网银、网游、网上交易等最有威胁并且最具破坏性的一种攻击方式。
当主机A、和主机B通信时,都由主机C来为其“转发”。
当A、B通信时,C不主动去为其“转发”,只是把他们的传输的数据备份,以获取用户网络的活动,包括账户、密码等敏感信息,这是被动攻击也是非常难被发现的。
实施中间人攻击时,攻击者常考虑的方式是ARP欺骗或DNS欺骗等,将会话双方的通讯流暗中改变,而这种改变对于会话双方来说是完全透明的。以常见的DNS欺骗为例,目标将其DNS请求发送到攻击者这里,然后攻击者伪造DNS响应,将正确的IP地址替换为其他IP,之后你就登陆了这个攻击者指定的IP,而攻击者早就在这个IP中安排好了一个伪造的网站如某银行网站,从而骗取用户输入他们想得到的信息,如银行账号及密码等,这可以看作一种网络钓鱼攻击的一种方式。对于个人用户来说,要防范DNS劫持应该注意不点击不明的连接、不去来历不明的网站、不要在小网站进行网上交易,最重要的一点是记清你想去网站的域名,当然,你还可以把你常去的一些涉及到机密信息提交的网站的IP地址记下来,需要时直接输入IP地址登录。
要防范MITM攻击,可以将一些机密信息进行加密后再传输,这样即使被“中间人”截取也难以破解,另外,有一些认证方式可以检测到MITM攻击。比如设备或IP异常检测:如果用户以前从未使用某个设备或IP访问系统,则系统会采取措施。还有设备或IP频率检测:如果单一的设备或IP同时访问大量的用户账号,系统也会采取措施。更有效防范MITM攻击的方法是进行带外认证,具体过程是:系统进行实时的自动电话回叫,将二次PIN码发送至SMS(短信网关),短信网关再转发给用户,用户收到后,再将二次PIN码发送到短信网关,以确认是否是真的用户。带外认证提供了多种不同的认证方式及认证渠道,它的好处是:所有的认证过程都不会被MITM攻击者接触到。例如MITM是通过中间的假网站来截获敏感信息的,相关的“带外认证”就是指通过电话认证或短信认证等方式确认用户的真实性,而MITM攻击者却不能得到任何信息。当然,这种方式麻烦些。
DNS欺骗(DNSSpoofing),就是其中的一种惯用手法。攻击者通过入侵DNS服务器、控制路由器等方法把受害者要访问的目标机器域名对应的IP解析为攻击者所控制的机器,这样受害者原本要发送给目标机器的数据就发到了攻击者的机器上,这时攻击者就可以监听甚至修改数据,从而收集到大量的信息。如果攻击者只是想监听双方会话的数据,他会转发所有的数据到真正的目标机器上,让目标机器进行处理,再把处理结果发回到原来的受害者机器;如果攻击者要进行彻底的破坏,他会伪装目标机器返回数据,这样受害者接收处理的就不再是原来期望的数据,而是攻击者所期望的了。例如让DNS服务器解析银行网站的IP为自己机器IP,同时在自己机器上伪造银行登录页面,那么受害者的真实账号和密码就暴露给入侵者了。
如此说来,这种攻击理应是最强大最危险的,然而实际上它却很少派上大用场,为什么,因为DNS欺骗的攻击模型太理想了。在实际生活中,大部分用户的DNS解析请求均是通过自己的ISP服务器进行的,换句话说,就是系统在连接网络时会获取到ISP服务器提供的DNS服务器地址,所有解析请求都是直接发往这个DNS服务器的,攻击者根本无处入手,除非他能入侵更改ISP服务器上DNS服务的解析指向。所以这种手法在广域网上成功的几率不大。
当然,这种攻击的成功率也有例外存在,例如一个ISP服务器上存在Bind漏洞,攻击者就能通过Bind漏洞进入服务器更改掉DNS解析指向,甚至取得最高权限;另一种方法是入侵路由设备,修改里面的DNS服务器地址为自己控制的机器地址,这种方法只能在用户机器自身是通过路由器返回域名解析的情况下才能成功,多见于一些使用小区宽带连接Internet的用户,因为这种用户机器的DNS地址通常必须指向小区宽带内部的某台服务器地址或者交给路由进行转向,这时候只要攻击者入侵了路由或者那台关系到所有人的服务器修改掉DNS记录,整个小区用户的网络都完了。当然,攻击者不能把全世界网站都伪造到他硬盘上,他只需要改几个重要商务站点的指向即可,这样便可导致用户访问某些商务站点时被转向到攻击者的机器去。但是,这种攻击手法同时对攻击者自身也是一种伤害:如果小区内有许多用户都访问这些商务站点,则大量数据请求会疯狂消耗攻击者的机器资源,攻击者非但不能实时处理数据,更是面临着机器瘫痪和暴露自己的双重危险。
会话劫持”(SessionHijack)是一种结合了嗅探以及欺骗技术在内的攻击手段。广义上说,会话劫持就是在一次正常的通信过程中,攻击者作为第三方参与到其中,或者是在数据里加入其他信息,甚至将双方的通信模式暗中改变,即从直接联系变成有攻击者参与的联系。简单地说,就是攻击者把自己插入到受害者和目标机器之间,并设法让受害者和目标机器之间的数据通道变为受害者和目标机器之间存在一个看起来像“中转站”的代理机器(攻击者的机器)的数据通道,从而干涉两台机器之间的数据传输,例如监听敏感数据、替换数据等。由于攻击者已经介入其中,他能轻易知道双方传输的数据内容,还能根据自己的意愿去左右它。这个“中转站”可以是逻辑上的,也可以是物理上的,关键在于它能否获取到通信双方的数据。
典型的会话劫持是利用TCP/IP的工作原理来设计攻击的。在谈TCP/IP会话劫持前先解释一下TCP/IP用于确认数据传输的判断机制。许多人一定都有过这样的疑问:TCP/IP是使用点对点(PointtoPoint)连接进行数据传输的,但是它是如何知道上一条数据和下一条数据存在的联系的呢。如果发送数据后不慎掉线,恰好另一个人接着IP地址连接到了Internet,那他会不会收到服务器返回数据。其实只要看过TCP/IP协议的书籍就会明白,TCP协议采用了两种条件来确认每条已经建立连接的TCP通道,第一个是基础连接确认,即TCP连接中的四大必备条件:源IP、源TCP端口、目标IP、目标TCP端口;第二个条件是“序号标识”(Sequencenumbers,SEQ),它们是成对出现的,分为“Sequence”(SEQ,序号字段)和“AcknowledgementSequence”(ACKSEQ,确认序号字段),TCP每次建立一个连接时,会给双方指定这样一条规则:序号字段指出了本报文中传送的数据在发送主机所要传送的整个数据流中的顺序号,而确认序号字段指出了发送本报文的主机希望接收的对方主机中下一个八位组的顺序号。(这里可能比较难理解,可以举个不专业的例子解释:流水线上的工人被规定好了每人负责安装8个不同的零件,则每次传输到他们手上的都应该是只留下给他们安装的8个零件位置,这就是序号字段;而下一个工人则被规定在前一个工人的基础上安装另一个部分的8个零件,这就是确认序号字段,如果这个工人发现传到自己手上的产品多了或少了零件,则说明前一个工人出错,这个产品就被从流水线提取出来返工,这就是TCP对序号的严密审查和丢弃制度)。TCP如此谨慎,就是为了避免出现前面提到的假设,虽然这种假设发生的几率很小(需要满足TCP的基础连接确认条件),但是它总有机会发生的。然而不幸的是,这对序号是可以预测的,因为TCP必须遵从以下守则:一台主机即将发出的报文中的SEQ值应等于它所刚收到的报文中的ACKSEQ值,而它所要发送报文中的ACKSEQ值应为它所收到报文中的SEQ值加上该报文中所发送的TCP数据的长度,即两者存在“本次发送的SEQ=上次收到的ACKSEQ;本次发送的ACKSEQ=上次收到的SEQ+本次发送的TCP数据长度”的联系。知道这个规律后,攻击者就不难发起“中间人攻击”了,他只需要设法监听到受害者TCP连接中的第一个条件(源IP、源TCP端口、目标IP、目标TCP端口),就可以得知其中一台主机对将要收到的下一个TCP报文段中SEQ和ACKSEQ值的要求,这样攻击者就能在原来的合法主机收到另一台合法主机发送的TCP报文前根据所截获的信息向该主机发出一个符合条件二(序号标识)的TCP报文,如果该主机先收到攻击报文,就会受到欺骗而把合法的TCP会话建立在攻击主机与被攻击主机之间,而且攻击报文会让被攻击主机对下一次要收到的TCP报文中的确认序号值的要求发生变化,最终使另一台合法的主机向被攻击主机发出的报文被拒绝,这种模式被称为“主动劫持”。换句话说,就是其中一方合法主机被攻击者掠夺了连接的权限,而攻击者却成为了合法的连接方之一。这种会话劫持让攻击者避开了被攻击主机对访问者的身份验证和安全认证,从而使攻击者直接进入对被攻击主机的的访问状态,因而危害严重。例如,你刚向某站点发送完账户密码,就被攻击者抢先冒充你的TCP连接上了,那你的损失可就难预料了。不过,会话劫持对网络环境的一点要求可以让大家松口气,它必须在使用MAC寻址的网络环境中才能发挥作用,必要时还要配合ARP协议欺骗,能同时满足这两个条件的只有局域网。而广域网不是靠MAC地址来查找计算机的,因此攻击者很难从现有的广域网结构里插入到某两台计算机之间。
不再可靠的代理服务器
代理服务器(ProxyServer)的存在已经是很长久的事实了,而且由最初的几个基于TCP/IP协议的代理软件如HTTP、SMTP、POP3和FTP等发展到SSL、SOCK4/5以及其他未知的代理类型,可谓给一些特殊用途者提供了极大的方便。例如,通过代理跨过某些服务器的IP屏蔽,从而浏览到本来不能看到的信息;或者害怕自己IP暴露被对方入侵而寻找层层代理把自己包裹起来;还有些是因为系统不支持Internet共享而被迫采用代理软件来让内部网络的计算机能正常连接Internet……此外还有许多原因,让各种代理服务器经久不衰。
代理服务器相当于一个透明的数据通道,它根据客户发来的“要求连接某计算机”的请求数据,进而用自己本身作为原客户机器去连接目标计算机,在目标计算机返回数据后,再发送给原客户,这时目标计算机获取到的是代理服务器的IP,而不是原客户IP,从而实现突破IP屏蔽或者让对方无法获取你的真实IP。
简单举个HTTP代理服务器工作的原理:IE发送一个包含目标URL的HTTP请求,代理服务器接收并析出HTTP报文里的目标URL和相关参数,然后把这个URL作为一次标准的HTTP连接过程与目标网站连接,获取目标网站返回的数据后缓冲到代理服务器的硬盘上,再把这些数据返回给客户端。
请求连接目标URL------>连接目标服务器------->
客户端-------------------------代理服务器------------------------目标服务器
<-----返回数据----(缓冲)<-------------返回数据
其它协议的代理工作模式也都差不多,代理服务器充当了一个数据转向的工作站,相当于一个专门负责数据转发的“勤劳工人”。
代理服务器的工作模式,正是典型的“中间人攻击”模型。代理服务器在其中充当了一个“中间人”的角色,通讯双方计算机的数据都要通过它。因此,“代理服务器进行的‘中间人攻击’”逐步成为现实,相对于其他“中间人攻击”方法,这种利用代理服务器暗渡陈仓的做法简直天衣无缝,攻击者可以自己写一个带有数据记录功能的代理服务程序,放到任意一台稳定的肉鸡甚至直接在自己机器上,然后通过一些社会工程学手段让受害者使用这个做了手脚的“代理服务器”,便可守株待兔了。这种方法最让人不设防,因为它利用的是人们对代理的无条件信任和贪便宜的想法,使得一个又一个“兔子”自动撞了上来,在享受这顿似乎美味的“胡萝卜”的同时却不知道安全正在逐渐远离自己。
如果制作这个代理服务器的攻击者仅限于窥探数据,那么受害者的损失可能还能估量,但是如果攻击者在目标服务器返回的数据里加入一个带有木马程序的数据呢。例如在HTTP代理返回的HTML报文里加入一个MIME攻击漏洞代码,而受害者的计算机恰好没有打相应补丁,那么由此带来的损失就难以估量了,而且计算机技术不高的受害者也难以查出木马究竟是从哪里来的,因为很少有人怀疑代理服务器自身会有问题。
中间人攻击示意图
假设爱丽丝(Alice)希望与鲍伯(Bob)通信。同时,马洛里(Mallory)希望拦截窃会话以进行窃听并可能在某些时候传送给鲍伯一个虚假的消息。
首先,爱丽丝会向鲍勃索取他的公钥。如果Bob将他的公钥发送给Alice,并且此时马洛里能够拦截到这个公钥,就可以实施中间人攻击。马洛里发送给爱丽丝一个伪造的消息,声称自己是鲍伯,并且附上了马洛里自己的公钥(而不是鲍伯的)。
爱丽丝收到公钥后相信这个公钥是鲍伯的,于是爱丽丝将她的消息用马洛里的公钥(爱丽丝以为是鲍伯的)加密,并将加密后的消息回给鲍伯。马洛里再次截获爱丽丝回给鲍伯的消息,并使用马洛里自己的私钥对消息进行解密,如果马洛里愿意,她也可以对消息进行修改,然后马洛里使用鲍伯原先发给爱丽丝的公钥对消息再次加密。当鲍伯收到新加密后的消息时,他会相信这是从爱丽丝那里发来的消息。
1.爱丽丝发送给鲍伯一条消息,却被马洛里截获:
爱丽丝“嗨,鲍勃,我是爱丽丝。给我你的公钥”-->马洛里鲍勃
2.马洛里将这条截获的消息转送给鲍伯;此时鲍伯并无法分辨这条消息是否从真的爱丽丝那里发来的:
爱丽丝马洛里“嗨,鲍勃,我是爱丽丝。给我你的公钥”-->鲍伯
3.鲍伯回应爱丽丝的消息,并附上了他的公钥:
爱丽丝马洛里<--[鲍伯的公钥]--鲍伯
4.马洛里用自己的公钥替换了消息中鲍伯的公钥,并将消息转发给爱丽丝,声称这是鲍伯的公钥:
爱丽丝<--[马洛里的公钥]--马洛里鲍勃
5.爱丽丝用她以为是鲍伯的公钥加密了她的消息,以为只有鲍伯才能读到它:
爱丽丝“我们在公共汽车站见面!”--[使用马洛里的公钥加密]-->马洛里鲍勃
6.然而,由于这个消息实际上是用马洛里的公钥加密的,所以马洛里可以解密它,阅读它,并在愿意的时候修改它。他使用鲍伯的公钥重新加密,并将重新加密后的消息转发给鲍伯:
爱丽丝马洛里“在家等我!”--[使用鲍伯的公钥加密]-->鲍伯
7.鲍勃认为,这条消息是经由安全的传输通道从爱丽丝那里传来的。
这个例子显示了爱丽丝和鲍伯需要某种方法来确定他们是真正拿到了属于对方的公钥,而不是拿到来自攻击者的公钥。否则,这类攻击一般都是可行的,在原理上,可以针对任何使用公钥——密钥技术的通讯消息发起攻击。幸运的是,有各种不同的技术可以帮助抵御MITM攻击。
攻防为一家,有攻就有防,只要措施正确,MITM攻击是可以预防的。对于DNS欺骗,要记得检查本机的HOSTS文件,以免被攻击者加了恶意站点进去;其次要确认自己使用的DNS服务器是ISP提供的,因为当前ISP服务器的安全工作还是做得比较好的,一般水平的攻击者无法成功进入;如果是依靠网关设备自带的DNS解析来连接Internet的,就要拜托管理员定期检查网关设备是否遭受入侵。
至于局域网内各种各样的会话劫持(局域网内的代理除外),因为它们都要结合嗅探以及欺骗技术在内的攻击手段,必须依靠ARP和MAC做基础,所以网管应该使用交换式网络(通过交换机传输)代替共享式网络(通过集线器传输),这可以降低被窃听的机率,当然这样并不能根除会话劫持,还必须使用静态ARP、捆绑MAC+IP等方法来限制欺骗,以及采用认证方式的连接等。
但是对于“代理中间人攻击”而言,以上方法就难以见效了,因为代理服务器本来就是一个“中间人”角色,攻击者不需要进行任何欺骗就能让受害者自己连接上来,而且代理也不涉及MAC等因素,所以一般的防范措施都不起作用。除非你是要干坏事,或者IP被屏蔽,或者天生对网络有着恐惧,否则还是不要整天找一堆代理来隐藏自己了,没必要的。常在河边走,即使遇上做了手脚的代理也难察觉。
一个著名的非加密中间人攻击的例子是贝尔金无线路由器2003年的某一个版本所造成的。它会周期性地接管通过它的HTTP连接,阻止数据包到达目的地。并将它自己对请求的回应作为应答返回。而它发送的回应,则是在用户原本应该显示网页的地方,显示一个关于其他贝尔金产品的广告。在遭到了解技术详情的用户的强烈抗议后,这个功能被贝尔金从路由器后续版本的固件中删除。
另一个典型的非加密中间人攻击的例子是“图灵色情农场”。布赖恩·华纳说,这是垃圾邮件发送者用来绕过验证码的“可以想象的攻击”。垃圾邮件发送者设置了一个色情网站,而访问这个色情网站需要用户解决一些验证问题。这些验证问题实际上是其他网站的验证问题。这样就可以达到绕开网站验证发送垃圾邮件的目的。然而,Jeff Atwood指出,这次袭击仅仅是理论上的——没有任何证据指出垃圾邮件发送者曾经在2006年创建了图灵色情农场。然而,2007年10月有新闻报道称,垃圾邮件发送者确实创建了一个Windows游戏,当用户键入从雅虎收到的注册邮箱验证码后,程序将奖励用户色情图片。这将允许垃圾邮件发送者创建临时的免费电子邮件账户以发送垃圾邮件。