macOS Kernel & System Extensions

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) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o 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.

{{#ref}} macos-iokit.md {{#endref}}

IPC - Inter Process Communication

{{#ref}} ../macos-proces-abuse/macos-ipc-inter-process-communication/ {{#endref}}

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:

{{#ref}} macos-kernel-extensions.md {{#endref}}

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.

{{#ref}} macos-system-extensions.md {{#endref}}

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) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks