欺骗原理
在Unix领域中,信任关系能够很容易得到。假如在主机A和B上各 有一个帐户,在使用当中会发现,在主机A上使用时需要输入在A上的 相应帐户,在主机B上使用时必须输入在B上的帐户,主机A和B把你当 作两个互不相关的用户,显然有些不便。为了减少这种不便,可以在 主机A和主机B中建立起两个帐户的相互信任关系。在主机A和主机B上 你的home目录中创建.rhosts 文件。从主机A上,在你的home目录 中输入'echo " B username "> ~/.rhosts';从主机B上,在你 的home目录中输入'echo " A username " >~/.rhosts'。至此, 你能毫无阻碍地使用任何以r*开头的远程调用命令,如:rlogin,rcall,rsh 等,而无口令验证的烦恼。这些命令将允许以地址为基础的验证,或 者允许或者拒绝以IP地址为基础的存取服务。
  这里的信任关系是基于IP地址的。
  Rlogin
  Rlogin是一个简单的客户/服务器程序,它利用TCP传输。Rlogin 允许用户从一台主机登录到另一台主机上,并且,如果目标主机 信任它,Rlogin 将允许在不应答口令的情况下使用目标主机上的 资源。安全验证完全是基于源主机的IP 地址。因此,根据以上所 举的例子,我们能利用Rlogin来从B远程登录到A,而且不会被提示输 入口令。
  IP欺骗
  IP欺骗由若干步骤组成,这里先简要地描述一下,随后再做详尽 地解释。先做以下假定:首先,目标主机已经选定。其次,信任模式 已被发现,并找到了一个被目标主机信任的主机。***为了进行IP欺 骗,进行以下工作:使得被信任的主机丧失工作能力,同时采样目标 主机发出的TCP 序列号,猜测出它的数据序列号。然后,伪装成 被信任的主机,同时建立起与目标主机基于地址验证的应用连接。如 果成功,***可以使用一种简单的命令放置一个系统后门,以进行非 授权操作。
  使被信任主机丧失工作能力
  一旦发现被信任的主机,为了伪装成它,往往使其丧失工作能力 。由于***者将要代替真正的被信任主机,他必须确保真正被信任的 主机不能接收到任何有效的网络数据,否则将会被揭穿。有许多方法 可以做到这些。这里介绍“TCP SYN淹没”
。   前面已经谈到,建立TCP连接的第一步就是客户端向服务器发送SYN 请求。
  通常,服务器将向客户端发送SYN/ACK信号。这里客户端是由IP 地址确定的。客户端随后向服务器发送ACK,然后数据传输就可以进 行了。然而,TCP处理模块有一个处理并行SYN请求的最上限,它可以 看作是存放多条连接的队列长度。其中,连接数目包括了那些三步握 手法没有最终完成的连接,也包括了那些已成功完成握手,但还没有 被应用程序所调用的连接。如果达到队列的最上限,TCP将拒绝所有 连接请求,直至处理了部分连接链路。因此,这里是有机可乘的。
  ***往往向被进攻目标的TCP端口发送大量SYN请求,这些请求的 源地址是使用一个合法的但是虚假的IP地址(可能使用该合法IP地址 的主机没有开机)。而受***的主机往往是会向该IP地址发送响应的, 但可惜是杳无音信。与此同时IP包会通知受***主机的TCP:该主机 不可到达,但不幸的是TCP会认为是一种暂时错误,并继续尝试连接 (比如继续对该IP地址进行路由,发出SYN/ACK数据包等等),直至 确信无法连接。当然,这时已流逝了大量的宝贵时间。值得注意的是, ***们是不会使用那些正在工作的IP地址的,因为这样一来,真正IP 持有者会收到SYN/ACK响应,而随之发送RST给受***主机,从而断开 连接。前面所描述的过程可以表示为如下模式。
  1 Z(X)---SYN---> B
  Z(X)---SYN--->B
  Z(X)---SYN--->B
  2 X<---SYN/ACK--B
  X<---SYN/ACK--B
  3 X<---RST---B
  在时刻1时,***主机把大批SYN 请求发送到受***目标(在此阶段,是那个被信任的主机),使其TCP队列充满。在时刻2时,受 ***目标向它所相信的IP地址(虚假的IP)作出SYN/ACK反应。在这 一期间,受***主机的TCP模块会对所有新的请求予以忽视。不同的TCP 保持连接队列的长度是有所不同的。BSD一般是5,Linux一般是6 。使被信任主机失去处理新连接的能力,所赢得的宝贵空隙时间就是 ***进行***目标主机的时间,这使其伪装成被信任主机成为可能。