对产品做安全性测试方式有很多种,比如,利用硬件设备,缺点是价值昂贵,另一种就是使用软件,软件的缺点比不上硬件的性能优势。
有一天,无意接触到Python Scapy工具,开启了网络安全编程学习之路。引用官网文档说明介绍它:Scapy 是一个 Python 程序,它使用户能够发送、嗅探、剖析和伪造网络数据包。这种能力允许构建可以探测、扫描或攻击网络的工具。
有时候为了满足测试要求,我们总要构造一系列测试条件,所以就有后文的ddos攻击测试以及编写一个测试脚本。
什么是DDoS 攻击?
拒绝服务(DoS) 攻击是一种恶意尝试,旨在影响合法最终用户对目标系统(如网站或应用程序)的可用性。 通常,攻击者会生成大量数据包或请求,最终使目标系统不堪重负。 在发生分布式拒绝服务(DDoS) 攻击时,攻击者使用多个被破坏或受控的来源生成攻击。
本文介绍的几种DDOS攻击,如果按照OSI分层,它们属于基础设施层(即网络层和数据传输层)。如果按DDOS攻击分类,将攻击分为基础设施层(第3层和第4层)和应用层(第6层和第7层)。
网络层和传输层有最为常见的DDos攻击,传输层包括SYN、UDP泛洪攻击等,网络层包括ICMP和ARP等,这些攻击一般数量比较大,也最易使网络或应用程序服务器的容量过载,但这些攻击已经具有很清晰标识且易于检测。
使用说明
其中:
- 攻击者:使用Scapy工具伪造网络数据包,攻击指定的网络设备,伪造网络数据包中IPv4协议的Destination Address
- 受害者:被攻击对象,伪造网络数据包中IPv4协议的Source Address
-
windows10
-
Python 3.8以上
-
已安装Npcap,安装wireshark自带
依赖第三方库
- Scapy
DDos攻击脚本:9_ddos_attack.py
参数说明
ICMP flood攻击
解释:
- -t 指定攻击类型,这里1表示icmp flood,除此之外,还有arp、tcp、udp攻击,详细参考代码注释
- -n表示发包数量,即伪造n个网络数据包,这里发包数量10个
- -d表示目的主机ip地址,即受害者的主机ip
- -D表示目的主机的mac地址,即受害者的主机mac地址
- --pcapwrite 1表示保存伪造的网络数据包,保存于脚本目录下,生成一个attack_packet文件夹
- --srcIpRandom 1 表示生成的每个伪造网络包的源IP地址都不一样
- --debug表示打印输出每一个伪造网络包的详细信息,格式参考Scapy文档
wireshark抓包实例如下:
UDP flood攻击
解释:
- --filename 指定回放的报文
示例这里已经准备好一份事先设定好udp报文
wireshark抓包实例如下:
TCP syn flood攻击
解释:
- -t 指定攻击类型,这里7表示tcp syn flood,除此之外,还有arp、icmp、udp攻击,详细参考代码注释
- -n表示发包数量,即伪造n个网络数据包,这里发包数量10个
- --pcapwrite 1表示保存伪造的网络数据包,保存于脚本目录下,生成一个attack_packet文件夹
- --ipsrc表示伪造指定子网ip作为源IP地址
wireshark抓包实例如下:
ARP flood攻击
解释:
-
-t 指定攻击类型,这里9表示arp flood,除此之外,还有tcp、icmp、udp攻击,详细参考代码注释
-
-n表示发包数量,即伪造n个网络数据包,这里发包数量10个
-
-d表示目的主机ip地址,即受害者的主机ip,这里的目的ip地址是192.168.1.47
-
-i表示指定本地网络适配器,即网卡的名称,这里是网卡名称为以太网
-
--pcapwrite 1表示保存伪造的网络数据包,保存于脚本目录下,生成一个attack_packet文件夹
打开本地生成的pcap文件
需要注意的地方:
- 伪造的网络数据需指定网卡发送,脚本默认为“以太网”,如果存在多个网卡,它们可能命名为“以太网 2,以太网 3...."
减少攻击表面积
- 不要将一些非必要的应用程序或资源暴露出来,把暴露出来的端口、协议或应用程序关闭,尽量减少可能的攻击点,让我们集中精力执行攻击缓解工作
- 使用防火墙或访问控制列表来控制进来的流量
扩容
- 增大宽度容量或服务器容量,缓解大容量的攻击