syncookie在linux内核中的实现

syncookie在linux内核中的实现

ID:22376488

大小:61.50 KB

页数:9页

时间:2018-10-28

syncookie在linux内核中的实现_第1页
syncookie在linux内核中的实现_第2页
syncookie在linux内核中的实现_第3页
syncookie在linux内核中的实现_第4页
syncookie在linux内核中的实现_第5页
资源描述:

《syncookie在linux内核中的实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、SYNCookie在Linux内核中的实现~教育资源库  概述  在目前以IPv4为支撑的网络协议上搭建的网络环境中,SYNFlood是一种非常危险而常见的DoS攻击方式。到目前为止,能够有效防范SYNFlood攻击的手段并不多,而SYNCookie就是其中最著名的一种。SYNCookie原理由D.J.Bernstain和EricSchenk发明。在很多操作系统上都有各种各样的实现。其中包括Linux。本文就分别介绍一下SYNFlood攻击和SYNCookie的原理,更重要的是介绍Linux内核中实现SYNCookie的方式。最后,本文

2、给出一种增强目前Linux中SYNCookie功能的想法。  一、SYNFlood攻击  SYNFlood攻击是一种典型的拒绝服务型(DenialofService)攻击。所谓拒绝服务型攻击就是通过进行攻击,使受害主机或网络不能够良好的提供服务,从而间接达到攻击的目的。  SYNFlood攻击利用的是IPv4中TCP协议的三次握手(Three-ASK(((__u32)1<<COOKIEBITS)-1)  COOKIEBITS表示cookie的比特长度;COOKIEMASK是一个COOKIEBITS长的比特串,所有比特都是1。

3、  还有两个比特串,被定义成一个__u32的二维数组  static__u32 syncookie_secret[2][16-3+HASH_BUFFER_SIZE];  其中所有的比特值在secure_tcp_syn_cookie中被随机的赋予,用get_random_bytes函数。它们成为制作cookie的密钥。这两个被随机产生的比特串是整个SYNCookie实现方案的关键。另外还有一个开关syncookie_init控制对这两个密钥的改动。  还需要指出,在文件syncookies.c中定义有一个__u16组成的表static__

4、u16constmsstab[],这个表中保存的是一些可能的MSS(MaximumSegmentSize)值。  secure_tcp_syn_cookie函数的返回值就是计算得到的ISN值,即cookie。为了描述方便,我们给出如下定义:tmp1:=saddr+daddr+((sport<<16)+dport)+syncookie_secret[0]123下一页友情提醒:,特别!tmp2:=saddr+daddr+((sport<<16)+dport)+syncookie_secret[1]tmp11:=HAS

5、H_TRANSFORM(tmp1[16],tmp1)tmp22:=HASH_TRANSFORM(tmp2[16],tmp2)A:=tmp11[0][17]B:=tmp22[1][17]sseq:=ntohl(skb->h.th->seq)这里的skb是携带TCPSYN的那个skbcount1:=jiffies/(HZ*60)当前时间的分钟值data1:=msstab  从前往后最后一个小于skb中携带的MSS值的值的索引(值得注意的是两个密钥在第一次被初始化后,就不会再有改动,直到系统重新启动。因此可以认为它是一个常值。) 

6、 有了上面的定义我们可以得到cookie等于  isn:=A+sseq+(count1<<COOKIEBITS)+(B+data1)COOKIEMASK  这个isn被赋予返回的TCPSYN+ACK包中,作为其中的ISN值。这就是cookie的产生过程。在这个过程中,没有在本地为这个连接请求分配任何存储空间。  在TCP服务器收到TCPACK包时,相应的要进行SYNCookie的检查。这个检查过程在函数tcp_v4_hnd_req中的cookie_v4_check函数开始。cookie_v4_check调用cookie_ch

7、eck函数,cookie_check函数调用check_tcp_syn_cookie函数。  check_tcp_syn_cookie函数在random.c中定义,是与前面介绍的  secure_tcp_syn_cookie函数对应的函数,检查从TCPACK中提取出的ISN值。  在check_tcp_syn_cookie中假定ISN的值如下  isn:=A+sseq+(count2<<COOKIEBITS)+(B+data2)COOKIEMASK  这里的A、B都是根据当前这个skb中的地址信息和syncookie_sec

8、ret算出来的;sseq是根据这个skb中的seq值算出的。  有了上面这些值,TCP服务器就可以反算出count2和data2。理论上来说,只要这个isn是原来那个isn,应该有  count2==cou

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。