Segurança na memória

Insegurança de memória

Bugs de segurança de memória, erros no processamento de memória em linguagens de programação nativas, são o problema mais comum nas bases de código do Android. Elas representam mais de 60% das vulnerabilidades de segurança de alta gravidade e milhões de falhas visíveis para o usuário.

 Bugs de segurança de memória afetam
  a experiência do usuário, os custos e a segurança.
Figura 1: bugs de segurança de memória e o impacto negativo deles na qualidade, segurança e custos

Os bugs de segurança de memória afetam negativamente a qualidade e a estabilidade e representam uma parcela significativa das falhas observadas nos dispositivos do usuário final. Portanto, uma alta densidade de bugs de segurança de memória está diretamente relacionada a uma experiência ruim do usuário.
O código nativo, escrito em linguagens sem proteção de memória, como C, C++ e Assembly, representa mais de 70% do código da plataforma Android e está presente em aproximadamente 50% dos apps da Google Play Store.
Dada a complexidade cada vez maior do código, se deixado sem supervisão, os bugs de segurança de memória aumentarão com o tempo. Portanto, fornecer ao nosso ecossistema ferramentas e tecnologias que possam detectar e mitigar esses bugs é fundamental para nosso sucesso a longo prazo.
Nos últimos anos, trabalhamos em conjunto com nossos parceiros de hardware para desenvolver tecnologias como a marcação de memória Arm e introduzimos o Rust na base de código do Android.
Essas tecnologias vão acelerar nosso caminho para a segurança da memória e ajudarão o setor de software a resolver um problema importante.

Bugs de segurança de memória afetam negativamente a qualidade

Os bugs de segurança de memória latente podem gerar resultados não determinísticos, dependendo do estado do sistema. Esse comportamento imprevisível causa falhas e irritação nos usuários.

Todos os dias observamos milhões de falhas nativas em dispositivos de usuários finais e, com a introdução do GWP-ASan, rastreamos a maioria delas para bugs de segurança da memória.
Esse ponto de dados valida a correlação entre a qualidade e a densidade de bugs de segurança de memória e está alinhado com o que nossos colegas do Chrome observam (consulte a lista de bugs GWP-ASan do Chrome).

Bugs de segurança de memória afetam negativamente a segurança

Os bugs de segurança de memória têm sido consistentemente os principais responsáveis pelas vulnerabilidades de segurança do Android, desde a primeira versão do Android.

Bugs de segurança de memória afetam negativamente
  a segurança.
Figura 2: contribuição dos bugs de segurança de memória para vulnerabilidades do Android.

É bom saber que esse não é apenas um problema do Android (confira as estatísticas do Chrome e da Microsoft). No entanto, precisamos fazer mais pela segurança dos nossos usuários.
A equipe do Project Zero do Google rastreia exploits de dia zero que foram usados em ataques reais contra usuários como vulnerabilidades de dia zero. Esses não são bugs hipotéticos, mas exploits usados ativamente em ataques contra usuários. Os bugs de segurança de memória (corrupção de memória e uso após a liberação) são a maioria esmagadora.

Bugs de segurança de memória aumentam os custos

Manter os dispositivos atualizados com correções de segurança mantém nossos usuários seguros, mas tem um custo monetário para nosso ecossistema.

A alta densidade de bugs de segurança de memória no código de fornecedor de baixo nível, que geralmente tem modificações personalizadas, aumenta significativamente os custos de correção e testes. No entanto, a detecção desses bugs no início do ciclo de desenvolvimento pode reduzir esses custos.

A pesquisa mostra que a detecção de bugs mais cedo pode reduzir os custos em até seis vezes. No entanto, devido à complexidade do nosso ecossistema, ao número médio de bases de código mantidas por um fornecedor e à complexidade cada vez maior do software, as economias podem ser maiores.

Segurança da memória

No Android 12 e versões mais recentes, fizemos mudanças sistêmicas para reduzir a densidade de bugs de segurança de memória nas bases de código do Android. Estamos ampliando as ferramentas de segurança de memória do Android e introduzindo novos requisitos que incentivam nosso ecossistema a resolver essa categoria de bugs. Com o tempo, isso deve resultar em maior qualidade e segurança para nossos usuários e custos mais baixos para nossos fornecedores.

A segurança de memória provavelmente se tornará um diferencial de qualidade e segurança nos próximos anos, e o Android planeja liderar o caminho.

Requisitos para suporte à segurança de memória

O Documento de definição de compatibilidade do Android (CDD) recomenda o uso de ferramentas de segurança de memória durante o desenvolvimento.
Estamos trabalhando em estreita colaboração com nosso ecossistema para aumentar o uso de ferramentas de segurança de memória e integrá-las aos processos de integração e teste contínuos.
Com o tempo, queremos garantir que cada dispositivo passe por uma execução completa do conjunto de teste de compatibilidade (CTS), usando ferramentas de segurança de memória, o que demonstra que nenhum desses bugs foi encontrado. Por exemplo, as plataformas Arm v9 precisarão fornecer uma execução do CTS com a marcação de memória ativada, enquanto as plataformas Arm v8 precisarão fornecer uma execução do CTS usando HWASAN e KASAN.

Rust como uma nova linguagem de programação para código de plataforma

O Android 12 introduziu o Rust como uma linguagem de plataforma. O Rust oferece segurança de memória e de linha de execução em níveis de desempenho semelhantes ao C/C++. Esperamos que o Rust seja a escolha preferida para a maioria dos novos projetos nativos. No entanto, reescrever todo o código não seguro para memória, que atualmente representa mais de 70% do código da plataforma Android, em Rust não é viável. Rust será complementar às ferramentas de segurança de memória.

Ferramentas de segurança de memória

O Android oferece suporte a uma ampla variedade de ferramentas que ajudam a detectar bugs de segurança de memória. A figura abaixo apresenta uma taxonomia das ferramentas de segurança de memória disponíveis no Android.

Bugs de segurança de memória afetam negativamente
  a segurança.
Figura 3: cenário de ferramentas de segurança de memória do Android.

Nossas ferramentas abrangem uma ampla gama de cenários e metas de implantação. A documentação a seguir descreve cada ferramenta e fornece uma referência para usá-las nos seus produtos.