我们正在尝试 ntp.conf 文件中的一些 NTP 配置,并想确定 NTP 服务器是否安全。
遵循此处提供的建议:https: //support.ntp.org/Support/AccessRestrictions#Section_6.5.1.2.1。
我们补充道:
IPV4: restrict -4 default limited kod nomodify notrap nopeer noquery
IPv6: restrict -6 default limited kod nomodify notrap nopeer noquery
现在的问题是:根据文档中写的行:
既然你愿意让其他人从你的 ntpd 中获取时间,你会允许他们看到你的服务器状态信息吗(即使这会泄露你的操作系统和 ntpd 版本的信息)?
我们如何确定服务器是否正在发送其状态或其他一些操作系统信息?
此外,如果我们不在限制中添加“noquery”选项有什么区别,我们如何测试有和没有“noquery”选项,即添加这样的选项是否有一些反映?(我们要从安全角度进行测试)
我们可以使用 wireshark 检索状态或操作系统信息来测试我们的 conf 选项吗?
参考 ntpd 实现通过程序ntpq(和只有其作者欣赏的ntpdc )公开了它的许多实现变量。这些在特殊的 NTP 数据包中使用控制协议。控制通道可能会更改 ntpd 配置,尽管这在现代时代很少使用,在现代时代您可以自动将配置文件部署到任意数量的主机。
维护 ntpd 的风险主要是防止 IP 放大到欺骗地址,并保护您的时间同步配置免受网络上未经授权的 IP 地址的更改。
与往常一样,保持补丁可以减轻一些缺陷。通过“monlist”函数进行的放大攻击导致了CVE-2013-5211。这应该是几年前的更新,但请检查您的所有主机是否都在受支持的发行版上,并得到维护者的关注。
对 monlist 的所有关注导致了一些可以轻松扫描它的工具。例如,nmap 脚本 ntp-monlist。
完整的功能列表是为 ntpq 记录的命令。wiki 的 choose-your-own-configuration 中的那些行与 不同
noquery
,它完全拒绝所有 ntpq 查询。保持时间服务运行。例如,该 nmap 脚本不会返回任何内容。对比nomodfy
是一个访问规则,它只控制改变配置的命令。显然nomodify
应该受到严格限制,可能仅限于本地主机。与其他地方的示例配置进行比较,例如您最喜欢的 disto 包中的配置。RHEL 7 的 ntp.conf建议将此作为访问控制的起点:
注意 monlist 缓解措施,即使 ntpd 现在已打补丁。此外,远程主机的默认值无法查询或修改。通过轻微修改,这可以使 NTP 主机准备好为公共互联网提供服务。
自然地,一旦你知道你想要什么 ntp.conf,就部署它。自动配置NTP服务器,在所有主机的模板镜像中进行合理的配置。
所有这些 monlist 讨论都没有涵盖您关于通过 ntp 进行操作系统和平台识别的原始问题。根据 ntpq 文档,构建信息可能会通过
readvar
控制命令出现在系统变量中。就像,到远程服务器:ntpq -c readvar time.example.net
. 虽然这里有一些实现细节需要解码,比如哪个关联 ID 是有问题的 NTP 主机。就个人而言,我不太关心暴露有关 ntpd 的构建信息。有人知道我的 ntpd 是最新的,一些状态机,他们对此无能为力。攻击者会向每台主机喷射伪造的 NTP 数据包,以期进行放大。