TCP SYN-Cookie的原理和扩展

本文深入探讨TCP SYN-Cookie机制,包括其用于防止SYN Flood攻击的编码和解码过程,以及在Linux中的实现。同时,文章讨论了SYN-Cookie可能带来的副作用,如CPU DDOS攻击和TCP选项的协商问题。附带用户态测试代码,帮助理解该技术。
摘要由CSDN通过智能技术生成
               

SYN-Cookie概述

预防半连接攻击,SYN-Cookie是一种有效的机制,它的基本原理非常简单,那就是“完成三次握手前不为任何一个连接分配任何资源”,它是怎么做到的呢?也是非常简单。

1.编码信息

将一些本应该在本地保存的信息编码到返回给客户端的SYN-ACK的初始化序列号或者时间戳里面。握手尚未完成不分配任何资源(Linux即不分配request结构体)。

2.解码信息

等到客户端的ACK最终到来的时候,再从ACK序列号里面解码出保存的信息。

3.建立连接

利用第2步解码出来的信息建立一个TCP连接,此时因为握手已经完成,可以分配资源了。
我们接下来通过图示和代码来看一下编码和解码的过程。

编码过程图示


解码过程图示


问题

通过上面的编码解码过程中好像没有什么check/compare操作,一般而言,对于类似HASH或者摘要的算法,都需要对信息进行比对,比如对一段信息生产一个摘要,为了确保该信息没有被篡改,需要再次使用相同的算法生成摘要,如果两段摘要的值不同,说明信息被篡改了!对于上面的算法,在生产Cookie的时候,我们注意到使用hash算法对元组生产了一个值,但是对于解码的过程,它并没有再次计算这个值与原始携带的值做比对,这样合理吗?
        这事实上是Linux的一个hack!Linux将一段data做了限定,比如它的值严格在0-7之间,将这个data一同参与运算,而不是仅仅将其编码到固定的某几个bit,算法寄希望于:如果数据是伪造的或者被篡改了,那么解码出来的data的值仍然处在规定的严格区间里的可能性微乎其微!

测试代码

我们来看一个用户态的测试代码,说明一下24比特数据的编码和解码的过程:

#include <stdlib.h>#i
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值