Memória insegura
Erros de segurança de memória, erros no manuseio de memória em linguagens de programação nativas, são o problema mais comum nas bases de código do Android. Eles são responsáveis por mais de 60% das vulnerabilidades de segurança de alta gravidade e por milhões de falhas visíveis ao usuário.
Erros de segurança de memória afetam negativamente a qualidade e a estabilidade e são responsáveis por uma parcela significativa das falhas observadas nos dispositivos do usuário final. Portanto, uma alta densidade de bugs de segurança de memória se correlaciona diretamente com a má experiência do usuário.
O código nativo, escrito em linguagens inseguras de memória como C, C++ e Assembly representam mais de 70% do código da plataforma Android e está presente em aproximadamente 50% dos aplicativos da Play Store.
Dada a complexidade cada vez maior do código, se não for atendido, os bugs de segurança da memória aumentarão 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 de hardware, como Arm Memory Tagging, e introduzimos Rust na base de código do Android.
Essas tecnologias vão acelerar nosso caminho para a segurança da memória e vão ajudar a indústria de software mais ampla a abordar uma área de problema-chave.
Erros de segurança de memória afetam negativamente a qualidade
Erros de segurança de memória latente podem causar resultados não determinísticos, dependendo do estado do sistema. Esse comportamento imprevisível leva a travamentos e aborrecimentos para nossos usuários.
Todos os dias observamos milhões de falhas nativas de dispositivos de usuários finais e com a introdução do GWP-ASan , rastreamos a maioria delas para erros de segurança de memória.
Esse ponto de dados valida a correlação entre qualidade e densidade de bugs de segurança de memória e está alinhado com o que nossos colegas do Chrome observam (consulte a lista de erros do Chrome GWP-ASan ).
Erros 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 contribuintes para as vulnerabilidades de segurança do Android, desde a primeira versão do Android.
Embora seja encorajador saber que isso não é apenas um problema do Android (consulte as estatísticas do Chrome e da Microsoft ), precisamos fazer mais pela segurança de nossos usuários.
A equipe do Project Zero do Google rastreia explorações de dia zero que foram usadas em ataques reais contra usuários como vulnerabilidades de dia zero. Estes não são bugs hipotéticos, mas explorações usadas ativamente em ataques contra usuários. Os bugs de segurança de memória (corrupção de memória e use-after-free) compreendem uma esmagadora maioria.
Erros de segurança de memória aumentam os custos
Manter os dispositivos atualizados com as 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 do fornecedor de baixo nível, que geralmente tem modificações personalizadas, aumenta significativamente os custos de correção e testes. No entanto, detectar esses bugs no início do ciclo de desenvolvimento pode reduzir esses custos.
Pesquisas mostram que detectar bugs mais cedo pode reduzir os custos em até seis vezes. No entanto, dada a complexidade do nosso ecossistema, o número médio de bases de código mantidas por um fornecedor e a complexidade cada vez maior do software, a economia pode ser maior.
Segurança da memória
A partir do Android 12, fizemos alterações sistêmicas para reduzir a densidade de erros de segurança de memória nas bases de código do Android. Estamos estendendo as ferramentas de segurança de memória do Android e introduzindo novos requisitos que incentivam nosso ecossistema a lidar com essa categoria de bugs. Com o tempo, isso deve se traduzir em maior qualidade e melhor segurança para nossos usuários e custos mais baixos para nossos fornecedores.
A segurança da memória provavelmente se tornará um diferencial de qualidade e segurança nos próximos anos, e o Android planeja liderar o caminho.
Requisitos de suporte à segurança da 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 nos processos de integração e teste contínuos.
Com o tempo, gostaríamos de garantir que cada dispositivo passe por uma execução completa do Compatibility Test Suite ( CTS ) usando ferramentas de segurança de memória, o que demonstra que nenhum desses bugs foi encontrado. Por exemplo, as plataformas Arm v9 serão solicitadas a fornecer uma execução CTS com marcação de memória habilitada, enquanto as plataformas Arm v8 serão solicitadas a fornecer uma execução CTS usando HWASAN e KASAN.
Rust como uma nova linguagem de programação para código de plataforma
O Android 12 introduziu Rust como uma linguagem de plataforma . Rust fornece segurança de memória e thread 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 inseguro da memória, atualmente representando mais de 70% do código da plataforma Android, em Rust não é viável. Avançando 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 Android disponíveis.
Nossas ferramentas abrangem uma vasta gama de cenários e destinos de implantação. A documentação a seguir descreve cada ferramenta e fornece uma referência para usá-las em seus produtos.