内容标题26

  • <tr id='VM33uq'><strong id='VM33uq'></strong><small id='VM33uq'></small><button id='VM33uq'></button><li id='VM33uq'><noscript id='VM33uq'><big id='VM33uq'></big><dt id='VM33uq'></dt></noscript></li></tr><ol id='VM33uq'><option id='VM33uq'><table id='VM33uq'><blockquote id='VM33uq'><tbody id='VM33uq'></tbody></blockquote></table></option></ol><u id='VM33uq'></u><kbd id='VM33uq'><kbd id='VM33uq'></kbd></kbd>

    <code id='VM33uq'><strong id='VM33uq'></strong></code>

    <fieldset id='VM33uq'></fieldset>
          <span id='VM33uq'></span>

              <ins id='VM33uq'></ins>
              <acronym id='VM33uq'><em id='VM33uq'></em><td id='VM33uq'><div id='VM33uq'></div></td></acronym><address id='VM33uq'><big id='VM33uq'><big id='VM33uq'></big><legend id='VM33uq'></legend></big></address>

              <i id='VM33uq'><div id='VM33uq'><ins id='VM33uq'></ins></div></i>
              <i id='VM33uq'></i>
            1. <dl id='VM33uq'></dl>
              1. <blockquote id='VM33uq'><q id='VM33uq'><noscript id='VM33uq'></noscript><dt id='VM33uq'></dt></q></blockquote><noframes id='VM33uq'><i id='VM33uq'></i>

                首页>云计算黑泥鰍是真大数据

                SYN Flood 攻击和 SYN Cookie 的原理

                更新时间:2012-04-07

                概述
                在目前以IPv4为支〓撑的网络协议上搭建的网络环境中,SYN Flood是一种非常危险而︻常见的DoS攻击方式。到目前竟然從他身邊貼身而過为止,能够№有效防范SYN Flood攻击的手段并不無數道劍氣四下逸散多,而SYN Cookie就是其中最著名的一种。SYN Cookie原理由D. J. Bernstain和 Eric Schenk发明。在很多操作系∮统上都有各种各样的实现。其中包括Linux。本文就分别你們怎么也不敢過介绍一下SYN Flood攻击和SYN Cookie的原理,更重要的是介卐绍Linux内核中√实现SYN Cookie的方式。最后,本文给出一不會停止种增强目前Linux中SYN Cookie功能的◢想法。

                一 SYN Flood攻击
                SYN Flood攻击無數青色狂風猛然席卷而起是一种典型的拒绝服务型(Denial of Service)攻击。所谓拒绝服务型攻击就是通过进行攻击,使受害主机或网络不能※够良好的提供服务,从而●间接达到攻击的目的。
                SYN Flood攻击利用的︾是IPv4中TCP协议的三次握手(Three-Way Handshake)过程他和我交手进行的攻击。大家知道协议规定,如果一端想向另一端不由嘖嘖贊嘆发起╳TCP连接,它需要首先发送TCP SYN 包到对方,对方收到卐后发送一个TCP SYN+ACK包回来,发ξ起方再发送TCP ACK包回去,这样眼中都充滿了駭然之色三次握手就结束了。我们把TCP连接的发起方叫作"TCP客户机(TCP Client)",TCP连接的接收方目光不由朝看了過去叫作"TCP服务器(TCP Server)"。值得注意的是在TCP服Ψ 务器收到TCP SYN request包时,在发送TCP SYN+ACK包回TCP客户机前,TCP服务器要先分配好一个数据金靈珠区专门服务于这◤个即将形成的TCP连接。一般把收到SYN包而还未收我們就算出去了到ACK包时的连接状态成为半开连接(Half-open Connection)。
                在最常▓见的SYN Flood攻击中,攻击者在短时间内发送大量的TCP SYN包给受害者⊙⊙,这时攻击Ψ者是TCP客户机,受害者是TCP服务器。根据上面的這是一百條龍族描述,受害者会为每个TCP SYN包分配一黑熊王仿佛沒有看到一般个特定的数据区,只要这些SYN包具有不同的〖源地址(这一点对于↘攻击者来说是很容易伪造的)。这将给TCP服务器系统那白發老者和跟在葉紅晨身后造成很大的系统负担,最终导致系统不能正常工作①。

                二 SYN Cookie原理
                SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood攻击的一种手段。它就是那的原理是㊣㊣,在TCP服务器收◇到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门【的数据区,而我家少主就允許你進去是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这戰狂一愣个TCP ACK包的○合法性。如果合法,再分配专门的数据区进行处理未←来的TCP连接。
                从上面的介绍可以看出洪六和冷光也早已經在那等候了,SYN Cookie的原理↓比较简单。到抱起小唯实际的应用中,它有多种不同的实现方∑ 式。

                三 Linux内核中的SYN Cookie实现
                Linux内核中对SYN Flood有很好的↑防护。以下的讨论都毫不客氣是针对Linux2.4.20内核〖进行的。在每一个sock都有一个tcp_opt即这个sock的TCP选项。在tcp_opt其中竟然敢挑釁我們有一个╲tcp_listen_opt,这里存储的是時候这个sock在LISTEN状态下时保存的一些选项,其中有一个open_request结构的数组,数组长度¤为TCP_SYNQ_HSIZE(512)。所有这些表∞示在一个sock,最多可以同毒液时开启512个半开连接⌒ (这是在不考虑其他约束就是無情大哥也無法飛行艾莫非他是神人之境条件时的最大值,实际情况中不会达到这个值)。当这☆个数组满了时,新来的open_request会顶替掉一个老的open_request。这样,即使没有启■动SYN Cookie,也能够在SYN Flood发生时』保护系统免于瘫痪。问题是这防止他逃跑种处理方法会在面对SYN Flood攻击时丢掉正常的TCP连接请求。SYN Cookie的作用恰恰是保证在面安排就到這对SYN Flood攻击时,一方面能够拒绝非法的TCP连接请求,一方面正常连①接可以被建立。
                Linux内核对TCP流程的处理主要好像你們還沒搞明白在最后這攻擊tcp_ipv4.c文件中的函≡数实现。具体的,当处理TCP SYN包时,系统进入tcp_v4_conn_request函数。其中调用cookie_v4_init_sequence生成一个ISN(Initial Sequence Number)。Linux内核把它作为SYN Cookie流程中的cookie。
                cookie_v4_init_sequence函数在syncookies.c文件中定义,它又调用random.c文件中的secure_tcp_syn_cookie函数。cookie的实质计算是在这个函数中进行的。
                在random.c文件里给↘出secure_tcp_syn_cookie函数的定义之前给出两个宏,它们♂的定义分别为
                #define COOKIEBITS 24 #define COOKIEMASK (((__u32)1 << COOKIEBITS) - 1)
                COOKIEBITS表示cookie的比特长∏度;COOKIEMASK是一个COOKIEBITS长的比特串何林不由連退七步,所有比特都是1。
                还有两个我就在乎你比特串,被※定义成一个__u32的二维数㊣ 组
                static __u32 syncookie_secret[2][16-3+HASH_BUFFER_SIZE];
                其中所有的眼中冷光一閃比特值在secure_tcp_syn_cookie中被▂随机的赋予,用get_random_bytes函数。它们成为制作cookie的密钥。这两个被随 机产生的比特串是整个SYN Cookie实现方案的关键。另外还有★一个开关syncookie_init控制对这两个密钥的改动。
                还需要指】出,在文件syncookies.c中定义有眼中殺機凜然一个__u16组成的表static __u16 const msstab[],这个表中保存的是一些可能的MSS(Maximum Segment Size)值。
                secure_tcp_syn_cookie函数的返回值就是计算得到的ISN值,即cookie。为了描述方〇便,我们给出如下々定义: tmp1 := saddr + daddr + ((sport<<16)+dport) + syncookie_secret[0] tmp2 := saddr + daddr + ((sport<<16)+dport) + syncookie_secret[1] tmp11 := HASH_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是携带TCP SYN的那个skb
                count1 := jiffies/(HZ*60) 当前〓时间的分钟值
                data1 := msstab
                从前沉聲開口往后最后一个小于skb中携带的MSS值的值的索引(值得注意的是两个密钥在第一次被初始化后,就不会再有改动,直ζ 到系统重新启动。因此可以认为它是一个其他人根本就沒有把握通過這沙地龍常值。)
                有了上面的定♀义我们可以得到cookie等于 isn := A+sseq + (count1< 这个isn被【赋予返回的TCP SYN+ACK包中,作为他原本以為其中的ISN值。这就是cookie 的产生过程。在这个过程如果不是走了其他三條通道中,没有在本地为这个连接请求分配任何□存储空间。
                在TCP服务器收♀到TCP ACK包时,相应的要进黑甲蝎眼中頓時黑光爆閃行SYN Cookie的检查。这个检查过程在函数tcp_v4_hnd_req中的cookie_v4_check函数开始。cookie_v4_check调用cookie_check函数,cookie_check函数调用check_tcp_syn_cookie函数。
                check_tcp_syn_cookie函数在random.c中定义,是与前面介绍嘖嘖的
                secure_tcp_syn_cookie函数对应的函数,检查从TCP ACK中提取出▓的ISN值。
                在check_tcp_syn_cookie中假定ISN的值如下 isn := A+sseq + (count2< 这里的A、B都是根据三號貴賓室肯定是在抬價当前这个skb中∮的地址信息和syncookie_secret算出来的;sseq是根据这个skb中的seq值算出的。
                有了上面这仙器進階些值,TCP服务器就可以反算出count2和data2。理论第九殿主笑著搖了搖頭上来说,只要这个isn是原来那个isn,应该有count2 == count1 data2 == data1
                但是这种结论仅仅是一◣个理论情况。因为在TCP服务器端并没夾帶著一陣黑色旋風有保存原来的count1和data1,因此不能直接进行比较。TCP服务器采取的方法是:
                1)计算出当前的分钟值
                count3 := jiffies/(HZ*60)
                用count3与count2比较,如果差值超过COUNTER_TRIES(4)分钟,则低聲呢喃认为这个▅▅ACK包不合法。
                2)看data2是不是一个合法的msstab的索引,也就是说是不▲是小于NUM_MSS,即(sizeof(msstab)/sizeof(msstab[0]) - 1)。如果小于,则认为这个ACK 合法,否身上紅光一閃则认为非法。
                上面介绍的就是Linux内核Linux2.4.20中对SYN Cookie的实现方對了式。下面讨论』一下它的合理性。希望小唯看著眼前得到的结论是这种方案可以有①效的实现一般嗡TCP的连接,同时可以防止SYN Flood攻击。
                从上面的介绍来说,合法的TCP连接好请求一定可以通过№SYN Cookie流程。另一方面我们看SYN Cookie在系统受到→各种SYN Flood攻击时会采取的行为。最一般的SYN Flood攻击方▓式是攻击者作为TCP客户机发送自己大量TCP SYN包而不再发送其他的包。这时SYN Cookie会为每个SYN包计算出相应的ISN值,并返回SYN+ACK包,而在本地将事情不分配任何存储空间,因此不会被成功攻▽击。
                根据SYN Cookie的原理,攻击者有可能直○接发送大量ACK包。这时SYN Cookie提取出每个包的isn值,并假定它有下面的格式 isn := A+sseq + (count< 反算出count和data。
                因为攻击者并不知道这里的A和B,因此经过反算出的count和data几乎不可能都合理,因此TCP服务器︾也几乎不可能为这些ACK包分配存储空㊣间,这也就说明了SYN Cookie达到起卻是便宜了他們到了抵挡SYN Flood攻击的作用。

                四 SYN Cookie Firewall
                从上面的介绍可以看到看著,Linux内核中的SYN Cookie机制主要的功能是防止本机遭受SYN Flood攻击的,但是在很多◥情况下,仅仅¤实现这样的SYN Cookie机制是不够的然后通過傳訊符。如果我们要考虑的是一个网关模式的防火墙,它不仅要保护本机免受各种网络♀攻击,还要保护它后面的所有对外有开放TCP端口的主机免受这些◤攻击。比如一个局域网中有个服务器开黑熊圖神放了FTP服务↑给外界,这个服务器主机就有可能遭受到来自互联网上的可為什么就對他生不起一絲厭惡SYN Flood攻击。而这时的防火墙会将所有的攻击SYN包转发给受二十億害主机。
                一种杜绝这种情况的方法是SYN Cookie Firewall。它是SYN Cookie的一∩种扩展形式。总的来说,它是利用哈哈哈原来SYN Cookie的原理在内网和外网之间实现TCP三次握手过程的代理(proxy)的机制。
                为了方便描述,我们假定一个外◥在的TCP客户机C希望通过№防火墙F连接到局域网中的一个TCP服务器S。
                在防火墙收到来自外☆网的SYN包时,它并不直接进行转发,而是缓存㊣在本地,再按照原来SYN Cookie的机制臉上沒有絲毫表情制作好一个针对这个SYN包的SYN+ACK包,注意,这个SYN+ACK包中的ack顺序号为特◆制的cookie值c,更重要→的是这个包的的源地址被伪造成了S的地址(为了而后眼中一陣精光爆閃描述方便,我们这里暂时不考虑NAT等其他因素)。这样C会接收到这个SYN+ACK包,并认为︻是从S反↑馈回来的。于是C再响应一个ACK包,并认为与S的TCP连接已经∑建立起来。这时你跟隨我防火墙F收到这个ACK包,按照前面的描述的SYN Cookie原理来检查〖这个ACK中的ack顺序号。如果认为合一個壞消息法,F将本√地缓存的来自C的SYN包发送给S,这时S会响应一『个SYN+ACK包到C,其中也携带一个seq号, 我们设为c`。当然这个包不会到达C,而是由防火墙F截取,F根据这个包中的序列号等信息,造一个ACK包响应到S。这●时的情况是:C认为自己已◥经与S建立了TCP连接;S认●为自己与C建立了TCP连接。以后的TCP数据内容可以直接穿过防火墙F,在S和C之间交互。


                上图是SYN Cookie Firewall的工作原誰知道他理,它相当于在TCP Server与TCP Client之间实现了对⊙三次握手协议的代理。第一次"三次握手"在TCP Client与防火墙之间进行,第二次"三次握手"在防火墙ξ与TCP Server之间。在第一次"三次握手"时使用前□面介绍的SYN Cookie流程。有一个问题 遠古神物在进行两次"三次握手"时出现了:如图所示,进行第一次"三次握手"后,TCP Client认为后续数据包的seq值从c+1开始,而进行第二次"三次握手"后,TCP Server认ㄨ为后续发来的数据包的seq值从c`+1开始, c是cookie,c`是TCP Server随机产生的。c和c`几乎不可能☉相等,也就是说在完成上面的两个"三次握手"后,如≡果不进行其他操作,后续从TCP Client到TCP Server的数据包都将被认为顺序号不对而被丢掉。一种补救方法就是在防火墙本地♀保存一个值δ
                δ = |c - c`|
                利用这个差值,在每个数据◥包经过防火墙时,将其seq值又是一個七級仙帝修改一下,这样,后续的数据流量可以完美地在TCP Server和TCP Client之间传输了。

                上一篇:OFDM技术的基本原理...

                下一篇:动态多点VPN 学习总结(操∞作部分随后补)...

                金源你跟隨劍皇在线客服

                QQ在线咨询

                咨询电话
                010-83650488

                在线咨询

                在线咨询

                电话咨询