
Extensão segura do kernel no macOS
A partir do macOS 11, caso extensões de kernel (kexts) de terceiros estejam ativadas, elas não podem ser carregadas no kernel sob demanda. Em vez disso, elas são combinadas em uma Coleção do Kernel Auxiliar (AuxKC), que é carregada durante o processo de inicialização. Em um Mac com Apple Silicon, a medida da AuxKC é assinada na LocalPolicy (em hardwares anteriores, a AuxKC residia no volume de dados). A reconstrução da AuxKC requer a aprovação do usuário e a reinicialização do macOS para carregar as alterações no kernel, além da configuração da inicialização segura como Segurança Reduzida.
Importante: kexts não são mais recomendadas para o macOS. Kexts colocam em risco a integridade e a confiabilidade do sistema operacional e a Apple recomenda que usuários selecionem soluções que não exijam extensão do kernel.
Em um Mac com Apple Silicon
Kexts devem ser explicitamente ativadas em um Mac com Apple Silicon por meio do pressionamento do botão de força ao inicializar para entrar no modo Um recoveryOS Verdadeiro (1TR), reverter para a Segurança Reduzida e selecionar a opção para ativar extensões do kernel. Essa ação também requer que uma senha de administrador seja digitada para autorizar a reversão. A combinação do 1TR com a exigência de senha dificulta que invasores agindo de dentro do macOS via software injetem kexts no macOS que possam ser exploradas para obter privilégios de kernel.
Depois que um usuário autoriza o carregamento de kexts, o fluxo de Carregamento de Extensões do Kernel Aprovado pelo Usuário acima é usado para autorizar a instalação de kexts. A autorização usada para o fluxo acima também é usada para capturar um hash SHA‑384 da lista de kexts autorizadas pelo usuário (UAKL) na LocalPolicy. O daemon de gerenciamento do kernel (kmd) fica então responsável por validar apenas as kexts encontradas na UAKL para incluí‑las na AuxKC:
Se a Proteção da Integridade do Sistema (SIP) estiver ativada, a assinatura de cada kext é verificada antes de ser incluída na AuxKC.
Se a SIP estiver desativada, a assinatura da kext não é exigida.
Essa abordagem permite fluxos de Segurança Permissiva para que desenvolvedores ou usuários que não façam parte do Programa de Desenvolvedor da Apple possam testar kexts antes de serem assinadas.
Depois que a AuxKC é criada, sua medida é enviada ao Secure Enclave para ser assinada e incluída em uma estrutura de dados Image4 que pode ser avaliada pelo iBoot na inicialização. Como parte da construção da AuxKC, um Recibo de kext também é gerado. Esse recibo contém a lista das kexts realmente incluídas na AuxKC, já que o conjunto poderia ser um subconjunto da UAKL caso kexts banidas fossem encontradas. Um hash SHA‑384 da estrutura de dados Image4 da AuxKC e o recibo da kext são incluídos na LocalPolicy. O hash Image4 da AuxKC é usado para verificação extra pelo iBoot na inicialização para ajudar a garantir a impossibilidade de inicializar um arquivo Image4 mais antigo da AuxKC assinado pelo Secure Enclave com uma LocalPolicy mais recente. O recibo de kext é usado por subsistemas como o Apple Pay para determinar se há algum kext carregado no momento que possa interferir com a confiabilidade do macOS. Em caso positivo, as capacidades do Apple Pay podem não ser possíveis.
Extensões do sistema
O macOS 10.15 permite que desenvolvedores estendam as funcionalidades do macOS ao instalar e gerenciar extensões do sistema que são executadas no espaço do usuário, e não no nível do kernel. Por serem executadas no espaço do usuário, as extensões do sistema aumentam a estabilidade e a segurança do macOS. Embora kexts tenham inerentemente acesso total a todo o sistema operacional, as extensões em execução no espaço do usuário recebem apenas os privilégios necessários para realizar suas funções especificadas.
Desenvolvedores podem usar frameworks, incluindo DriverKit, EndpointSecurity e NetworkExtension, para escrever drivers de USB e interface humana, ferramentas de segurança de pontos finais (como para a prevenção de perda de dados ou outros agentes de pontos finais) e ferramentas de VPN e rede — tudo isso sem precisar escrever kexts. Agentes de segurança de terceiros devem ser usados apenas se fizerem uso dessas APIs ou tiverem um planejamento robusto para transicionar em direção a elas e se distanciar de extensões do kernel.
Carregamento de Extensão do Kernel Aprovada pelo Usuário
Para melhorar a segurança, o consentimento do usuário é necessário para o carregamento de extensões do kernel instaladas com o macOS 10.13 ou após sua instalação. Esse processo é conhecido como Carregamento de Extensões do Kernel Aprovado pelo Usuário. A autorização do administrador é necessária para aprovar uma extensão do kernel. As extensões do kernel não exigem autorização caso elas:
Tenham sido instaladas em um Mac com macOS 10.12 ou anterior
Estejam substituindo extensões aprovadas anteriormente
Tenham permissão para ser carregadas sem o consentimento do usuário ao usar a ferramenta de linha de comando
spctl, disponível quando um Mac é inicializado a partir do recoveryOSTenham permissão para ser carregadas por uma configuração do serviço de gerenciamento de dispositivos
Em dispositivos com macOS 10.13.2 ou posterior, os usuários podem usar um serviço de gerenciamento de dispositivos para especificar uma lista de extensões do kernel que podem ser carregadas sem o consentimento do usuário. Essa opção requer um Mac que esteja registrado em um serviço de gerenciamento de dispositivos — por meio do Apple School Manager, Apple Business Manager ou registro no serviço de gerenciamento de dispositivos feito pelo usuário.