《浅析各类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 安装并启动 ...
随机推荐
- Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试
环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...
- MVC5中Model层开发数据注解
ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数 ...
- jQuery-瀑布流-浮动布局(一
jQuery-瀑布流-浮动布局(一)(延迟AJAX加载图片) 瀑布流:这种布局适合于小数据块,每个数据块内容相近且没有侧重.通常,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部 ...
- linux下拷贝整个目录
该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令一样,功能非常强大. 语法:cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制到目标文件或 ...
- NDK(12)Jni常用函数
参考官方文档 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/ http://docs.oracle.com/javase/7/do ...
- [POJ3352]Road Construction(缩点,割边,桥,环)
题目链接:http://poj.org/problem?id=3352 给一个图,问加多少条边可以干掉所有的桥. 先找环,然后缩点.标记对应环的度,接着找桥.写几个例子就能知道要添加的边数是桥的个数/ ...
- 结构体struct和typedef后面接指针的含义
typedef struct file { ... }FileInfo, *FileP; 上述程序中定义了一个结构体,结构体的名字为file,并且给其指针 取个别名为FileP,所以后续程序中出现Fi ...
- php有些系统会报错或提示 Cannot modify header information - headers already sent by
Warning: Cannot modify header information - headers already sent by (output started at /home/test/do ...
- 真正解决ASP.NET每一个页面首次访问超级慢的问题 (转载)
原文:http://www.afuhao.com/article_articleId-219.shtml 摘要:ASP.NET页面首次打开很慢,但别的页面如果没有访问过,去访问也会慢.你也许认为它是在 ...
- Jqgrid入门-结合Struts2+json实现数据展示(五)
DEMO用的是ssh框架实现的,具体怎么搭建的就不多做说明了.分页表格的数据操作难点就是数据展现.至于增删改直接用hibernate原生的方法实现即可. 初步分析:表格要实现分页,那么 ...