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

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.

macOS IOKit

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.

macOS System Extensions

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