忆龙2009:TCP非法复位漏洞及解决方法

英国NISCC发布安全公告指出,按照RFC793实现的TCP协议存在漏洞,可能使正常连接遭受第三方非法复位。攻击者通过伪造带有RST/SYN标志的TCP报文或普通数据报文,利用特定条件对BGP协议进行攻击,威胁网络通信安全。

 

      英国的NISCC发布236929安全公告:按照RFC 793实现的TCP协议存在安全漏洞,正常的TCP连接可以被非法的第三方复位。在已知TCP连接的四元组(源地址、目的地址、源端口号、目的端口号)的情况下,攻击者可以伪造带有RST/SYN标志的TCP报文或普通数据报文,当其sequence number落在TCP连接的滑动窗口(window size)范围内,可能导致以下攻击后果:

1.伪造RST 报文终止正常的TCP会话。

2.伪造SYN 报文终止正常的TCP会话。

3.攻击者可插入虚假数据到正常的TCP 会话。

 

      假设当前TCP连接的sequence number为A,攻击者选择一个随机sequence number为B,以步长为"window size"发送报文,因为sequence number范围为0~2^32,同时考虑到A、B所处位置的概率,攻击者平均发送"2^32/(windowsize*2)"个报文就有一个落在当前TCP连接的滑动窗口范围内,从而导致该TCP连接复位。以windowsize为8192为例,达成攻击平均需要发送262144个报文,假设报文长度为256字节,那么攻击者使用2M的ADSL线路可以在512秒复位这个TCP连接。考虑到现在很多操作系统的window size多达32K甚至64K,而且攻击者的线路带宽也远不止2M,攻击者可以更快达成攻击。

 

      达成攻击的前提条件是:已知(源地址、目的地址、源端口号、目的端口号);sequence number落在window size之内。对于一些基于TCP的应用,如telnet,ftp等,因为IP地址范围太大,猜测较难,而且这些应用的连接时间一般不长,所以威胁不算太大。但是对于BGP协议来说,要获取这四元组相对容易:首先,很多AS站点的地址信息能够在一些"BGP looking glasses"服务或者一些DNS资源信息上查到,这导致可以较为容易获取源地址和目的地址信息;其次目的端口是well-known的179;最后虽然源端口是变化的,但是研究发现,几乎所有厂商的TCP实现,在选择源端口号时是有规律的。加上BGP的TCP连接长时间存在,攻击者可以比较从容的发动攻击并得手。BGP被认为受本次发现的漏洞影响最大。

 

问题解决措施:

1.TCP问题的修改:

• RST的修改:

(1)报文段的RST被置位,顺序号不在接收窗口范围内,丢弃该报文

(2)报文段的RST被置位,并且该报文的顺序号正是期望的顺序号,reset the connection

(3)报文段的RST被置位,该报文的顺序号不是期望的顺序号,但是在窗口范围内(RCV.NXT < SEG.SEQ <= RCV.NXT+RCV.WND),send an ACK。

其中第三点修改建议经过分析,在正常情况不会对TCP造成影响。两个设备(假设A和B)建立TCP连接,如果其中一端A发起正好符合上面的条件RST报文段,这属于异常关闭流程,不遵守TCP的状态变迁,A会清除本端连接,对端B收到这个RST后,回应一个ACK给A,A收到后,发一个RST给B,这样两端就都断开连接,不存在一端连接长时间存在的问题。如果中间有报文丢弃,KEEPALIVE可以解决这个问题。

• SYN的修改:

(1)报文段的SYN被置位,顺序号不在接收窗口范围内,给对端发ACK

(2)报文段的SYN被置位,并且该报文的顺序号正是期望的顺序号(RCV.NXT == SEG.SEQ),发送ACK,在发送ACK之前,把被确认的值减一

(3)报文段的SYN被置位,该报文的顺序号不是期望的顺序号,但是在窗口范围内(RCV.NXT < SEG.SEQ <= RCV.NXT+RCV.WND),发送ACK

       报文段的ACK值检查,VRP软件处理已满足draft建议的范围((SND.UNA - MAX.SND.WND) <= SEG.ACK < SND.NXT)。

 

2.BGP的MD5认证问题修改:

      减轻被攻击影响的措施:

(1)在启动了BGP协议的一些关键应用场合,启动IPSEC;

(2)不能使用IPSEC的关键应用场合,在支持源地址逆向检查的设备上,建议用户启动源地址逆向检查功能。这可以大大减少攻击达成的可能性;

(3)严格控制启动BGP的设备的相关信息外露。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值