TFTP反射攻击分析报告

据有关媒体报道,有几位外国安全研究专家发现了一种能够进行DDoS放大攻击的新方法,可以利用TFTP协议来进行放大攻击。如果配置不当的TFTP服务器可以被轻易利用执行反射型DDoS攻击。本文对TFTP反射攻击进行了技术性分析并提出相应的防御方法,供有兴趣的小伙伴一起讨论学习。

偶尔逛了下twitter,了解了一下DDoS新动态。近期出了一个新型反射攻击:TFTP反射攻击。

TFTP反射攻击

TFTP反射攻击

TFTP反射攻击到底是一种什么样的攻击呢,与普通的反射攻击有什么区别,怀着好奇的心,点开了几个链接:

http://www.theregister.co.uk/2016/03/09/trivial_ddos_amplification_method/?mt=1458715578601
http://news.softpedia.com/news/600-000-tftp-servers-can-be-abused-for-reflection-ddos-attacks-501568.shtml?utm_source=feedburner&utm_medium=twitter&utm_campaign=Feed%3A+StidiaSecurityAlertsNews+%28STIDIA+Security+Alerts+%26+News%29

都是只有报道和转载,没有技术细节。唯一的一个提供技术细节的地方:

TFTP技术细节

TFTP技术细节

39刀!会有这么NX的攻击,加重了我的好奇心,一定要看一下,于是默默的关闭了浏览器,从柜子里翻出那本《TCP/IP指南》 卷2,翻到了TFTP协议那一章。

TFTP协议分析

1)简介

TFTP协议全称为Trivial File Transfer Protocol(RFC1350)。目标是在UDP之上上建立一个类似于FTP的但仅支持文件上传和下载功能的传输协议,所以它不包含FTP协议中的目录操作和用户权限等内容。是一个基于UDP的简化版的FTP。

2)TFTP与FTP的区别

FTP的传输采用TCP协议,保证了传输的可靠性;而TFTP的传输采用UDP协议,由于UDP协议的特性,传输的可靠性只能由TFTP协议自己控制,所以他必须处理定时重传、报文丢失检测。

3)TFTP报文类型

读请求(RRQ):从TFTP服务器获取数据的请求;Opcode = 1
写请求(WRQ):向TFTP服务器写数据的请求;Opcode = 2
数据(DATA):TFTP传输的文件数据;Opcode = 3
确认(ACK):对收到的传输文件数据的确认;Opcode = 4
差错(ERROR):错误消息;Opcode = 5
选项确认(OACK):后来协议才加上的,用于确认收到的TFTP选项;Opcode = 6

4)TFTP报文格式

请参考RFC1350或google;

5)TFTP传输文件过程

TFTP通信是基于C/S模式的,传输文件的过程由3个阶段组成:

(1)初始连接:TFTP客户端给服务器发送一个初始请求创建连接,服务器给客户端返回响应,连接建立。
(2)数据传输:连接建立,客户端和服务器交换TFTP报文,一端发送数据,一端确认。
(3)连接终止:当发送并确认了最后一个包含数据的TFTP报文之后,连接就终止了。

整个过程与TCP协议有一些类似,但与TCP协议又有一些不同之处,我们通过对比分析来展示两者的不同之处(如图所示):

TCP与TFTP的不同

TCP与TFTP的不同

(1)红色框内是初始连接的过程:

  • TCP的初始连接:通过三次握手完成;
  • TFTP的初始连接(以RRQ为例): client先发送一个RRQ请求到server的69端口;server收到该请求之后,会(选择一个伪随机的端口,而不是用69端口)给client响应,client收到数据之后,就代表连接建立完成。
  • TFTP建立连接的过程有两点特殊之处:server收到请求之后,会随机选一个源端口响应client;tftp中(RRQ请求)建立连接的过程,会传输1个block的数据。

(2)蓝色框内是数据传输的过程:

  • TCP的数据传输:有一套高效可靠的传输机制,比较复杂。
  • TFTP的数据传输:他采用了一种叫Lock-Step的方式交换数据和确认报文,以上面的RRQ请求为例:server发送第1个data给client,必须收到client回复的ack消息之后才能发送第2个data(类似于下围棋:黑方走一步,白方走一步,直到结束)。显然,这种方式比TCP那种允许连续发送多个报文效率要低。
    • TFTP的重传机制:由于TFTP使用的是不可靠的UDP协议,所以他不能确保发送的任何报文都能真正到达目的地,因此他必须使用定时器来检测并重传报文。

(3)绿色框内是连接终止的过程:

  • TCP的连接终止:采用四次挥手的方式。
  • TFTP的连接终止:当发送方确认了最后一个包含数据的报文之后,连接就终止了。那么发送方是如何确认数据传输结束了呢?TFTP对每个数据块编号,从1开始,每个编号放到携带该编号的报文首部中,用于确认该数据块,以便最出的发送方知道它是否被收到了,只要有足够的数据填充这个报文,发送数据的设备将每次总是发送512字节的数据,当到达文件结束而发送的字节数少于512时,将只发送剩余字节数,如果收到的数据报文字节数为0~511,则表示这是最后一个数据报文,一旦确认,则自动结束。

整个TFTP传输文件的过程,不需要明确的标识如何创建连接,也不需要明确的终止连接,因为两者之间的界限划分的不是很清楚。

6)TFTP文件传输实例分析

为了便于理解TFTP的传输过程,我们通过wireshark抓包来分析一次完整的文件传输过程:

环境:
5.5.5.5:TFTP服务器
5.5.5.100: TFTP客户端

报文分析:

(1)如图所示:1号报文为客户端(5.5.5.100)用59559做为源端口向服务器(5.5.5.5)发送Read Request请求,请求的Opcode为1,请求的文件内容为1.txt,文件类型为netascii。

1号报文

1号报文

(2)如图所示:2 号报文为服务器(5.5.5.5)使用随机的源端口60613向客户端响应的数据报文(Opcode为3,block标号为1)

2号报文

2号报文

(3)如图所示:3号报文为客户端(5.5.5.100)向服务器(5.5.5.5)发送的确认报文(Opcode为4,确认的block标号为1,长度为512字节):

3号报文

3号报文

(4)4、5号报文与2、3号报文相似,block标号为2;

(5)如图所示:6号报文为服务器发送的最后一个报文,长度为40, block标号为3;

6号报文

6号报文

(6)7号报文是对6号报文的确认,至此整个文件传输过程就结束了。

TFTP反射放大攻击分析

1)反射攻击示意图

反射攻击示意图

反射攻击示意图

(1)为什么能反射:由于TFTP是基于UDP传输的,所以只要伪造源向TFTP服务器发送请求,很容易进行反射。
(2)反射过程分析:由上面的抓包可以看出,TFTP发起反射放大攻击,主要是靠第1个RRQ包,因为反射后的data包打到了目标服务器上,而且更换了端口(由69换成随机的),攻击者很难再伪造一个ack包给TFTP服务器以便让服务器发送下一个data。
(3)反射放大倍数:由上面的抓包分析可以看出:客户端发送一个60字节左右的RRQ请求报文,服务器回复的第1个data为558字节,放大倍数大概为9倍。因为反射的data包被打到目标服务器上,而目标服务器不会发送ACK包响应,所以TFTP就会利用他的重传机制,定时重传这个558字节的data,直至超时,所以放大倍数应该是9*N。

2)TFTP反射放大攻击实验

测试环境:

  • 攻击者: 5.5.5.100(linux),攻击工具:伪造RRQ请求的scapy脚本tftp-reflect-attack.py:
伪造RRQ请求

伪造RRQ请求

  • TFTP服务器:5.5.5.5
  • 被攻击的目标:5.5.5.88

测试过程:

(1)如图所示,在脚本tftp-reflect-attack.py中伪造源IP为5.5.5.88,向tftp服务器发送Read Request 请求:

Read Request

Read Request

(2)在5.5.5.5(tftp服务器)上抓包,如图所示:

抓包

抓包

可以看到,服务器收到1个60字节的报文,回复了6个558字节的报文,报文的目的为被攻击目标:5.5.5.88;

(3)在5.5.5.88上抓包,如图所示:

抓包1

抓包1

3)TFTP反射攻击报文分析

(1)client向server的69端口发送一个Read Request请求,协议字段有三个:Opcode、文件名、请求类型。
如下图所示,我们向tftp 服务器发送RRQ请求(Opcode=1,请求文件:1.txt,请求类型:netascii),如图所示:

RRQ

RRQ

(2)server收到请求之后,会向client回复数据,然后等待client确认,如果没有收到client的确认消息,会重传数据。如下图所示,client发送了60字节的数据,server回复了6个558字节的数据,可以有50~60倍的放大效果,相对于普通的反射攻击,这个放大倍数已经不错了;可以看到,server回复数据的源端口是随机的,如图3.3.2所示,server回复的数据用的源端口是54303,并不是他的监听端口69。

client

client

防御方法:

普通的反射攻击(NTP、SSDP等)源端口是固定的,很容易检测出来。但TFTP的反射攻击比较特殊,他反射后的源端口是随机的,给防护设备的检测防护带来了很大的挑战。

通过对报文和协议的分析,TFTP反射报文在应用层有两个特征:
(1)数据长度大小通常是512字节(也存在不足512字节的情况:单个文件小于512字节);
(2)payload前4个字节是:0x00,0x03,0x00,0x01;

我们可以基于这两个特征对报文进行检测过滤(可能会存在误杀,但概率应该比较小)。

参考资料:

1.《TCP/IP指南》卷2
2.http://news.softpedia.com/news/600-000-tftp-servers-can-be-abused-for-reflection-ddos-attacks-501568.shtml?utm_source=feedburner&utm_medium=twitter&utm_campaign=Feed%3A+StidiaSecurityAlertsNews+%28STIDIA+Security+Alerts+%26+News%29
3.http://www.theregister.co.uk/2016/03/09/trivial_ddos_amplification_method/?mt=1458715578601

如果您需要了解更多内容,可以
加入QQ群:486207500
直接询问:010-68438880-8669

Spread the word. Share this post!

Meet The Author

Leave Comment