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