macOS Kernel & System Extensions
Reading time: 5 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.
XNU Kernel
O nĂșcleo do macOS Ă© o XNU, que significa "X is Not Unix". Este nĂșcleo Ă© fundamentalmente composto pelo microkernel Mach (que serĂĄ discutido mais adiante), e elementos da Berkeley Software Distribution (BSD). O XNU tambĂ©m fornece uma plataforma para drivers de kernel atravĂ©s de um sistema chamado I/O Kit. O nĂșcleo XNU Ă© parte do projeto de cĂłdigo aberto Darwin, o que significa que seu cĂłdigo-fonte Ă© acessĂvel livremente.
Do ponto de vista de um pesquisador de segurança ou desenvolvedor Unix, macOS pode parecer bastante semelhante a um sistema FreeBSD com uma GUI elegante e uma sĂ©rie de aplicativos personalizados. A maioria dos aplicativos desenvolvidos para BSD serĂĄ compilada e executada no macOS sem precisar de modificaçÔes, jĂĄ que as ferramentas de linha de comando familiares aos usuĂĄrios de Unix estĂŁo todas presentes no macOS. No entanto, como o nĂșcleo XNU incorpora Mach, existem algumas diferenças significativas entre um sistema tradicional semelhante ao Unix e o macOS, e essas diferenças podem causar problemas potenciais ou fornecer vantagens Ășnicas.
VersĂŁo de cĂłdigo aberto do XNU: https://opensource.apple.com/source/xnu/
Mach
Mach Ă© um microkernel projetado para ser compatĂvel com UNIX. Um de seus princĂpios de design chave era minimizar a quantidade de cĂłdigo executando no espaço do nĂșcleo e, em vez disso, permitir que muitas funçÔes tĂpicas do nĂșcleo, como sistema de arquivos, rede e I/O, executem como tarefas de nĂvel de usuĂĄrio.
No XNU, Mach Ă© responsĂĄvel por muitas das operaçÔes crĂticas de baixo nĂvel que um nĂșcleo normalmente lida, como agendamento de processador, multitarefa e gerenciamento de memĂłria virtual.
BSD
O nĂșcleo XNU tambĂ©m incorpora uma quantidade significativa de cĂłdigo derivado do projeto FreeBSD. Este cĂłdigo executa como parte do nĂșcleo junto com Mach, no mesmo espaço de endereço. No entanto, o cĂłdigo FreeBSD dentro do XNU pode diferir substancialmente do cĂłdigo FreeBSD original porque modificaçÔes foram necessĂĄrias para garantir sua compatibilidade com Mach. O FreeBSD contribui para muitas operaçÔes do nĂșcleo, incluindo:
- Gerenciamento de processos
- Manipulação de sinais
- Mecanismos båsicos de segurança, incluindo gerenciamento de usuårios e grupos
- Infraestrutura de chamadas de sistema
- Pilha TCP/IP e sockets
- Firewall e filtragem de pacotes
Entender a interação entre BSD e Mach pode ser complexo, devido aos seus diferentes frameworks conceituais. Por exemplo, o BSD usa processos como sua unidade fundamental de execução, enquanto Mach opera com base em threads. Essa discrepĂąncia Ă© reconciliada no XNU associando cada processo BSD a uma tarefa Mach que contĂ©m exatamente uma thread Mach. Quando a chamada de sistema fork() do BSD Ă© usada, o cĂłdigo BSD dentro do nĂșcleo utiliza funçÔes Mach para criar uma estrutura de tarefa e thread.
AlĂ©m disso, Mach e BSD mantĂȘm diferentes modelos de segurança: o modelo de segurança do Mach Ă© baseado em direitos de porta, enquanto o modelo de segurança do BSD opera com base em propriedade de processos. Disparidades entre esses dois modelos ocasionalmente resultaram em vulnerabilidades de escalonamento de privilĂ©gios locais. AlĂ©m das chamadas de sistema tĂpicas, tambĂ©m existem traps Mach que permitem que programas de espaço de usuĂĄrio interajam com o nĂșcleo. Esses diferentes elementos juntos formam a arquitetura hĂbrida multifacetada do nĂșcleo do macOS.
I/O Kit - Drivers
O I/O Kit Ă© um framework de driver de dispositivo orientado a objetos e de cĂłdigo aberto no nĂșcleo XNU, que lida com drivers de dispositivo carregados dinamicamente. Ele permite que cĂłdigo modular seja adicionado ao nĂșcleo em tempo real, suportando hardware diversificado.
IPC - Inter Process Communication
macOS IPC - Inter Process Communication
macOS Kernel Extensions
O macOS Ă© super restritivo para carregar ExtensĂ”es de NĂșcleo (.kext) devido aos altos privilĂ©gios com que o cĂłdigo serĂĄ executado. Na verdade, por padrĂŁo, Ă© virtualmente impossĂvel (a menos que um bypass seja encontrado).
Na pĂĄgina seguinte, vocĂȘ tambĂ©m pode ver como recuperar o .kext
que o macOS carrega dentro de seu kernelcache:
macOS Kernel Extensions & Debugging
macOS System Extensions
Em vez de usar ExtensĂ”es de NĂșcleo, o macOS criou as ExtensĂ”es de Sistema, que oferecem APIs em nĂvel de usuĂĄrio para interagir com o nĂșcleo. Dessa forma, os desenvolvedores podem evitar o uso de extensĂ”es de nĂșcleo.
References
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao đŹ grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter đŠ @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositĂłrios do github.