声明:
本文内容仅供学术研究,不作为违法乱纪使用,如有出现违规行为皆与作者、编辑、机构无关。
一、介绍
NTP放大攻击是DDOS的一种形式,它使用NTP服务器将小请求转换为大响应,然后将其定向到受害计算机。
NTP放大使用MONLIST命令。MONLIST命令指示NTP服务器使用使用该服务器的最后600个IP地址进行响应。通过欺骗MONLIST请求的源IP地址,它将使NTP服务器对欺骗的IP地址进行数据响应。您可以想象使用大量NTP服务器。如果所有邮件都发送了相同的MONLIST请求,其中欺骗者IP被欺骗为源地址,则可以将其用作DOS方法。
我显然不容忍这样做,但是尽管找到多少个NTP服务器可以放大数据很有趣。这绝不是一种新的攻击形式,因此您希望许多NTP服务器不响应MONLIST命令。这个怎么运作。
为了确定有多少NTP服务器响应MONLIST命令,我经历了两个单独的阶段。
阶段一 :
第一步是对UDP端口123(NTP端口)执行初始扫描。我使用以下命令使用masscan工具进行了此操作:
./masscan -pU:123 -oX ntp.xml --rate 160000 101.0.0.0-120.0.0.0
我的服务器只有很少的带宽,因此扫描速度很慢。因此,我选择仅在101.0.0.0-120.0.0.0地址范围上执行测试。范围是随机选择的。
扫描完成后,我将得到一个XML文件,其中包含已扫描并打开了端口123的所有设备。由于某种原因,我的masscan输出文件包含许多相同IP地址的重复条目。有时每个地址有100条记录。我创建了一个简单的python脚本,能够解析大型masscan输出文件,并删除所有重复的条目。该脚本将单个条目存储到名为port123.txt的文件中。
我用来执行此操作的脚本可以在下面找到:
from lxml import etree
port = None
address = None
parsedServers = []
#Opens the file used to store single enteries.
outputFile = open('port123.txt', 'a')
#Iterates through the masscan XML file.
for event, element in etree.iterparse('ntp.xml', tag="host"):
for child in element:
if child.tag == 'address':
#Assigns the current iterations address to the address variable.
address = child.attrib['addr']
if child.tag == 'ports':
for a in child:
#Assigns the current iterations port to the port variable.
port = a.attrib[