【参加讨论】c向a发送带有syn标志的数据段请求连接,只是信源ip改成了b。a向b回送syn+ack数据段,b已经无法响应,b的tcp层只是简单地丢弃a的回送数据段。这个时候c需要暂停一小会儿,让a有足够时间发送syn+ack,因为c看不到这个包。然后c再次伪装成b向a发送ack,此时发送的数据段带有z预测的a的isn+1。如果预测准确,连接建立,数据传送开始。
问题在于即使连接建立,a仍然会向b发送数据,而不是c,c仍然无法看到a发往b的数据段,c必须蒙着头按照协议标准假冒b向a发送命令,于是攻击完成。如果预测不准确,a将发送一个带有rst标志的数据段异常终止连接,c只有从头再来。随着不断地纠正预测的isn,攻击者最终会与目标主机建立一个会晤。通过这种方式,攻击者以合法用户的身份登录到目标主机而不需进一步的确认。如果反复试验使得目标主机能够接收对网络的root登录,那么就可以完全控制整个网络。
c(b) ---- syn ----> a b <---- syn+ack ---- a c(b) ---- ack ----> a c(b) ---- psh ----> a |
ip欺骗攻击利用了rpc服务器仅仅依赖于信源ip地址进行安全校验的特性,攻击最困难的地方在于预测a的isn。攻击难度比较大,但成功的可能性也很大。c必须精确地预见可能从a发往b的信息,以及a期待来自b的什么应答信息,这要求攻击者对协议本身相当熟悉。同时需要明白,这种攻击根本不可能在交互状态下完成,必须写程序完成。当然在准备阶段可以用netxray之类的工具进行协议分析。
虽然ip欺骗攻击有着相当难度,但我们应该清醒地意识到,这种攻击非常广泛,入侵往往由这里开始。预防这种攻击还是比较容易的。ip本身的缺陷造成的安全隐患目前是无法从根本上消除的。我们只能采取一些弥补措施来使其造成的危害减少到最小的程度。防御这种攻击的最理想的方法是:每一个连接局域网的网关或路由器在决定是否允许外部的ip数据包进入局域网之前,先对来自外部的ip数据包进行检验。如果该ip包的ip源地址是其要进入的局域网内的ip地址,该ip包就被网关或路由器拒绝,不允许进入该局域网。
这种方法虽然能够很好的解决问题,但是考虑到一些以太网卡接收它们自己发出的数据包,并且在实际应用中局域网与局域网之间也常常需要有相互的信任关系以共享资源,这种方案不具备较好的实际价值。另外一种防御这种攻击的较为理想的方法是当ip数据包出局域网时检验其ip源地址。即每一个连接局域网的网关或路由器在决定是否允许本局域网内部的ip数据包发出局域网之前,先对来自该ip数据包的ip源地址进行检验。
如果该ip包的ip源地址不是其所在局域网内部的ip地址,该ip包就被网关或路由器拒绝,不允许该包离开局域网。这样一来,攻击者至少需要使用其所在局域网内的ip地址才能通过连接该局域网的网关或路由器。如果攻击者要进行攻击,根据其发出的ip数据包的ip源地址就会很容易找到谁实施了攻击。因此建议每一个isp或局域网的网关路由器都对出去的ip数据包进行ip源地址的检验和过滤。如果每一个网关路由器都做到了这一点,ip源地址欺骗将基本上无法奏效。在当前并不是每一网关及路由器都能做到这一点的情况下,网络系统员只能将自己管理的网络至于尽可能严密的监视之下,以防备可能到来的攻击。