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

4.1 KiB

Extensões de Kernel do macOS

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

Informações Básicas

As extensões de 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 de kernel. Estes são os requisitos para que uma extensão de kernel seja carregada:

  • Ao entrar no modo de recuperação, as extensões de kernel precisam ser autorizadas a serem carregadas:
  • A extensão de kernel deve ser assinada com um certificado de assinatura de código do kernel, que só pode ser concedido pela Apple. Que irá revisar detalhadamente a empresa e as razões pelas quais isso é necessário.
  • A extensão de kernel também precisa ser notarizada, a Apple poderá verificá-la em busca de malware.
  • Em seguida, o usuário root é o único que pode carregar a extensão de kernel e os arquivos dentro do pacote devem pertencer ao root.
  • Finalmente, ao tentar carregá-lo, o usuário será solicitado a confirmar e, se aceito, o computador deve reiniciar para carregá-lo.

Processo de Carregamento

De volta ao Catalina, era assim: É interessante notar que o processo de verificação ocorre em userland. No entanto, apenas aplicativos 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. kextutil cli inicia o processo de verificação para carregar uma extensão
    • Ele falará com kextd enviando usando um serviço Mach
  2. kextd verificará várias coisas, como a assinatura
    • Ele falará com syspolicyd para verificar se a extensão pode ser carregada
  3. syspolicyd pergunta ao usuário se a extensão não foi carregada anteriormente
    • syspolicyd indicará o resultado para kextd
  4. kextd finalmente poderá indicar ao kernel para carregar a extensão

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

Referências