hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md

6 KiB

Extensões do Kernel do macOS

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Informações Básicas

Extensões do kernel (Kexts) são pacotes com a extensão .kext que são carregados diretamente no espaço do kernel do macOS, fornecendo funcionalidades adicionais ao sistema operacional principal.

Requisitos

Obviamente, isso é tão poderoso que é complicado carregar uma extensão do kernel. Estes são os requisitos que uma extensão do kernel deve cumprir para ser carregada:

  • Ao entrar no modo de recuperação, as extensões do kernel devem ser permitidas para serem carregadas:
  • A extensão do kernel deve ser assinada com um certificado de assinatura de código do kernel, que só pode ser concedido pela Apple. A Apple revisará detalhadamente a empresa e os motivos pelos quais é necessária.
  • A extensão do kernel também deve ser notarizada, permitindo que a Apple a verifique quanto a malware.
  • Então, o usuário root é quem pode carregar a extensão do kernel e os arquivos dentro do pacote devem pertencer ao root.
  • Durante o processo de carregamento, o pacote deve ser preparado em uma localização protegida não-root: /Library/StagedExtensions (requer a permissão com.apple.rootless.storage.KernelExtensionManagement).
  • Finalmente, ao tentar carregá-la, o usuário receberá um pedido de confirmação e, se aceito, o computador deve ser reiniciado para carregá-la.

Processo de Carregamento

Em Catalina era assim: É interessante notar que o processo de verificação ocorre no userland. No entanto, apenas aplicações com a permissão com.apple.private.security.kext-management podem solicitar ao kernel para carregar uma extensão: kextcache, kextload, kextutil, kextd, syspolicyd

  1. A CLI kextutil inicia o processo de verificação para carregar uma extensão
  • Ela se comunicará com o kextd enviando um serviço Mach.
  1. kextd verificará várias coisas, como a assinatura
  • Ele se comunicará com o syspolicyd para verificar se a extensão pode ser carregada.
  1. syspolicyd irá solicitar ao usuário se a extensão ainda não foi carregada anteriormente.
  • syspolicyd informará o resultado ao kextd.
  1. kextd finalmente poderá dizer ao kernel para carregar a extensão

Se kextd não estiver disponível, kextutil pode realizar as mesmas verificações.

Referências

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥