拒绝服务
DDoS攻击可以具体分成两种形式:带宽消耗型以及资源消耗型。它们都是透过大量合法或伪造的请求占用大量网络以及器材资源,以达到瘫痪网络以及系统的目的。
1.1带宽消耗型攻击
DDoS带宽消耗攻击可以分为两个不同的层次;洪泛攻击或放大攻击。洪泛攻击的特点是利用僵尸程序发送大量流量至受损的受害者系统,目的在于堵塞其带宽。放大攻击与其类似,是通过恶意放大流量限制受害者系统的带宽;其特点是利用僵尸程序通过伪造的源IP(即攻击目标IP)向某些存在漏洞的服务器发送请求,服务器在处理请求后向伪造的源IP发送应答,由于这些服务的特殊性导致应答包比请求包更长,因此使用少量的带宽就能使服务器发送大量的应答到目标主机上。
1.DNS放大攻击及实验
流量放大攻击常常基于udp协议。
需要进行地址欺骗,伪造原地址。
我们使用dig命令,先进行简单的测试,使用陕西电信的dns服务器(218.30.19.40):
测试百度,发现dns服务器只向我们回了126字节大小的包,与我们发送出去的包大小甚至区别不大。
再测试qq:
发现回包的大小是我们发包的三倍大小:
于是,我们便可以将原地址伪造成攻击目标的地址,再向递归域名查询服务器发起查询,使dns服务器成为流量放大和实施攻击着。利用大量的dns服务器实现DDoS.
实验 伪造dns查询包,进行ddos攻击
这里我们同样使用scapy构造我们需要的包,但是由于dns包基于UDP协议,因此包的构造稍显复杂:
构造IP包头,这里先不修改源地址为攻击目标的地址,我们先完成整个包的构造与测试。
将目的地址设置为dns服务器的地址:
构造udp包头:
构造dns包头与构造dns数据段的内容,确定查询的数据类型,将rd字段与qdcount字段改为1,以便进行递归查询:
构造dns数据段的内容,确定查询的数据类型将q拼接到d的qd字段:
将ip包头,udp包头,dns包进行拼接:
发包,可以看到,dns服务器向我们恢复了大量的查询内容:
抓包结果:
我们可以将源地址伪造为另一台kali虚拟机(192.168.26.132),进行试验。在实际的ddos攻击中,我们一般会指定多个ddos服务器。编写脚本做循环。
2.NTP放大攻击
Ntp(网络时间协议)
Monlist查询回导致我们的机器被利用来做ntp放大攻击,我们查询并关闭这一服务。
(现在ntp的默认配置中已经关闭了这一服务)
发现ntp服务
– nmap -sU -p123 1.1.1.1 / 127.0.0.1
▪ 发现漏洞
查询本机是否开放monlist查询:
– ntpdc -n -c monlist 1.1.1.1
– ntpq -c rv 1.1.1.1
– ntpdc -c sysinfo 192.168.20.5
▪ 配置文件
– /etc/ntp.conf
▪ restrict -4 default kod nomodify notrap nopeer noquery
▪ restrict -6 default kod nomodify notrap nopeer noquery
防御:
加固 NTP 服务
1. 把 NTP 服务器升级到 4.2.7p26
2. 关闭现在 NTP 服务的 monlist 功能,在ntp.conf配置文件中增加`disable monitor`选项
3. 在网络出口封禁 UDP 123 端口
防御 NTP 反射和放大攻击
1. 由于这种攻击的特征比较明显,所以可以通过网络层或者借助运营商实施 ACL 来防御
2. 使用防 DDoS 设备进行清洗
其他攻击方式
UDP洪水攻击(User Datagram Protocol floods)
UDP(用户数据报协议)是一种无连接协议,当数据包通过UDP发送时,所有的数据包在发送和接收时不需要进行握手验证。当大量UDP数据包发送给受害系统时,可能会导致带宽饱和从而使得合法服务无法请求访问受害系统。遭受DDoS UDP洪泛攻击时,UDP数据包的目的端口可能是随机或指定的端口,受害系统将尝试处理接收到的数据包以确定本地运行的服务。如果没有应用程序在目标端口运行,受害系统将对源IP发出ICMP数据包,表明“目标端口不可达”。某些情况下,攻击者会伪造源IP地址以隐藏自己,这样从受害系统返回的数据包不会直接回到僵尸主机,而是被发送到被伪造地址的主机。有时UDP洪泛攻击也可能影响受害系统周围的网络连接,这可能导致受害系统附近的正常系统遇到问题。然而,这取决于网络体系结构和线速。
ICMP洪水攻击(ICMP floods)
ICMP(互联网控制消息协议)洪水攻击是通过向未良好设置的路由器发送广播信息占用系统资源的做法。
死亡之Ping(ping of death)
死亡之Ping是产生超过IP协议能容忍的数据包数,若系统没有检查机制,就会死机。
泪滴攻击
(针对操作系统的漏洞)
每个数据要发送前,该数据包都会经过切割,每个小切割都会记录位移的信息,以便重组,但此攻击模式就是捏造位移信息,造成重组时发生问题,造成错误。