syn拒绝服务攻击_syn服务器攻击脚本

hacker|
155

如何实现syn攻击

对付SYN FLood攻击,可以采取以下几种方式进行缓解:

第一,减少系统SYN等待时间(只能缓解攻击),

第二,对攻击源地址进行过滤(但是对于伪造精细的报文无效),

第三,修改系统SYN_back_log上限(只能缓解攻击),

第四,将系统SYN的重发次数降低(可以缓解攻击),

第五,如果是Linux系统,可以升级内核并设置Syn_cookies(极大缓解攻击)。

如果需要根治这种攻击,就必须在要保护的主机或网段前添加专门的防攻击的过滤设备了,而且通常的防火墙,很可能也无法抵御这种行为。

Python网络编程8-实现SYN Flood攻击与图形化展示

  最基本的DoS攻击就是攻击者利用大量合理的服务请求来占用攻击目标过多的服务资源,从而使合法用户无法得到服务的响应。DoS攻击一般是采用一对一方式的,当攻击目标各项性能指标不高时(例如CPU速度低、内存小或者网络带宽小等等),它的效果是明显的。

   泛洪攻击(Flood)

  指攻击者通过僵尸网络、代理或直接向攻击目标发送大量的伪装的请求服务报文,最终耗尽攻击目标的资源。发送的大量报文可以是TCP的SYN和ACK报文、UDP报文、ICMP报文、DNS报文HTTP/HTTPS报文等。

  以下Python脚本可实现简易的SYN Flood攻击

运行结果如下

使用Wirshark观察如下,产生大量TCP syn包;由于使用单IP单端口发送时,scapy使用了相同TCP序列号和数据,Wirshark认为是TCP重传,使用多IP多端口是则正常。

以下Python脚本可对捕获的SYN Flood包进行分析,并展示出数量大于5的连接。

运行结果如下

首先会打印出数量大于5的连接与其对应的数量。

同时会生成对应图表,可以直观的看到攻击目标主机和端口的源IP排名。

怎么使用SYN攻击

SYN简称

TCP SYN扫描

在这种技术中,扫描主机向目标主机的选择端口发送SYN数据段。如果应答是RST,那么说明端口是关闭的,按照设定就探听其它端口;如果应答中包含SYN和ACK,说明目标端口处于监听状态。由于所有的扫描主机都需要知道这个信息,传送一个RST给目标机从而停止建立连接。由于在SYN扫描时,全连接尚未建立,所以这种技术通常被称为半打开扫描。SYN扫描的优点在于即使日志中对扫描有所记录,但是尝试进行连接的记录也要比全扫描少得多。缺点是在大部分操作系统下,发送主机需要构造适用于这种扫描的IP包,通常情况下,构造SYN数据包需要超级用户或者授权用户访问专门的系统调用

抵御 SYN 攻击

SYN 攻击利用了 TCP/IP 连接建立机制中的安全漏洞。要实施 SYN 洪水攻击,攻击者会使用程序发送大量 TCP SYN 请求来填满服务器上的挂起连接队列。这会禁止其他用户建立网络连接。

要保护网络抵御 SYN 攻击,请按照下面这些通用步骤操作(这些步骤将在本文档的稍后部分进行说明):

• 启用 SYN 攻击保护

• 设置 SYN 保护阈值

• 设置其他保护

参考资料:

怎么判断服务器是否被DDoS恶意攻击?

怀疑遇到攻击情况,首先要看看服务器上面的情况,首先top一下,看看服务器负载,如果负载不高,那么基本可以判断不是cc类型的攻击,再输入命令

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

查看下网络连接的情况,会得到下面这些结果:

TCP/IP协议使用三次握手来建立连接,过程如下:

1、第一次握手,客户端发送数据包syn到服务器,并进入SYN_SEND状态,等待回复

2、第二次握手,服务器发送数据报syn/ack,给客户机,并进入SYN_RECV状态,等待回复

3、第三次握手,客户端发送数据包ACK给客户机,发送完成后,客户端和服务器进入ESTABLISHED状态,链接建立完成

如果ESTABLISHED非常地高,那么可能是有人在恶意攻击,进一步判断,可以把下面命令保存为脚本执行一下:

for i in `netstat -an | grep -i ':80 '|grep 'EST' | awk '{print $5}' | cut -d : -f 1 | sort | uniq -c | awk '{if($1 50) {print $2}}'`

do

echo $i

echo $i /tmp/evilip

done

如果输出了多个结果,那么可能表示有人在企图进行DDOS攻击,想用TCP连接来拖死你的服务器,输出的ip就是发出请求的服务器地址,并且保存在了/tmp/evilip里面。如果没有结果,可以调整一下阈值,把50改成40试一试,对策我们后面再说,这里只讲判断。如果SYN_RECV非常高,那么表示受到了SYN洪水攻击。

SYN洪水是利用TCP/IP协议的设计缺陷来进行攻击的,采用一些策略以及配置可以适当的降低攻击的影响,但并不能完全消除。

sysctl -w net.ipv4.tcp_syncookies=1

sysctl -w net.ipv4.tcp_syn_retries = 0

sysctl -w net.ipv4.tcp_max_syn_backlog=2048

tcp_syncookies设置为1表示启用syncookie,可以大大降低SYN攻击的影响,但是会带来新的安全缺陷。

tcp_syn_retries 表示syn重试次数,重传次数设置为0,只要收不到客户端的响应,立即丢弃该连接,默认设置为5次。

tcp_max_syn_backlog表示syn等待队列,改小这个值,使得SYN等待队列变短,减少对系统以及网络资源的占用。

TCP连接攻击算是比较古老的了,防御起来也相对比较简单,主要是利用大量的TCP连接来消耗系统的网络资源,通常同一个IP会建立数量比较大的TCP连接,并且一直保持。应对方法也比较简单,可以将以下命令保存为脚本,定时ban掉那些傀儡机ip

for i in `netstat -an | grep -i ':80 '|grep 'EST' | awk '{print $5}' | cut -d : -f 1 | sort | uniq -c | awk '{if($1 50) {print $2}}'`

do

echo $i

echo $i /tmp/banip

/sbin/iptables -A INPUT -p tcp -j DROP -s $i

done

banip文件里面记录了所有被ban的ip地址信息,方面进行反渗透以及证据保存等等。为了更好地加固系统,我们可以使用iptables来限制一下,单个ip的最大连接数。

当攻击者的资源非常的多,上面这些方法限制可能就没有什么防护效果了,面对大流量DDoS攻击还是要考虑采用多机负载或者选择墨者安全高防来应对了,一般来说多机负载的成本可能更高,所以大部分人还是选择墨者高防硬防产品来防御。

SYN攻击原理

SYN是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

TCP连接的第一个包,非常小的一种数据包。SYN攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效进行处理。每个机器的欺骗包都要花几秒钟进行尝试方可放弃提供正常响应。

攻击性质

在黑客攻击事件中,SYN攻击是最常见又最容易被利用的一种攻击手法。

SYN攻击属于DDoS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。

服务器接收到连接请求(syn=j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效果。通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重则引起网络堵塞甚至系统瘫痪。

0条大神的评论

发表评论