0x00. SOCKSTRESS攻击简介
SockStress攻击正好与Syn-Flood攻击原理相悖,它正是利用建立TCP/IP三次握手连接来实现拒绝服务攻击,而且与Syn-Flood不同它并非通过耗尽服务器的TCP连接数来让正常用户的正常请求无法响应,而是直接耗尽服务端的内存、CPU等资源让受害者宕机,属于非对称的资源消耗攻击,这种攻击方式的危害性极大,而且一旦遭受分布式攻击是几乎不能被抵御的。
0x01. SOCKSTRESS攻击原理
上篇文章已经给大家介绍过TCP/IP的握手过程了,所以这里就只讲一下SOCKSTRESS的攻击原理
1.首先,攻击者大量请求建立三次握手连接
2.成功建立ESTABLISHED之后,攻击者会将数据包中window的值置为0(window的意思代表client这边一次可以接受的数据大小,置为0之后表示client没有window来接受server发来的数据,然后server就会分配内存来维持TCP连接直到client有空闲的window与之通信),然而攻击者可不会维持什么连接,他只会不断的请求TCP连接耗尽server的资源
3.当server这端维持连接达到一定数量之后,内存、CPU甚至是SWAP分区都会被耗尽,系统命令不能正常执行,想要恢复server唯一的办法就是断网
[*]下面是attacker发向server的一个ACK包,window被置为了0
0x02. SOCKSTRESS攻击实战
这次的实战步骤比较简单,但是危害巨大,笔者会用自己的靶机演示,大家不要去攻击网络上的任何服务器。
环境准备
1. SOCKSTRESS攻击脚本
2. kali linux
3. metasploit靶机 IP=192.168.1.104
攻击流程
1.下载Github上面的SOCKSTRESS攻击脚本并安装
git clone https://github.com/defuse/sockstress && cd sockstress/ && make
2.设置防火墙规则,过滤发送给server的REST包(不过滤的话server就会断开连接)
iptables -A OUTPUT -p TCP --tcp-flags rst rst -d xx.xx.xx.xx -j DROP
3.运行SOCKSTRESS攻击脚本,攻击靶机的80端口
./sockstress xx.xx.xx.xx:80 eth0 -p payloads/http -d 100
4.查看一下靶机可以看到内存和CPU已经被耗得差不多了,靶机的web服务已经访问不了,如果再多攻击一会可能就直接宕机
0x03. 防御措施
对于SOCKSTRESS这种攻击方式我们可以设置防火墙规则,限制server在一定时间内与同一个IP建立TCP连接的数量,这样即使有大量的连接发过来也不会对server有太大的影响,但是这仅限于DoS,如果是DDoS的话那么就只有升级server的性能了
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set && iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 30 --hitcount 10 -j DROP