.

A decisão do Google de usar Rust para novos códigos no Android, a fim de reduzir as falhas relacionadas à memória, parece estar valendo a pena. As vulnerabilidades de segurança de memória no Android foram reduzidas para mais da metade – um marco que coincide com a mudança do Google de C e C++ para a linguagem de programação segura para memória, Rust.
Este é o primeiro ano em que as vulnerabilidades de segurança de memória não são a maior categoria de falhas de segurança e ocorre um ano depois que o Google tornou o Rust o padrão para o novo código no Android Open Source Project (AOSP).
Outras linguagens seguras de memória que o Google usou para Android incluem Java e Kotlin compatível com Java. C e C++ ainda são linguagens dominantes no AOSP, mas o Android 13 é a primeira versão em que a maior parte do novo código é de linguagens seguras para memória. Depois que o Google o adotou para o AOSP em abril de 2021, o Rust agora representa cerca de 21% do novo código. O projeto do kernel Linux este ano adotou Rust como a nova segunda linguagem oficial para C.
A versão 10 do Android de 2019 tinha 223 bugs de segurança de memória, enquanto o Android 13 tem 85 problemas de segurança de memória conhecidos.
Durante esse período, as vulnerabilidades de segurança de memória caíram de 76% para 35% do total de vulnerabilidades do Android, observa o engenheiro de software de segurança do Android Jeffrey Vander Stoep. Com essa queda nas vulnerabilidades de segurança de memória, o Google também está vendo um declínio nas falhas críticas e exploráveis remotamente.
Vander Stoep observa que essa mudança não foi impulsionada por “heroísmo” – apenas desenvolvedores usando as melhores ferramentas para o trabalho. A equipe do Android planeja intensificar o uso de Rust, embora não haja planos de se livrar de C e C++ para a programação de seus sistemas.
“Se eu tivesse que identificar uma única característica que torna isso possível, diria ‘humildade’. Há uma disposição em todos os níveis da equipe do Android para dizer ‘Como podemos fazer melhor?’ juntamente com a força para seguir em frente e fazer mudanças, incluindo mudanças sistêmicas”, ele observou em um tweet.
“A humildade precisa ir nos dois sentidos. Rust não resolve todos os problemas, e há áreas onde C/C++ continuará a ser a opção mais prática para desenvolvimento, pelo menos por um tempo. Tudo bem.
“Trabalharemos para reduzir isso ao longo do tempo, continuando a escalar nosso uso de Rust e continuar investindo e implantando melhorias em C/C++.”
Correlação não equivale a causalidade, observa Vander Stoep, mas a porcentagem de bugs de segurança de segurança de memória – que dominam bugs de alta gravidade – corresponde de perto aos idiomas usados para o novo código.
Ferramentas de segurança como fuzzing também tiveram um grande impacto nos bugs de segurança de memória, diz o Google.
“Continuamos a investir em ferramentas para melhorar a segurança de nosso C/C++. Nos últimos lançamentos, introduzimos o alocador reforçado Scudo, HWASAN, GWP-ASAN e KFENCE em dispositivos Android de produção. Também aumentamos nossa cobertura fuzzing em nossa base de código existente. As vulnerabilidades encontradas usando essas ferramentas contribuíram tanto para a prevenção de vulnerabilidades no novo código quanto para as vulnerabilidades encontradas no código antigo que estão incluídas na avaliação acima. Essas são ferramentas importantes e extremamente importantes para o nosso C/ Código C++. No entanto, eles sozinhos não representam a grande mudança nas vulnerabilidades que estamos vendo, e outros projetos que implantaram essas tecnologias não viram uma grande mudança na composição de suas vulnerabilidades. Acreditamos que a mudança contínua do Android de memória insegura para linguagens com segurança de memória é um fator importante”, escreve Vander Stoep.
Ele continua observando que no Android 13 há 1,5 milhão de linhas totais de código Rust, representando cerca de 21% de todo o novo código. Até o momento, o Google não viu uma única vulnerabilidade de segurança de memória no código Rust do Android.
“Isso demonstra que o Rust está cumprindo seu propósito de prevenir a fonte mais comum de vulnerabilidades do Android. A densidade de vulnerabilidade histórica é maior que 1/kLOC (1 vulnerabilidade por mil linhas de código) em muitos dos componentes C/C++ do Android (por exemplo, mídia, Bluetooth , NFC, etc). Com base nessa densidade histórica de vulnerabilidades, é provável que o uso de Rust já tenha evitado que centenas de vulnerabilidades chegassem à produção”, observa Vander Stoep.
O Google vê o afastamento do C/C++ como um desafio, mas está avançando com o projeto para Android. No entanto, não está migrando para o Rust for Chrome.
Para o Android, no entanto, o Google está implementando camadas de abstração de hardware (HALs) do espaço do usuário em Rust e adicionando suporte para Rust em aplicativos confiáveis. Ele também migrou o firmware da máquina virtual no Android Virtualization Framework para Rust. E com suporte para Rust na versão 6.1 do kernel Linux, o Google está trazendo segurança de memória para o kernel, começando com os drivers do kernel.
.