热门标签 | 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


推荐阅读
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Google在I/O开发者大会详细介绍Android N系统的更新和安全性提升
    Google在2016年的I/O开发者大会上详细介绍了Android N系统的更新和安全性提升。Android N系统在安全方面支持无缝升级更新和修补漏洞,引入了基于文件的数据加密系统和移动版本的Chrome浏览器可以识别恶意网站等新的安全机制。在性能方面,Android N内置了先进的图形处理系统Vulkan,加入了JIT编译器以提高安装效率和减少应用程序的占用空间。此外,Android N还具有自动关闭长时间未使用的后台应用程序来释放系统资源的机制。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
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社区 版权所有