热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【漏洞分析】CVE20169311:NTPD漏洞可以引发拒绝服务

翻译:overXsky预估稿费:100RMB投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿前言许多设备的使用都离不开网络,其中,用来同步网络上各种设备时间使用的是网络时间协议(N

http://p0.qhimg.com/t01114bd023aba03a99.jpg

翻译:overXsky

预估稿费:100RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


前言

许多设备的使用都离不开网络,其中,用来同步网络上各种设备时间使用的是网络时间协议(Network Time Protocol)。网络时间协议守护进程(Network Time Protocol Daemon ,NTPD)是此协议的开源实现。在过去的几个月内,NTPD被陆续报道了大量的漏洞,其中一个就是CVE-2016-9311——可以引发崩溃从而导致拒绝服务。在这篇文章中,我们将从细节着手分析这个漏洞。


查找更改

通过检查补丁程序,我们在ntp_control.c文件中找到了 “report_event” 函数,它就是该漏洞的修复程序。 补丁比较工具显示如下(摘自http://bugs.ntp.org/attachment.cgi?id=1460&action=diff):

http://p2.qhimg.com/t015e21611977ea0bb1.png

图一左侧显示的是未修补的代码,右侧是已修补的代码。

在易受攻击的代码中有一个判断语句:

INSIST(peer!=NULL)

INSIST函数定义在ntp_assert.h头文件中,如果peer==NULL,那么返回值为真,判断语句失败,NTPD将崩溃。

对比修复后的代码可以明显的发现,原来的INSIST(peer!=NULL)判断语句被替换成了简单的if判断:

if ((err & PEER_EVENT) && !peer)
    return

if语句会检查“peer”的值是否为NULL,如果是的话它就简单地返回并防止崩溃。


分析根本原因

要触发这个漏洞,程序流需要执行到“report_event”函数,并给它传送特定的参数值以便使得INSISIT函数判断失败从而崩溃。

当NTPD接收到一个数据包时,它会去调用ntp_proto.c中的接收函数“receive”。接收函数会对接收到的分组执行各种检查,其中一项检查是确认接收到的加密否定应答(crypto-NAK)分组是否有效。

http://p6.qhimg.com/t017d27d1a34d72ae7d.png

如果NTPD收到一个无效的NAK数据包,它将调用易受攻击的函数“report_event”。该函数会查找数据包中陷阱(trap)的数量,如果没有在NTPD上配置过陷阱(关于NTPD traps可以参考这里),该函数将简单返回,后面易受攻击的代码片段也不会被执行。

http://p8.qhimg.com/t01055b249510d5474c.png

当且仅当在NTPD中启用陷阱时,才能利用此漏洞。 要检查NAK数据包是否有效会用到“valid_NAK” 函数,它被定义在ntp_proto.c文件中,代码如下:

http://p6.qhimg.com/t019d019f69fb930a6e.png

从上面的代码中可以总结出,一个数据包符合以下几点特征中的任何一个即为无效:

1. 模式不是MODE_SERVER、MODE_ACTIVE和MODE_PASSIVE。

2. keyid不为0。

3. peer为NULL,或者peer没有密钥。

4. ORIGIN不匹配。

如果NTPD上启用了陷阱功能,触发此漏洞只需要构造一个没有peer存在(即peer=NULL)的“无效NAK”数据包然后发送即可。为了证实这一点,我们用调试器来对未修复版本代码进行了测试,如下所示,NTPD因为判断失败而崩溃了:

http://p7.qhimg.com/t01651c684111494416.png


总结

此漏洞在NTPD启用了陷阱功能的情况下可以被利用来触发崩溃引起拒绝服务。NTPD默认情况下不启用陷阱。利用此漏洞不需要授权。

防范此漏洞可以通过安装最新的补丁程序或更新最新版本的NTPD,或者使用McAfee网络安全平台等防护软件。


参考文献

NTP Security Notice

CVE-2016-9311 on NVD

CERT/CC Vulnerability Note VU#633847


推荐阅读
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • Navicat Premium中MySQL用户管理:创建新用户及高级设置
    本文作为Navicat Premium用户管理系列的第二部分,主要介绍如何创建新的MySQL用户,包括设置基本账户信息、密码策略、账户限制以及SSL配置等。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • Cadence SPB 16.5 安装指南与注意事项
    本文提供了详细的 Cadence SPB 16.5 安装步骤,包括环境配置、安装过程中的关键步骤以及常见问题的解决方案。适合初次安装或遇到问题的技术人员参考。 ... [详细]
  • 本文介绍了JSP的基本概念、常用标签及其功能,并通过示例详细说明了如何在JSP页面中使用Java代码。 ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • 一键LNMP配置SSL证书实现全站HTTPS访问
    许多网站搭建者选择了便捷的一键LNMP安装包,但在网站部署完成后,配置SSL证书以支持HTTPS访问是一个不可或缺的步骤。本文将详细介绍如何通过简单的步骤完成这一过程。 ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • 吴石访谈:腾讯安全科恩实验室如何引领物联网安全研究
    腾讯安全科恩实验室曾两次成功破解特斯拉自动驾驶系统,并远程控制汽车,展示了其在汽车安全领域的强大实力。近日,该实验室负责人吴石接受了InfoQ的专访,详细介绍了团队未来的重点方向——物联网安全。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
author-avatar
babe
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有