Apple 操作系统 - XNU 内核下 FlowDivert 网络协议漏洞分析

一、前言 Flow Divert 协议在 macOS 中提供了强大的流量管理和重定向功能,广泛应用于 VPN 和其他高级网络控制场景。通过内核扩展和用户态守护进程的协同工作,Flow Divert 允许系统和应用程序动态管理网络流量,增强安全性、隐私保护和网络性能。本文旨在分析FlowDivert模块内出现的历史的漏洞以及引入的新代码所引发的漏洞存在。 二、XNU中网络API函数的调用路径 首先此处拿connect函数来进行简单分析下调用路径,后续会有用到其中一些内容。 int connect(proc_ref_t p, struct connect_args *uap, int32_ref_t retval) { __pthread_testcancel(1); return connect_nocancel(p, (struct connect_nocancel_args *)uap, retval); } 当我们在用户态调用connect函数的时候,系统则会在库里面调用对应的系统调用并进入内核中在内核中,它对应函数的名字依旧是connect()作为函数名,其中三个参数分别是当前进程结构体的引用,以及此处的uap指针则是用户态传给内核态的相关参数,最后则是一个返回值的指针。 int connect_nocancel(proc_t p, struct connect_nocancel_args *uap, int32_ref_t retval) { #pragma unused(p, retval) socket_ref_t so; struct sockaddr_storage ss; sockaddr_ref_t sa = NULL; int error; int fd = uap->s; boolean_t dgram; AUDIT_ARG(fd, uap->s); error = file_socket(fd, &so); if (error != 0) { return error; } ....

2024年06月26日 · 7 分钟 · fmyy

macOS 中四类 TCC BYPASS 绕过案例分析

一、前言 TCC 由 Apple 于 2012 年在 macOS Mountain Lion 上推出,其主要目的是帮助用户配置其应用的隐私设置,当用户引应用请求类型在 TCC 数据库中有记录,则会通过TCC数据库的校验来进行判断是否通过,如果没有则会向用户进行提示申请对应的访问权限。 同时macOS在对用户隐私保护的同时,TCC的保护是其中一个比较重要的点,更新了众多的缓解措施及预防手段。 二、结构 用户通常在 macOS 中的"系统偏好设置"下对其进行管理(系统偏好设置 > 隐私与安全性) 当应用试图执行对隐私访问的行为时,则会触发用户授权,当用户授权之后则会在打开对应的控制开关。 而当系统启动之后,在系统进程中则会出现两个进程,分别以root权限运行的和当前用户权限运行的同一可执行文件,即是用于管控隐私权限的TCC守护进程。 守护进程主要负责处理应用程序对系统资源的访问权限控制,而它会通过访问或者修改如下对象数据库文件来记录用户应用程序的相关隐私特权。 **用户特定数据库:**包含仅适用于特定用户配置文件的存储权限类型;它保存在~/Library/Application Support/com.apple.TCC/TCC.db下,拥有该配置文件的用户可以访问; 系统范围的数据库:包含适用于系统级别的存储权限类型;它保存在 /Library/Application Support/com.apple.TCC/TCC.db下。 macOS系统中通过codesign命令查看目标应用或者可执行文件的签名或者权限。 fmyy@Macbook_M1 UserFrameworks % codesign -dv --entitlements - /System/Library/PrivateFrameworks/TCC.framework/Support/tccd Executable=/System/Library/PrivateFrameworks/TCC.framework/Support/tccd Identifier=com.apple.tccd Format=Mach-O universal (x86_64 arm64e) CodeDirectory v=20400 size=6055 flags=0x0(none) hashes=179+7 location=embedded Platform identifier=15 Signature size=4442 Signed Time=Feb 10, 2024 at 20:26:27 Info.plist entries=13 TeamIdentifier=not set Sealed Resources=none Internal requirements count=1 size=64 ...... [Key] com....

2024年06月12日 · 4 分钟 · fmyy