IP欺骗是适用于TCP/IP环境的一种复杂的技术攻击,它由若干部分组成。目前,在In ternet领域中,它成为黑客攻击时采用的一种重要手段,因此有必要充分了解它的工作原理和防范措施,以充分保护自己的合法权益。
实际上,IP 欺骗不是进攻的结果,而是进攻的手段。进攻实际上是信任关系的破坏。然而,在本文中,IP 欺骗将被看作是涉及到的整个攻击,对于利用IP欺骗建立起来的虚假信任关系进行破坏的其它行为不作为我们讨论的内容。本文将详尽地解释攻击的全过程,包括有关的操作系统与网络信息。
背景知识
有关主机定义
A:目标主机
B:对于A来说,可信任的主机
X:不能到达的主机
Z:进攻主机
1(2):主机1化装成主机2
图示符号定义
本文中有若干图示,它们将类比以下示例进行解释:
时间序列
主机a
控制
主机b
1
A
--SYN -->
B
时间序列:时间流逝的单位,可以无穷细化。一般认为是很小的单位,表示事件发生的先后顺序。
主机a:参与一次TCP 对话的机器。
控制:显示有关TCP控制字段头部的控制字符和该字段的流动方向
主机b:参与一次TCP 对话的机器。
这个图示中,在第一参考时间点上主机A发送TCP 字段给主机B,控制字段中的SYN控制位将作为该TCP字段的主要信息。除非特别说明,我们一般不关心TCP 字段中的数据部分。
信任关系
在Unix
领域中,信任关系能够很容易得到。假如您在主机A和B上各有一个帐户,您在使用当中发现,在主机A上使用时需要输入在A上的相应帐户,在主机B上使用时必须输入在B上的帐户,主机A和B把您当作两个互不相关的用户,显然有些不便。为了减少这种不便,您可以在主机A和主机B中建立起两个帐?У南嗷バ湃喂叵怠T谥骰鶤和主机B上您的home 目录中创建.rhosts 文件。从主机A上,在您的home目录中输入'echo " B username " > ~/.rhosts' ;从主机B上,在您的home目录中输入'echo " A username " >~/.rhosts '
。至此,您能毫无阻碍地使用任何以r*开头的远程调用命令,如:rlogin,rcall,rsh等,而无口令验证的烦恼。这些命令将允许以地址为基础的验证,或者允许或者拒绝以IP地址为基础的存取服务。
Rlogin
Rlogin 是一个简单的客户/服务器程序,它利用TCP传输。Rlogin允许用户从一台主机登录到另一台主机上,并且,如果目标主机信任它,Rlogin 将允许在不应答口令的情况下使用目标主机上的资源。安全验证完全是基于源主机的IP 地址。因此,根据以上所举的例子,我们能利用Rlogin
来从B远程登录到A,而且不会被提示输入口令。
Internet协议(IP)
IP 是TCP/IP协议组中非面向连接、非可靠传输的网络协议。它由两个32bit的头字段提供地址信息。IP数据包占TCP/IP协议网络流量中的很大部分,可以说是最为繁忙的部分。IP
的工作在于在网络环境中发送数据包,它不提供保证可靠性的任何机制,对于可靠性的要求,由上层协议来完成。IP只是发送数据包,并且保证它的完整性。如果不能收到完整的IP数据包,IP会向源地址发送一个ICMP 错误信息,希望重新处理。然而这个包也可能丢失(ICMP
是网际控制消息协议,Internet Control Message
Protocol,它是用于根据网络条件保证数据传送的协议,主要是向IP层或其它层发送不同的错误信息)。由于IP是非面向连接的,所以不保持任何连接状态的信息。每个IP数据包被松散地发送出去,而不关心前一个和后一个数据包的情况。由此我们不难看出,可以对IP堆栈进行修改,在源地址和?康牡刂分蟹湃肴我饴阋蟮腎P地址,也就是说,提供虚假的IP地址。
传输控制协议(TCP)
TCP
是在TCP/IP协议组中面向连接、提供可靠传输的协议。面向连接意味着参与对话的两个主机必须首先建立起连接,然后才能进行数据交换。可靠性是由数据包中的多位控制字来提供的,但是,其中仅仅有两个是与我们的讨论有关。它们是数据序列和数据确认,分别用SYN和ACK来表示。TCP
向每一个数据字节分配一个序列号,并且可以向已成功接收的、源地址所发送的数据包表示确认(目的地址ACK