
Integridade do sistema operacional
A segurança está no centro dos softwares dos sistemas operacionais da Apple. Esse design inclui uma raiz de confiança de hardware que permite uma inicialização segura e um processo de atualização de software que é rápido e seguro. Os sistemas operacionais da Apple também fazem uso das capacidades de hardware propositadamente construídas com base no silício para ajudar a impedir a exploração durante a execução do sistema operacional. Esses recursos do tempo de execução protegem a integridade do código confiável enquanto ele é executado. O software dos sistemas operacionais da Apple ajuda a mitigar técnicas de ataque e exploração, sejam essas oriundas de um app malicioso, da web ou de qualquer outro canal. As proteções na lista a seguir estão disponíveis em dispositivos com SoCs compatíveis projetados pela Apple, incluindo iOS, iPadOS, macOS em um Mac com Apple Silicon, tvOS, visionOS e watchOS.
Recurso | A10 | A11, S3 | A12–A14 S4–S10 | A15–A18 | M1 | M2–M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
Exigência de Integridade da Memória com a Extensão de Etiquetagem de Memória Aprimorada |
|
|
|
|
|
|
|
1: o Monitor de Tabela de Página Segura (SPTM) é compatível com os SoCs A15 e M2 ou posteriores e substitui a Camada de Proteção de Página nas plataformas compatíveis.
2: a Camada de Proteção de Página (PPL) e o Monitor de Tabela de Página Segura (SPTM) exigem a execução de código assinado e confiável em todas as plataformas (com exceção do macOS, que é projetado para executar qualquer código). Todas as outras propriedades de segurança, incluindo a proteção de tabelas de páginas, estão presentes em todas as plataformas.
Proteção da Integridade do Kernel
Depois que o kernel do sistema operacional completa a inicialização, a Proteção da Integridade do Kernel (KIP) é ativada para ajudar a impedir modificações do código do kernel e de drivers. O controlador de memória fornece uma região protegida de memória física que é usada pelo iBoot para carregar o kernel e as extensões do kernel. Após a conclusão da inicialização, o controlador de memória recusa gravações na região da memória física protegida. A Unidade de Gerenciamento de Memória (MMU) do Processador de Aplicativos é configurada para ajudar a impedir o mapeamento de código privilegiado a partir da memória física fora da região de memória protegida e para impedir mapeamentos graváveis da memória física dentro da região de memória do kernel.
Para impedir a reconfiguração, o hardware usado para ativar a KIP é bloqueado após a conclusão do processo de inicialização.
Restrições de Permissões Rápidas
A partir do Apple A11 Bionic e SoCs S3, uma nova primitiva de hardware foi apresentada. Essa primitiva, Restrições de Permissões Rápidas, inclui um registro de CPU que restringe rapidamente as permissões por thread. Com as Restrições de Permissões Rápidas (também chamadas de registros APRR), sistemas operacionais compatíveis podem remover permissões de execução da memória — sem o custo de uma chamada de sistema e uma consulta ou descarte da tabela de páginas. Esses registros fornecem mais um nível de mitigação de ataques da web, particularmente para o código compilado no tempo de execução (compilação dinâmica), já que a memória não pode ser executada eficientemente ao mesmo tempo que está sendo lida ou gravada.
Proteção da Integridade do Coprocessador do Sistema
O firmware do coprocessador lida com muitas tarefas críticas do sistema — por exemplo, com o Secure Enclave, o processador do sensor de imagens e o coprocessador de movimento. Sendo assim, sua segurança é parte essencial da segurança do sistema como um todo. Para impedir modificações ao firmware do coprocessador, a Apple usa um mecanismo chamado Proteção da Integridade do Coprocessador do Sistema (SCIP).
A SCIP funciona de forma similar à KIP: no momento da inicialização, o iBoot carrega o firmware de cada coprocessador em uma região de memória protegida, reservada e separada da região da KIP. O iBoot configura a unidade de memória de cada coprocessador para ajudar a impedir:
Mapeamentos executáveis fora da sua parte da região de memória protegida
Mapeamentos graváveis dentro da sua parte da região de memória protegida
Também no momento da inicialização, o sistema operacional do Secure Enclave é usado para configurar a SCIP para o Secure Enclave. Depois que o processo de inicialização é concluído, o hardware usado para ativar a SCIP é bloqueado. Isso é projetado para impedir a reconfiguração.
Códigos de Autenticação de Ponteiros
Códigos de Autenticação de Ponteiros (PACs) são usados para proteger contra a exploração de erros de corrupção de memória. O software do sistema e os apps integrados usam PACs para ajudar a impedir a modificação dos ponteiros de função e endereços de retorno (ponteiros de código). O PAC usa cinco valores secretos de 128 bits para assinar instruções e dados do kernel, e cada processo do espaço do usuário possui suas próprias chaves B. Os itens usam sal e assinaturas conforme indicado a seguir.
Item | Chave | Sal |
|---|---|---|
Endereço de retorno de função | IB | Endereço de armazenamento |
Ponteiros de função | IA | 0 |
Função de chamada de bloco | IA | Endereço de armazenamento |
Ponteiro de descrição de bloco | DA | Endereço de armazenamento + 0xC0BB |
Cache de métodos de Objective-C | IB | Endereço de armazenamento + Classe + Seletor |
Ponteiro isa em Objetive‑C | DA | Endereço de armazenamento + 0x6AE1 |
Ponteiro super em Objetive‑C | DA | Endereço de armazenamento + 0xB5AB |
ivars do tipo seletor em Objective‑C | DB | Endereço de armazenamento + 0x57C2 |
Ponteiro da classe de dados somente leitura em Objetive‑C | DA | Endereço de armazenamento + 0x61F8 |
Entradas em tabelas virtuais de C++ | IA | Endereço de armazenamento + hash (nome do método truncado) |
Ponteiros de tabelas virtuais de C++ | DA | Endereço de armazenamento + hash (nome derivado da v‑table base) |
Etiqueta GoTo calculada | IA | Hash (nome da função) |
Estado de threads do kernel | GA | • |
Registradores de estado de threads do usuário | IA | Endereço de armazenamento |
O valor da assinatura é armazenado nos bits de preenchimento não utilizados no início do ponteiro de 64 bits. A assinatura é verificada antes do uso e o preenchimento é restaurado para ajudar a garantir que o endereço do ponteiro possa ser usado. A falha na verificação resulta em aborto. Essa verificação aumenta a dificuldade de vários ataques, como o de programação orientada a retorno (ROP), o qual procura enganar o dispositivo para que execute um código existente de maneira maliciosa ao manipular endereços de retorno de função armazenados na pilha.
Camada de Proteção de Página
A Camada de Proteção de Página (PPL) no iOS, iPadOS, visionOS e watchOS é projetada para impedir que o código no espaço do usuário seja modificado após a conclusão da verificação da assinatura do código. Aproveitando a KIP e as Restrições de Permissões Rápidas, a PPL gerencia as substituições de permissões da tabela de páginas para garantir que apenas a PPL possa alterar as páginas protegidas que contêm o código do usuário e as tabelas de páginas. O sistema fornece uma enorme redução da superfície de ataque ao oferecer suporte à exigência da integridade do código em todo o sistema, mesmo no caso de um kernel comprometido. Essa proteção não é oferecida no macOS porque a PPL é aplicável apenas a sistemas onde todo o código executado deve ser assinado.
Monitor de Tabela de Página Segura e Monitor de Execução de Confiança
O Monitor de Tabela de Página Segura (SPTM) e o Monitor de Execução de Confiança (TXM) no iOS, iPadOS, macOS e visionOS são projetados para trabalhar em conjunto para proteger as tabelas de páginas em processos do usuário e do kernel contra modificação. Incluindo casos em que invasores têm capacidades de gravação no kernel e podem contornar as proteções de fluxo de controle. Para fazer isso, o SPTM usa um nível de privilégio mais alto que o kernel e um TXM de menor privilégio para aplicar efetivamente as políticas que regem a execução do código. Esse sistema é projetado para que um comprometimento no TXM não se traduza automaticamente no contorno do SPTM devido a essa separação de privilégios e à relação de confiança entre eles. Nos SoCs A15 e M2 ou posteriores, o SPTM (juntamente com o TXM) substitui a PPL, o que reduz a superfície de ataque e independe da confiança do kernel, mesmo durante o início do processo de inicialização. O SPTM depende de novas primitivas de silício que são uma evolução das Restrições de Permissões Rápidas usadas pela PPL e que estão disponíveis apenas nos processadores relacionados na tabela acima.
Exigência de Integridade da Memória
A Exigência de Integridade da Memória (MIE) é uma defesa abrangente de segurança da memória para as plataformas Apple, disponível nos processadores A19 e M5 ou posteriores. A MIE é construída sobre a robusta base fornecida pelos alocadores de memória segura da Apple, combinados à Extensão de Etiquetagem de Memória Aprimorada (EMTE) no modo síncrono e apoiada por extensas políticas de Exigência de Confidencialidade de Etiquetas. A MIE é construída no Apple Silicon e oferece uma inigualável proteção de segurança da memória em superfícies de ataque importantes, incluindo o kernel, enquanto mantém a potência e o desempenho que os usuários esperam. Para obter mais informações, consulte Exigência de Integridade da Memória: uma visão completa para a segurança da memória em dispositivos Apple (em inglês), no blog Apple Security Research.
Extensão de Etiquetagem de Memória
A Arm publicou a especificação Extensão de Etiquetagem de Memória (MTE) em 2019 como uma ferramenta de hardware para ajudar a encontrar bugs de corrupção de memória. A MTE é um sistema de etiquetagem e verificação de etiquetas de memória em que cada alocação de memória é etiquetada com um segredo. O hardware garante que os pedidos de acesso posteriores à memória sejam concedidos apenas se o pedido contiver o segredo certo. Se os segredos não forem iguais, o app falha e registra‑se o evento. Isso permite que desenvolvedores identifiquem os erros de corrupção de memória assim que ocorrem.
Extensão de Etiquetagem de Memória Aprimorada
A EMTE tapa os buracos que impedem que a MTE seja uma defesa ativa, incluindo a compatibilidade somente com o modo síncrono mais seguro. Além disso, o acesso à memória não etiquetada desde uma região de memória etiquetada requer o conhecimento da etiqueta da região, o que dificulta consideravelmente que invasores transformem os erros do tipo fora dos limites na memória etiquetada dinâmica numa forma de evitar a EMTE com a modificação direta das alocações sem etiquetas.
Exigência de Confidencialidade de Etiquetas
A Exigência de Confidencialidade de Etiquetas protege a implementação dos alocadores de segurança contra as ameaças técnicas e guarda a confidencialidade das etiquetas da EMTE, incluindo contra os ataques de canal lateral e de execução especulativa. O Monitor de Tabela de Página Segura protege o depósito do alocador do kernel e o armazenamento de etiquetas. O sistema também garante que, quando o kernel acessa a memória em nome de um aplicativo, ele esteja sujeito às mesmas regras de verificação de etiquetas que o espaço do usuário. A Exigência de Confidencialidade de Etiquetas também é projetada para mitigar o vazamento de etiquetas devido a ataques especulativos ou de tempo e inclui até uma proteção contra o Spectre V1.