Segurança da memória

Esta página descreve bugs e ferramentas de segurança de memória.

Insegurança de memória

Os bugs de segurança de memória, que são 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, na segurança e nos custos.

Os bugs de segurança de memória afetam negativamente a qualidade e a estabilidade e representam uma parcela significativa das falhas observadas em dispositivos de usuários finais. 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.
Devido à complexidade cada vez maior do código, se não forem corrigidos, os bugs de segurança de memória vão aumentar com o tempo. Portanto, fornecer ao nosso ecossistema as ferramentas e tecnologias que podem detectar e mitigar esses bugs é fundamental para nosso sucesso a longo prazo.
Nos últimos anos, trabalhamos em estreita colaboração com nossos parceiros de hardware para desenvolver tecnologias como a inclusão de tags 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 de memória e ajudar o setor de software em geral a resolver uma área problemática importante.

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

Bugs latentes de segurança de memória podem causar resultados não determinísticos, dependendo do estado do sistema. Esse comportamento imprevisível causa falhas e irritação para nossos 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 até bugs de segurança de 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 mais frequentes do GWP-ASan do Chrome).

Bugs de segurança de memória afetam a segurança de forma negativa

Os bugs de segurança de memória sempre foram os principais contribuintes para as vulnerabilidades de segurança do Android, desde o primeiro lançamento do sistema operacional.

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

Figura 2. Contribuição de 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), mas precisamos fazer mais pela segurança dos nossos usuários.
A equipe do Project Zero no 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 sim exploits usados ativamente em ataques contra usuários. A maioria dos bugs de segurança de memória (corrupção de memória e uso após liberação)

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

Manter os dispositivos atualizados com correções de segurança protege nossos usuários, mas tem um custo financeiro para nosso ecossistema.

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

Pesquisas mostram que a detecção de bugs mais cedo pode reduzir os custos em até seis vezes. No entanto, considerando a complexidade do nosso ecossistema, o número médio de codebases mantidos por um fornecedor e a complexidade cada vez maior do software, a economia pode ser maior.

Segurança da memória

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

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

Requisitos para oferecer suporte à segurança de memória

O Documento de definição de compatibilidade do Android (CDD) recomenda fortemente 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 contínua e teste.

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 bug desse tipo foi encontrado. Por exemplo, as plataformas Arm v9 vão precisar fornecer uma execução do CTS com a inclusão de tags de memória ativada, enquanto as plataformas Arm v8 vão precisar 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. Ele oferece proteção de memória e concorrência segura 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 sem segurança de memória, que atualmente representa mais de 70% do código da plataforma Android, não é viável. A partir de agora, o Rust será complementar às ferramentas de segurança de memória.

Ferramentas de segurança da 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 do Android disponíveis.

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

Figura 3. Panorama das ferramentas de segurança de memória do Android.

Nossa ferramenta abrange uma ampla variedade de cenários e destinos de implantação. A documentação nesta seção descreve cada ferramenta e fornece uma referência para usá-las nos seus produtos.