《浅析各类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 安装并启动 ...
随机推荐
- QT里使用sqlite的问题,好多坑
1. 我使用sqlite,开发机上好好的,测试机上却不行.后来发现是缺少驱动(Driver not loaded Driver not loaded),代码检查了又检查,发现应该是缺少dll文件(系统 ...
- 89. Gray Code
题目: The gray code is a binary numeral system where two successive values differ in only one bit. Giv ...
- 80. Remove Duplicates from Sorted Array II
题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For ex ...
- mysql优化 mysql explain
一篇文章: 使用use index优化sql查询 先看一下arena_match_index的表结构,大家注意表的索引结构CREATE TABLE `arena_match_index` ( ` ...
- OSI七层协议
- Linux 线程属性函数总结
1.初始化一个线程对象的属性 int pthread_attr_init(pthread_attr_t *attr); 返回值:若是成功返回0,否则返回错误的编号 形 参: attr 指向一个线程属性 ...
- Java Swing中Substance常用皮肤
AutumnSkin; BusinessSkin; BusinessBlackSteelSkin; BusinessBlueSteelSkin; ChallengerDeepSkin; CremeSk ...
- Asp.Net多线程用法1
Asp.Net多线程简单用法 一个web页面 default.aspx 里面有两个控件GridView1,GridView2,通过两个线程分别加载绑定数据. protected void Page_L ...
- SQL Server索引怎么用
什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K .为了加快查找的速度,汉语字(词)典一般都有按拼音. ...
- TIOBE 2015年5月编程语言排行榜 Visual Studio系列在上升
TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网上有经验的程序员. 课程和第三方厂商的数量.排名使用著名的搜索引擎(诸如 Google.MSN.Yahoo ...