李林 发自 G1 量子位 出品 | 公众号 QbitAI 没想到,国庆节这天醒来一看,素以“封闭”闻名的苹果公司,竟然在GitHub上公布了旗舰操作系统的XNU内核源代码。 XNU代表的含义是“XNU is Not Unix”(XNU不是Unix),这是一个类似Unix的内核,用在各类苹果Darwin操作系统中,包括电脑系统macOS(以及早先的版本OS X),还有移动操作系统 Twitter上各路网友纷纷表示不敢相信,截个图看看: 不过也有Hacker News用户留言指出,Darwin-XNU也就是OS X/iOS的内核已经通过苹果官方开源过了,这个消息的重点应该是苹果竟然开始用 苹果开源地址在此: https://opensource.apple.com/ GitHub地址在此: https://github.com/apple/darwin-xnu
概述 该漏洞是苹果XNU操作系统内核中网络代码的堆缓冲区溢出问题导致的,iOS和macOS都使用XNU,因此iPhone、iPad和的MacBook均受到影响。 由于没有必要的工具,Kevin无法在调试器中单步执行XNU内核,因此对于mbuf的分配大小没有确切的数值。 而m_mtod这只是XNU内核中不受信任数据的众多来源之一。 使用上述方法进行查询后返回9个结果,其中第一个是漏洞icmp_error,其他8个结果误报的可能性较大。 在XNU上尝试QL 与大多数其他开源项目不同,XNU无法通过查询LGTM获得有用的信息。因为LGTM使用Linux流程构建项目,但XNU只能在苹果电脑上构建。即使在苹果电脑上,构建XNU也非常不容易。 Kevin参考了Jeremy Andrus的博客文章,才得以为三个最新发布的XNU版本手动构建了快照(下载快照10.13.4, 10.13.5,10.13.6)。
【解决方案】 打开网站:opensource.apple.com/source/xnu/ 复制最新版本名(我这里是xnu-7195.81.3) 下载地址:opensource.apple.com/tarballs /xn… (可以参考格式,修改要下的版本号) 下载完会得到一个文件:xnu-7195.81.3.tar。 解压,找到reason.h (xnu-7195.81.3 -> bsd -> sys -> reason.h) 在项目根目录创建文件结构lostFiles -> sys -> reason.h Targets machine/cpu_capabilities.h' file not found 打开网站(前面已经下载过了): opensource.apple.com/tarballs/xn… 找到文件: xnu -7195.81.3/osfmk/machine/cpu_capabilities.h 根目录文件增加 9、'os/tsd.h' file not found 找到文件:xnu-7195.81.3/
Gradle 目录 ( 推荐 ) 到 " C:\Users\octop.gradle\wrapper\dists\gradle-4.1-all " 目录下 , 看到两个目录 , 删除 " 38gmb0xnu6gupohgu61ilzbig services.gradle.org/distributions/gradle-4.1-all.zip 下载完后 放在 " bzyivzo6n839fup2jbap0tjew " 目录下 , 不要放在 " 38gmb0xnu6gupohgu61ilzbig
3.3.2 64 bits on windows 8.1 64 bits 'Darwin Kernel Version 13.3.0: Tue Jun 3 21:27:35 PDT 2014; root:xnu ='mba', release='13.3.0', version='Darwin Kernel Version 13.3.0: Tue Jun 3 21:27:35 PDT 2014; root:xnu
poc代码: # CVE-2018-4407 ICMP DOS # https://lgtm.com/blog/apple_xnu_icmp_error_CVE-2018-4407 # from https 原文地址 https://lgtm.com/blog/apple_xnu_icmp_error_CVE-2018-4407
但是从 10.4.8 开始,苹果开始更广泛地使用 SSE-3 指令集,意味仅仅通过修补 XNU 内核已经无法再兼容只支持 SSE-2 指令集的处理器(如早期的奔腾 4)。 用户可以通过购买 Mac OS X 零售版的安装光盘、打上补丁即可让 XNU 内核运行在普通 Intel PC 上。 向 Chameleon(变色龙)进发 回到 WWDC 2005 上发布的搭载 Intel DTK,内置了一个名为 Boot-132 的 UEFI Bootloader 用于加载 XNU 内核。。 -132 的源码开发了一个初级的 Bootloader,能够为使用 Legacy BIOS 引导的 PC 提供一个“模拟 UEFI”环境用于加载 XNU 内核。 由于变色龙的出现,越来越少的人选择反编译修改 XNU 内核、而是通过 Bootloader 替换 DSDT、注入设备属性和 kext。
该水坑提供了一个 XNU 权限提升漏洞,当时在 macOS Catalina 中未修补。 结合目前的信息来看,有安全专家表示这很可能是一起针对性的网络攻击。 攻击者利用先前披露的 XNU 漏洞(编号为 CVE-2020-27932)和相关漏洞来创建特权提升漏洞,使他们能够在目标 Mac 上获得 root 访问权限。
/xnu-6153.41.3/osfmk/machine/cpu_capabilities.h 提示os/tsd.h file not found 选择. /xnu-6153.41.3/libsyscall/os/tsd.h 提示System/pthread_machdep.h file not found 选择. /xnu-6153.41.3/osfmk/kern/restartable.h 提示Block_private.h file not found 选择.
825.40.1.tar.gz dyld-551.3.tar.gz libauto-187.tar.gz libclosure-73.tar.gz libdispatch-1008.220.2.tar.gz xnu /xnu-4903.221.2/bsd/sys/reason.h`中,按照这个路径找到`reason.h`文件,根据编译错误提示知道,这个`reason.h`文件在路径`sys`下,那么在已创建的`Common /xnu-4903.221.2/osfmk/machine/cpu_capabilities.h 提示'os/tsd.h' file not found 选择. /xnu-4903.221.2/libsyscall/os/tsd.h 提示'pthread/spinlock_private.h' file not found 选择.
这个漏洞本身已经在大约9年前的xnu-1228和xnu-1456之间被提出,应该可以在大多数iOS多核设备上使用,直到iOS 11.4.1(包含在内)版本和MacOS的10.14版本的发布。 AIO系统调用介绍 正如在POSIX.1b中所定义的,XNU内核为用户空间提供不同的系统调用以执行异步的I/O(aio)。 该标准规定各种功能,从而实现诸如 aio_read(), aio_write(), lio_listio(), aio_error(), aio_return(),...由于至少XNU-517以及大多数结构的开头是在 Signal number and value */ int aio_lio_opcode; /* Operation to be performed */ }; 为了执行 I/O请求,XNU MACOS_BUILD int main(int argc, char* argv[]) { crash_kernel(); return 0; } #endif 修复和结论 虽然最新的XNU
# hostinfo Mach kernel version: Darwin Kernel Version 9.0.0d1: Wed Oct 10 00:07:50 PDT 2007; root:xnu
(https://opensource.apple.com/) CFRunloop (https://opensource.apple.com/source/CF/CF-1151.16/) XNU 3248.60.10源码 (http://opensource.apple.com/tarballs/xnu/xnu-3248.60.10.tar.gz) Understanding Crash
动态库共享缓存文件的路径 用于存放抽取结果的文件夹 Mach-O Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序、库的标准格式 属于Mach-O格式的文件类型有 可以在xnu 源码中,查看到Mach-O格式的详细定义(https://opensource.apple.com/tarballs/xnu/) EXTERNAL_HEADERS/mach-o/fat.h EXTERNAL_HEADERS
苹果的 ios 和 mac 基于xnu(xnu is not unix) ,一个混合内核,奠基于卡耐基·梅隆大学开发的 Mach 微软公司 windows 的内核不公开 bsd 内核,苹果
OS X和iOS的核心XNU内核在发生操作系统事件时(如每隔一定时间,唤起系统调用等情况)会切换执行路径。 ; //注意:过多使用多线程,就会消耗大量内存问题,引起大量的上下文切换,大幅度降低系统的响应性能 并行队列(Concurrent Dispatch Queue): iOS和OS X的核心--XNU 另外,当处理结束,应当执行的处理数减少时,XNU内核会结束不再需要的线程。XNU内核仅使用Concurrent Dispatch Queue便可以完美地管理并行执行多个处理的线程。 为了说明线程分配原理,这里假设线程数为4,实测iOS11线程数可达20个,所以想测试的同学,在并发队列中必须追加20个以上的任务 对于Concurrent Dispatch Queue来说,不管生成多少,由于XNU
OS X和iOS的核心XNU内核在发生操作系统事件时(如每隔一定时间,唤起系统调用等情况)会切换执行路径。 ; //注意:过多使用多线程,就会消耗大量内存问题,引起大量的上下文切换,大幅度降低系统的响应性能 并行队列(Concurrent Dispatch Queue): iOS和OS X的核心--XNU 另外,当处理结束,应当执行的处理数减少时,XNU内核会结束不再需要的线程。XNU内核仅使用Concurrent Dispatch Queue便可以完美地管理并行执行多个处理的线程。 为了说明线程分配原理,这里假设线程数为4,实测iOS11线程数可达20个,所以想测试的同学,在并发队列中必须追加20个以上的任务 对于Concurrent Dispatch Queue来说,不管生成多少,由于XNU
uname -a Darwin macbook.local 20.4.0 Darwin Kernel Version 20.4.0: Thu Apr 22 21:46:47 PDT 2021; root:xnu
XNU/Darwin 36. FreeBSD 37. GCC 38. LLVM 39. Babel 40. JVM 41. .NET Core 42. Erlang VM(BEAM) 43.
3.2.1 XNU原型 苹果公司在2000年开始测试OS X的beta版,一个具有开源内核的商用桌面操作系统的承诺难以忽视。 XNU内核是卡内基梅隆大学的Mach微内核、FreeBSD 5.0、一些较新的FreeBSD元素以及苹果公司开发的众多特性的复杂融合。有了这些基础,MAC框架方法和甚至代码是可重用的。 这要求对框架和XNU进行更改。 接下来,覆盖范围扩展到包括Mach任务和IPC。 每个XNU进程将Mach任务(调度、VM)与FreeBSD进程链接在一起,提出了一个问题:MAC框架是Mach还是BSD的一部分? 虽然在架构上有用,但XNU中的Mach-BSD边界是人为的,引用经常跨层,要求MAC框架同时服务于两者。在BSD进程标签上的标签修改被映射到相应的Mach任务标签上。