美文网首页我爱编程
Tcp SYN flood洪水攻击

Tcp SYN flood洪水攻击

作者: onlyHalfSoul | 来源:发表于2018-05-25 18:38 被阅读53次

    http://blog.csdn.net/hengyunabc/article/details/24934529

    简介

    TCP协议要经过三次握手才能建立连接:(from wiki)


    20140512034300078.png

    于是出现了对于握手过程进行的攻击。攻击者发送大量的SYN包,服务器回应(SYN+ACK)包,但是攻击者不回应ACK包,这样的话,服务器不知道(SYN+ACK)是否发送成功,默认情况下会重试5次(tcp_syn_retries)。这样的话,对于服务器的内存,带宽都有很大的消耗。攻击者如果处于公网,可以伪造IP的话,对于服务器就很难根据IP来判断攻击者,给防护带来很大的困难。

    攻与防

    攻击者角度

    从攻击者的角度来看,有两个地方可以提高服务器防御的难度的:

    • 变换端口
    • 伪造IP

    变换端口很容易做到,攻击者可以使用任意端口。

    攻击者如果是只有内网IP,是没办法伪造IP的,因为伪造的SYN包会被路由抛弃。攻击者如果是有公网IP,则有可能伪造IP,发出SYN包。(TODO,待更多验证)

    更强大的攻击者

    SYN cookie虽然十分巧妙,但是也给攻击者带了新的攻击思路。

    因为SYN cookie机制不是正常的TCP三次握手。因此攻击者可以构造一个第三次握手的ACK包,从而劫持会话。

    攻击者的思路很简单,通过暴力发送大量的伪造的第三次握手的ACK包,因为ISN只有32位,攻击者只要发送全部的ISN数据ACK包,总会有一个可以通过服务器端的校验。

    有的人就会问了,即使攻击者成功通过了服务器的检验,它还是没有办法和服务器正常通讯啊,因为服务器回应的包都不会发给攻击者。

    刚开始时,我也有这个疑问,但是TCP允许在第三次握手的ACK包里带上后面请求的数据,这样可以加快数据的传输。所以,比如一个http服务器,攻击者可以通过在第三次握手的ACK包里带上http get/post请求,从而完成攻击。

    所以对于服务器而言,不能只是依靠IP来校验合法的请求,还要通过其它的一些方法来加强校验。比如CSRF等。

    值得提醒的是即使是正常的TCP三次握手过程,攻击者还是可以进行会话劫持的,只是概率比SYN cookie的情况下要小很多。

    详细的攻击说明:http://www.91ri.org/7075.html

    一个用raw socket SYN flood攻击的代码

    总结:

    对于SYN flood攻击,调整下面三个参数就可以防范绝大部分的攻击了。

    • 增大tcp_max_syn_backlog
    • 减小tcp_synack_retries
    • 启用tcp_syncookies

    貌似现在的内核默认都是开启tcp_syncookies的。

    参考:

    http://www.redhat.com/archives/rhl-devel-list/2005-January/msg00447.html

    http://nixcraft.com/showthread.php/16864-Linux-Howto-test-and-stop-syn-flood-attacks

    http://en.wikipedia.org/wiki/SYN_cookies

    https://github.com/torvalds/linux/blob/master/net/ipv4/syncookies.c

    http://www.91ri.org/7075.html

    相关文章

      网友评论

        本文标题:Tcp SYN flood洪水攻击

        本文链接:https://www.haomeiwen.com/subject/owvujftx.html