Segurança do processo em tempo de execução no iOS e iPadOS
O iOS e iPadOS usam “sandbox”, direitos declarados e Aleatorização do Layout de Espaço de Endereço (ASLR) para ajudar a garantir a segurança no tempo de execução.
Sandbox
Todos os apps de terceiros são “sandboxed” e, portanto, não podem acessar os arquivos armazenados por outros apps ou fazer alterações no dispositivo. O sandbox é projetado para ajudar a impedir que um app colete ou modifique informações armazenadas por outros apps. Cada app possui um diretório inicial exclusivo para seus arquivos, atribuído aleatoriamente quando o app é instalado. Se um app de terceiros precisar acessar informações que não as suas próprias, ele usará os serviços fornecidos explicitamente pelo iOS e iPadOS.
Os arquivos e recursos do sistema também são protegidos dos apps do usuário. A maioria dos arquivos e recursos do sistema do iOS e iPadOS é executada com o usuário não privilegiado “mobile”, assim como todos os apps de terceiros. Toda a partição do sistema operacional é montada como somente leitura. Ferramentas desnecessárias, como serviços de início de sessão remoto, não estão incluídas no software do sistema e as APIs não permitem que apps ampliem seus próprios privilégios para modificar outros apps ou o iOS e iPadOS.
Uso de direitos
O acesso de apps de terceiros a informações do usuário e recursos, como o iCloud e a extensibilidade, é controlado através de direitos declarados. Os direitos são pares chave-valor assinados em um app e permitem a autenticação além dos fatores de tempo de execução, como o ID de usuário UNIX. Os direitos não podem ser alterados, já que são assinados digitalmente. Os direitos são usados extensivamente pelos daemons e apps do sistema para realizar operações privilegiadas específicas que, de outra forma, necessitariam que o processo fosse executado como root. Isso reduz de maneira significativa a possibilidade do aumento de privilégio de um daemon ou app do sistema comprometido.
Além disso, os apps só podem executar processamento em segundo plano através das APIs fornecidas pelo sistema. Isso permite que os apps continuem a funcionar sem prejudicar o desempenho ou afetar drasticamente a duração da bateria.
Aleatorização do Espaço de Endereço
A Aleatorização de Espaço de Endereço (ASLR) ajuda a proteger contra a exploração de erros de corrupção da memória. Os apps integrados usam a ASLR para ajudar a aleatorizar todas as regiões da memória na inicialização. Além do trabalho após a abertura, a ASLR organiza aleatoriamente os endereços de memória do código executável, das bibliotecas do sistema e dos construtos de programação relacionados, reduzindo ainda mais a possibilidade de diversos aproveitamentos. Por exemplo, um ataque return-to-libc tenta enganar um dispositivo para que ele execute um código malicioso através da manipulação dos endereços das bibliotecas de contêineres e do sistema. A aleatorização do posicionamento desses itens dificulta a execução do ataque, especialmente em larga escala. O Xcode e os ambientes de desenvolvimento para iOS ou iPadOS, compilam automaticamente os programas de terceiros com o suporte à ASLR ativo.
Recurso Nunca Executar
O iOS e iPadOS fornecem uma proteção ainda maior através do recurso Nunca Executar (XN) do ARM, o qual marca páginas de memória como não executáveis. As páginas de memória marcadas como graváveis e executáveis podem ser usadas por apps apenas sob condições rigorosamente controladas: o kernel verifica a presença de direitos dinâmicos de assinatura de código somente da Apple. Mesmo assim, apenas uma única chamada mmap
pode ser feita para solicitar uma página executável e gravável, que recebe um endereço aleatorizado. O Safari usa essa funcionalidade em seu compilador dinâmico JavaScript (JIT).