hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md
2023-06-06 18:56:34 +00:00

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 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. O cli kextutil inicia o processo de verificação para carregar uma extensão
    • Ele falará com o kextd enviando usando um serviço Mach
  2. O kextd verificará várias coisas, como a assinatura
    • Ele falará com o syspolicyd para verificar se a extensão pode ser carregada
  3. O syspolicyd pergunta ao usuário se a extensão não foi carregada anteriormente
    • syspolicyd indicará o resultado ao kextd
  4. O 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