《浅析各类DDoS攻击放大技术》
原文链接:http://www.freebuf.com/articles/network/76021.html
FreeBuf曾报道过,BT种子协议家族漏洞可用作反射分布式拒绝服务攻击(DRDoS attacks)。此种攻击方式并非主流,以公开的论文看来效果堪比DNS,而NTP攻击则更胜一筹。
0×00 背景
攻击者可以利用BT种子协议(微传输协议[uTP],分布hash平台[DHT],消息流加密[MSE],BT种子同步[BTSync])来反射放大结点间传输量。
实验显示,攻击者可以利用BT结点将一个包放大50倍,如果是BTsync将达到120倍。另外,我们发现最流行的BT流客户端正是最脆弱的,比如uTorrent、Mainline、Vuze等。
公开DNS解析和NTP协议MONLIST命令攻击,两种攻击方法依靠其协议的广泛应用,影响范围不言而喻。
混合放大,利用通用协议的攻击方式很稳定,通过标准的结点发现机制很快找到放大点。由于其利用的动态端口范围和握手加密,攻击不会被常规防火墙发现,只有进行深度的包检查才能发现。
0×01 什么是DRDoS攻击
攻击者不把通信包直接发给受害者,而是发给放大器(amplifiers)然后反射给受害者。攻击者利用了网络协议漏洞进行IP欺骗。可以由一个或多个攻击结点开始,下图简单勾画出了DRDoS的攻击模型:
1、P点在攻击前确认放大器的位置,这取决于攻击者利用的协议,强大的扫描工具比如 ZMap可以帮助确认可用放大器。这步是以后步骤的基础,保证以后的攻击效率;
2、接着发送小的Ba 给放大器PA,攻击者伪造包源地址是PV的IP地址,然后PA反馈一个大的包Bv给PV。
BT流是今天世界最常用的P2P协议,协议的新颖之处在于解决了free riding problem 和 last piece problem 。为了克服第一个困难,BT流应用了一个奖赏机制称为窒息算法导致了tit-for-tat-ish 分享方法。BT流通过稀有片优先算法解决了第二个问题。
0×02 UTP协议攻击
最初,TCP是握手和节点通信的默认协议。TCP在P2P环境有很多优点,它分布了可用带宽给每个连接点,通常得到比其他应用更多的带宽。因此,BT流在后台运行,会被前段的通信结束(例如web 和邮件),所以BT流发明了新的传输协议UTP。
UTP采用了TCP的一些想法,以滑动窗口控制流,按顺序校验信息的完整性,握手建立连接。不同于TCP三次握手,UTP只有两次握手,下图表示结点建立连接的过程。可以看出创建方发出一个ST_SYN包给接受方创建连接,类似于TCP的SYN包。接受方反馈ST_STATE包表示成功接收到,建立方接收到反馈表示双向建立成功。现今大多数的BT客户端把UTP作为默认协议。
UTP建立连接的两次握手,这允许攻击者用伪造的IP地址和放大器建立连接,因为接受方不检查创建方是否接收到了应答。
示意图如下:
一个伪造的带着受害者IP地址的ST_DATA给接收方,接收方相信包中的源IP地址有效,反馈了第一个ST_DATA给受害者,而受害者的IP没有意料到这个包,所以也不会回应它。接收方到时间重传丢失的ST_DATA包,如果连续四次传输未响应则断开连接。
连接建立后BT流需要一次握手作为第一条信息,包括了为扩展保留的字节、hash信息和节点ID。如果客户端接受了握手发现使用了未认证的hash,客户端立刻终结连接。攻击者利用握手包基于UTP两次握手创建放大攻击。
ab两步不赘述了,c步骤 攻击者发送了一个装载了BT流握手信息的ST_DATA包。 这个握手需要活跃的放大器种子hash信息(20字节),握手包最少88字节,如果放大器参与这个种子中,就会反馈步骤d ,d的握手包大于攻击者发送的,因为客户端在UTP包里放入了更多信息。
BT流提供Libtorrent 的扩展协议(LTEP)添加新的扩展而不妨碍默认协议。如果一个攻击者标记支持LTEP 尤其在BEP10中 ,攻击效果会进一步放大而不用增加步骤c握手包的量。对等节点以此扩展信息交换。
0×03 利用数据流加密握手包(MSE)攻击
MSE的目的是混淆BT传输过程,防止受ISP的影响,而不是为了传输安全。尽管它有很多严重的弱点,但它还是被大多数BT客户端使用。
这个协议开始于Diffie-Hellman 密钥的交换 每个节点都产生了768位的公钥 公钥包括0-512位的随机数r 。交换密钥后,包会被RC4算法加密,UTP传输。
这种方法使攻击者不必明确hash信息,发送一个伪造的MSE包(包括768位的公钥没有随机数),客户端随即会反馈随机数和公钥。
结果证明MSE攻击会显著提升效率。进一步说,加密装载Ba和MSE生成的包Bv,熵高的属性,使其难以被ISP或者DPI防火墙发现并封锁。
0×04 深入DNS放大DDoS攻击
DNS反射攻击也能轻易达到千兆的级别。
最初的放大攻击是著名的SMURF攻击,发送ICMP请求给路由网络广播地址,配置发送ICMP给路由下的设备。攻击者欺骗ICMP请求源是受害者的IP,因为ICMP不包括握手,所以目标无从确认源IP是否合法。攻击者放大攻击的效果取决于路由下有多少设备。 不过SMURF攻击是过去的事了,网络管理员已经配置它们的路由器不将ICMP请求发给网络广播地址。
好的放大攻击方法有两个条件:
1、协议没有握手,允许IP源地址伪造(例如ICMP,UDP)
2、对查询的回复要大于查询本身
DNS是核心,无处不在的网络平台就是放大攻击的资源。
DNS基于UDP传输,因此它们的源地址可以伪造并且接收者回应前无从确定真实性。DNS也可以生成更大的反馈,输入 dig ANY www.baidu.com @x.x.x.x(x.x.x.x是公开DNS解析器),这是一个64字节的查询会返回3223字节,攻击效果放大了50倍。讽刺的是,huge DNSSEC 密钥 ——这个被用来增加DNS系统安全性的协议反而成了放大攻击的帮凶。
公开DNS解析器是互联网的悲剧。
如果你用一个DNS解析器确保只返回可信用户的查询,例如你公司的IP空间是10.10.10.0/24 DNS解析器就只返回这个范围IP的查询,而不会回应6.6.6.6的查询信息。
问题就在于许多人运行DNS解析器而不在乎哪个IP地址的人查询。这样的问题已经存在10年之久,发生的事件表明很多不同的僵尸网络为了发现DNS解析器开始枚举互联网IP空间,一旦发现就可利用于DNS放大攻击。中国台湾拥有世界第二多的公开DNS解析器资源。
有这样一个网址可以查询你的DNS http://openresolverproject.org/
世界上有2170万个公开DNS解析器,网站正致力于关闭它们。
解决办法
把recurison设置为no
允许在特定的地址查询,options { allow-query{192.168.1.0/24;};};
0×05 NTP 放大DDoS攻击 400Gbps的技术细节
2014年2月出现一次400Gbps规模的NTP攻击,这类攻击越来越走俏,这次事件可以作为一个好的例子来说明一下这种攻击方法。
首先了解一下基础的结构,NTP放大攻击开始于一个被黑客控制的服务器允许IP欺骗,攻击者生成了很多UDP包欺骗源IP地址使来自特定目标的包出现,这些UDP包发送到支持MONLIST命令的网络时间协议服务器port123。
顺便聊一聊MONLIST命令
它的用处在于返回一个NTP服务器上600个IP地址的列表,所以它可以拿来干坏事。如果一个NTP服务器完全迁移它的表,反馈的信息将被放大206倍。此类攻击中IP地址伪造,UDP不需要握手,理论上有200倍的放大效果。
然而这不仅仅是理论,此次攻击事件中,为了400Gbps的攻击效果攻击者应用了运行在1298个不同网络上的4529台NTP服务器。平均每台NTP服务器产生87Mbps的通信量。值得注意的是攻击者很可能只用了一个能IP欺骗的网络服务器就做成了此次攻击。
NTP服务器支持MONLIST和公开DNS解析器不一样,虽然它们都趋向于多网络连接的服务器。对比而言,NTP 攻击更加的效率,2013年曾有一次几乎玩坏互联网的DDoS攻击被纽约时报报道,利用30956公开DNS解析器,目标Spamhaus产生300Gbps的通信量。NTP攻击只用了1/7的服务器,实现的攻击效果还比Spamhaus事件多1/3。
解决办法:禁止MONLIST命令
黑客攻击的前提是IP地址欺骗,如果你在管理网络,确保遵守BCP38。可以用这个来自MIT的工具检测一下http://spoofer.cmand.org/summary.php
最后如果你觉得NTP不好,那就等待下一个SNMP,但是SNMP理论上有650倍的放大效果,已经看到有黑客跃跃欲试了,Buckle up。
参考资料
https://blog.cloudflare.com/the-ddos-that-almost-broke-the-internet/
https://blog.cloudflare.com/deep-inside-a-dns-amplification-ddos-attack/
https://www.usenix.org/system/files/conference/woot15/woot15-paper-adamsky.pdf
《浅析各类DDoS攻击放大技术》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- cojs 疯狂的魔法树 疯狂的颜色序列 题解报告
疯狂的魔法树 一个各种操作大杂烩的鬼畜数据结构题目 首先我们注意到树的形态是半随机的 我们可以树分块,对树分成若干个块 对于每个块我们维护一个add标记表示增量 维护一个vis标记表示覆盖量 注意标记 ...
- cojs 疯狂的重心 疯狂的机器人 题解报告
疯狂的重心 话说做过幻想乡战略游戏的人应该很容易切掉这道题目吧 我们考虑一棵树如果添加了一个叶子,那么其重心最多向叶子方向移动1的距离 而是否移动我们只需要记录子树中有多少个点就可以判断啦 也就是说这 ...
- c/c++优秀博文
C进阶指南(1):整型溢出和类型提升.内存申请和管理 http://blog.jobbole.com/72830/ 软件开发中应避免的10个问题
- Linux内核的同步机制
本文详细的介绍了Linux内核中的同步机制:原子操作.信号量.读写信号量和自旋锁的API,使用要求以及一些典型示例 一.引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程 ...
- js捕捉浏览器关闭事件-兼容几乎所有浏览器
很多时候我们都在困扰,如何捕获浏览器关闭事件,网上虽然有很多方法,但都不理想,后来终于找到了一个很好地实现方法,大家可以试试哦,支持几乎所有的浏览器 <script type="tex ...
- C#调用Win32 api学习总结
从.NET平台调用Win32 API Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微 ...
- PowerDesinger逆向数据库物理模型及关系图
原文:PowerDesinger逆向数据库物理模型及关系图 利用PowerDesinger生成的数据库物理模型及关系图 收集五年的开发资料下载地址: http://pan.baidu.com/sha ...
- NSDate & NSDateFormatter
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasep ...
- OpenCV源码阅读(2)---matx.h---函数的内联实现
外部矩阵计算函数 namespace internal { template<typename _Tp, int m> struct Matx_DetOp { double operato ...
- 【Effective c++】条款6:若不想使用编译器自动生成的函数就应该明确拒绝
地产中介卖的是房子,其使用的中介软件系统应该有个类用来描述卖掉的房子 class HomeFoeSale { ......} 但是任何房子都是独一无二的,不应该存在两个房子拥有同样的属性,因此以下操作 ...