当前位置: 首页 > 图文教程 > 网络安全 > 安全基础 > 网络安全讲座之七:攻击与渗透(5)

安全基础
text2html格式转换软件转换txt为网页
Gmail邮件搬家:Gmail邮件直接搬家到网易邮箱
木马下载器导致大量的同名进程wmisqtu.exe
百度知道文档分享:上传下载需要的文档
局域网里固定IP地址无法上网故障解决方法
警告:XP系统赶快停止使用IE6
删除火狐浏览器保存的表单密码
Windows7系统下怎么修改explorer.exe文件
取消ESET NOD32开机扫描的设置技巧
查看垃圾邮件信头找到真正的发件人
输入法技巧:Ctrl+Shift灵活运用
网络时代坐在家里能时刻掌握火车票剩票信息
安全删除USB设备 做到一键删除
安全专家:网络购物过程中的十大“陷阱”
禁用Adobe Reader和Acrobat里javascript功能
屏幕分辨率和显示屏调节工具调节屏幕分辨率
退出路由或者交换机使用正确退出命令exit
上网计算机查漏洞方法和相应处理措施
XP系统下IE7默认首页改变的方法
新手入门:QQ邮件常见问题问答

安全基础 中的 网络安全讲座之七:攻击与渗透(5)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-28   浏览: 41 ::
收藏到网摘: n/a

 TCP/IP序列号生成方法

  TCP的Initial Sequence Number(ISN)的预测



(图1)

  正常的TCP连接基于一个三次握手(3-way handshake),一个客户端(Client)向服务器(Server)发送一个初始化序列号ISNc, 随后,服务器相应这个客户端ACK(ISNc),并且发送自己的初始化序列号ISNs,接着,客户端响应这个ISNs(如下图),三次握手完成。

   C ---〉S: (ISNc)

   S ---〉C: ACK(ISNc)+ ISNs

   C ---〉S: ACK(ISNs)

   C ---〉S: data

   and / or

   S ---〉C: data

  下面,我以Windows2000 Advanced Server为例,来说一下两台主机是如何进行三次握手。



(图2)



(图3)

  我们可以看到:

  1) Smartboy首先发送一个seq:32468329的包给服务器202.116.128.6。

  2) 然后, 202.116.128.6响应主机Smartboy, 它送给Smartboy自己的

   seq:3333416325 而且响应Smartboy的ack:3240689240。

  3) Smartboy再响应服务器202.116.128.6, seq:3240689240, ack:3333416326。

   三次握手完毕,两台几建立起连接。

   可以看出,在三次握手协议中,Clinet一定要监听服务器发送过来的ISNs, TCP使用的sequence number是一个32位的计数器,从0-4294967295。TCP为每一个连接选择一个初始序号ISN,为了防止因为延迟、重传等扰乱三次握手,ISN不能随便选取,不同系统有不同算法。理解TCP如何分配ISN以及ISN随时间变化的规律,对于成功地进行IP欺骗攻击很重要。

  在Unix系统里,基于远程过程调用RPC的命令,比如rlogin、rcp、rsh等等,根据/etc/hosts.equiv以及$HOME/.rhosts文件进行安全校验,其实质是仅仅根据源IP地址进行用户身份确认,以便允许或拒绝用户RPC。这就给与了那些攻击者进行IP地址欺骗的机会。

   让我们看X是如何冒充T来欺骗S,从而建立一个非法连接 :

   X---->S: SYN(ISNx ) , SRC = T

   S---->T: SYN(ISNs ) , ACK(ISNT) (*)

   X---->S: ACK(ISNs+1 ) , SRC = T (**)

   X---->S: ACK(ISNs +1) , SRC = T, 攻击命令(可能是一些特权命令)

   但是,T必须要在第(**)中给出ISNs, 问题是ISNs在第(*)步中发给了T(X当然很难截取到),幸运的是,TCP协议有一个约定: ISN变量每秒增加250,000次,这个增加值在许多版本比较旧的操作系统中都是一个常量,在FreeBSD4.3中是125000次每秒,这就给X一个可乘之机。

   看一下X是如何猜出ISNs : 

   a、首先, X发送一个SYN包来获取服务器现在的ISNs

     X ---〉S: (ISNx)

     S ---〉X: ACK(ISNx)+ ISNs# (1)

   b、紧接着,X冒充T向服务器发送SYN包

        X ---〉S: SYN(ISNx ) , SRC = T (2)

   c、于是,服务器发出一个响应包给T(这个包X是收不到的)

     S ---〉T: SYN(ISNs$) , ACK(ISNT ) (3)

   d、X计算ISNs$:

       ISNs$ = ISNs# + RTT×Increment of ISN (4)

  其中,RTT(Round Trip Time),是一个包往返X和S所用的时间,可以通过Ping 来得到。



(图4)

  上图显示了round trip times (RTT) 大概是0。

  Increment of ISN是协议栈的初始序列号每秒钟增加的值,以Unix为例,当没有外部连接发生时,服务器的ISN每秒增加128,000,有连接的时候,服务器的ISN每秒增加64,000。

   e、于是,

    X ---> S : ACK(ISNs$)   (冒充可信主机成功了)

    X ---> S : 恶意的命令或窃取机密消息的命令

  在评价以下的解决方案时有几点要注意:

  1.该解决方案是否很好地满足TCP的稳定性和可操作性的要求?
  2.该解决方案是否容易实现?
  3.该解决方案对性能的影响如何?
  4.该解决方案是否经得起时间的考验?

  以下的几种方案各有各的优点和缺点,它们都是基于增强ISN生成器的目标提出的。

  配置和使用密码安全协议