5 KiB
macOS Kernel Extensions
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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 funcionalidade adicional ao sistema operacional principal.
Requisitos
Obviamente, isso é tão poderoso que é complicado carregar uma extensão de kernel. Estes são os requisitos que uma extensão de kernel deve atender para ser carregada:
- Ao entrar no modo de recuperação, as extensões de kernel devem ser permitidas para serem carregadas:
- A extensão de kernel deve ser assinada com um certificado de assinatura de código de kernel, que só pode ser concedido pela Apple. Quem revisará em detalhes a empresa e as razões pelas quais é necessário.
- A extensão de kernel também deve ser notarizada, a Apple poderá verificá-la em busca de malware.
- Então, o usuário root é quem pode carregar a extensão de kernel e os arquivos dentro do pacote devem pertencer ao root.
- Durante o processo de upload, o pacote deve ser preparado em um local protegido não-root:
/Library/StagedExtensions
(requer a concessãocom.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 em userland. No entanto, apenas aplicativos com a concessão com.apple.private.security.kext-management
podem solicitar ao kernel que carregue uma extensão: kextcache
, kextload
, kextutil
, kextd
, syspolicyd
kextutil
cli inicia o processo de verificação para carregar uma extensão
- Ele se comunicará com
kextd
enviando usando um serviço Mach.
kextd
verificará várias coisas, como a assinatura
- Ele se comunicará com
syspolicyd
para verificar se a extensão pode ser carregada.
syspolicyd
pedirá ao usuário se a extensão não foi carregada anteriormente.
syspolicyd
relatará o resultado parakextd
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
- https://www.makeuseof.com/how-to-enable-third-party-kernel-extensions-apple-silicon-mac/
- https://www.youtube.com/watch?v=hGKOskSiaQo
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.