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.
Extensões do kernel em um Mac com Apple Silicon
Kexts devem ser explicitamente ativadas em um Mac com Apple Silicon através 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 SHA384 da lista de kexts autorizadas pelo usuário (UAKL) na LocalPolicy. O deamon 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 SHA384 da estrutura de dados Image4 da AuxKC e o recibo de 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 que não seja possível 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 ser desativadas.
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 serem carregadas usando a configuração do gerenciamento de dispositivos móveis (MDM)
A partir do macOS 10.13.2, os usuários podem usar o MDM 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 com macOS 10.13.2 que esteja registrado no MDM — através do Apple School Manager, Apple Business Manager ou registro no MDM feito pelo usuário.