返回顶部
首页 > 资讯 > 精选 >Apple XNU内核缓冲区溢出预警实例分析
  • 841
分享到

Apple XNU内核缓冲区溢出预警实例分析

2023-06-19 12:06:03 841人浏览 安东尼
摘要

这篇文章给大家介绍Apple XNU内核缓冲区溢出预警实例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。0x00 事件背景2018-10-31 lgtm团队的Kevin Backhouse在lgtm bl

这篇文章给大家介绍Apple XNU内核缓冲区溢出预警实例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

0x00 事件背景

2018-10-31 lgtm团队的Kevin Backhouse在lgtm blog上发布了Apple XNU 内核在处理异常ICMP报文时候触发的缓冲区溢出的一些细节分析,目前作者已经实现可以在同一局域网内使任意受影响的设备直接重启并提及会在之后直接放出验证poc.

0x01 影响版本

Apple iOS 11 及以下: 全设备

Apple MacOS High Sierra, 10.13.6及以下: 全部设备

Apple macOS Sierra, 10.12.6及以下: 全部设备

Apple OS X El Capitan 全版本: 全部设备

0x02 修复建议

Apple ioS 11 及以下
(更新到 iOS 12)

Apple macOS High Sierra, 10.13.6及以下: 全部设备
(安装安全更新 2018-001)

Apple macOS Sierra, 10.12.6及以下: 全部设备
(安装安全更新 2018-005)

Apple OS X El Capitan 全版本: 全部设备
(截至目前Apple尚未发布patch,建议更新至高版本)

0x03 漏洞验证

发送数据包之前

Apple XNU内核缓冲区溢出预警实例分析

发送数据包之后

Apple XNU内核缓冲区溢出预警实例分析

0x04 漏洞触发点

位于公布XNU源码bsd/netinet/ip_icmp.c:339

m_copydata(n, 0, icmplen, (caddr_t)&icp->icmp_ip);

根据作者描述该代码是在函数icmp_error中,该函数的目的是生成错误类型的错误数据包以响应错误的数据包ip,它会遵从ICMP协议发送一个错误的消息

导致错误的数据包的header包含在ICMP消息中,因此在第339行调用m_copydata的目的是将错误数据包的header复制到生成ICMP消息中,但问题在于没有校验该header是否会超过被拷贝缓冲区的大小,进而导致缓冲区溢出。

目标缓冲区是一个mbuf。mbuf是一种数据类型,用于存储传入和传出的网络数据包。
在此代码中,n是传入数据包(包含不受信任的数据),m是传出的ICMP数据包。
我们会看到,icp是指向m的指针。m在第294行或第296行分配:

if (MHLEN > (sizeof(struct ip) + ICMP_MINLEN + icmplen))
 m = m_gethdr(M_DONTWaiT, MT_HEADER);  
else
 m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);

在第314行,mtod用于获取m的数据指针

icp = mtod(m, struct icmp *);

mtod只是一个宏,所以这行代码不会检查mbuf是否足以容纳icmp结构。
此外,数据不会复制到icp,而是复制到icp-> icmp_ip,它与icp的偏移量为+8字节。

作者并没对XNU内核进详细的调试
基于作者在源代码中看到的,作者认为m_gethdr创建了一个可以容纳88个字节的mbuf,对m_getcl不太确定。
根据作者实际实验,发现当icmplen> = 84时会触发缓冲区溢出。

关于Apple XNU内核缓冲区溢出预警实例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Apple XNU内核缓冲区溢出预警实例分析

本文链接: https://lsjlt.com/news/295941.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Apple XNU内核缓冲区溢出预警实例分析
    这篇文章给大家介绍Apple XNU内核缓冲区溢出预警实例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。0x00 事件背景2018-10-31 lgtm团队的Kevin Backhouse在lgtm bl...
    99+
    2023-06-19
  • 缓冲区溢出之LINUX实例
    缓冲区溢出是一种常见的安全漏洞,当输入数据超过了程序分配的缓冲区大小时,多余的数据会溢出到相邻的内存区域,导致程序崩溃或者被攻击者利...
    99+
    2023-09-15
    LINUX
  • 如何进行CVE-2018-6789Exim缓冲区溢出漏洞分析
    本篇文章为大家展示了如何进行CVE-2018-6789Exim缓冲区溢出漏洞分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。0x00 漏洞背景2018年2月5日,DEVCORE团队的安全...
    99+
    2023-06-19
  • Redis缓冲区机制实例分析
    这篇文章主要介绍“Redis缓冲区机制实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis缓冲区机制实例分析”文章能帮助大家解决问题。Redis缓冲区机制Redis中的缓冲区机制就是为了...
    99+
    2023-06-30
  • JVM中内存区域与内存溢出的示例分析
    小编给大家分享一下JVM中内存区域与内存溢出的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java内存区域与内存溢出异常运行时数据区域程序计数器当前线程...
    99+
    2023-06-17
  • Node.js缓冲区(Buffer)模块的方法及实例分析
    二进制流是大量的二进制数据的集合。由于通常情况下二进制流的大小挺大的,因此二进制流一般不会一起运送,而会在运输前切分成小块然后逐一发送。 当数据处理单元暂时不再接收其他数据流时,剩余...
    99+
    2024-04-02
  • Netty对JDK缓冲区中内存池零拷贝优化的示例分析
    这篇文章主要介绍Netty对JDK缓冲区中内存池零拷贝优化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!NIO中缓冲区是数据传输的基础,JDK通过ByteBuffer实现,Netty框架中并未采用JDK原生...
    99+
    2023-06-04
  • 【Linux】基础IO --- 内核级和用户级缓冲区、磁盘结构、磁盘的分治管理、block group块组剖析…
    出身寒微,不是耻辱。能屈能伸,方为丈夫。 文章目录 一、缓冲区(语言级:IO流缓冲,内核级:块缓冲)1.观察一个现象2.理解缓冲区存在的意义(节省进程IO数据的时间)3.语言级缓冲区的刷新策略(三种策略,两种特殊情况)4.语言级缓...
    99+
    2023-08-18
    linux 运维 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作