Os engenheiros da Google apresentaram os primeiros resultados da implementação no Android do suporte ao desenvolvimento na linguagem Rust. No Android 13, cerca de 21% do novo código compilável adicionado foi escrito em Rust, enquanto 79% foi escrito em C/C++. No repositório AOSP (Android Open Source Project), que abriga o código-fonte da plataforma Android, existem aproximadamente 1,5 milhão de linhas de código em Rust, relacionadas a novos componentes como o armazenamento de chaves criptográficas Keystore2, pilha para chips UWB (Ultra-Wideband), implementação do protocolo DNS-over-HTTP3, framework de virtualização AVF (Android Virtualization Framework) e pilhas experimentais para Bluetooth e Wi-Fi.

De acordo com a estratégia previamente adotada para reduzir o risco de vulnerabilidades causadas por erros de gerenciamento de memória, a linguagem Rust está sendo utilizada principalmente no desenvolvimento de novo código e para reforçar gradualmente a segurança dos componentes de software mais vulneráveis e críticos. Não há uma meta de migrar toda a plataforma para Rust, e o código antigo permanece em C/C++, com a correção de erros sendo realizada através de técnicas como teste fuzzing, análise estática e práticas de desenvolvimento como o uso do tipo MiraclePtr (uma camada sobre ponteiros brutos que realiza verificações adicionais de acessos a áreas de memória liberadas), o sistema de distribuição de memória Scudo (substituto seguro para malloc/free) e mecanismos de detecção de erros de memória como HWAsan (Hardware-assisted AddressSanitizer), GWP-ASAN e KFENCE.
Quanto às estatísticas sobre o tipo de vulnerabilidades na plataforma Android, observa-se que à medida que a quantidade de novo código que manipula a memória de forma insegura diminui, também há uma redução no número de vulnerabilidades causadas por erros de memória. Por exemplo, a proporção de vulnerabilidades causadas por problemas de memória caiu de 76% em 2019 para 35% em 2022. Em números absolutos, em 2019 foram identificadas 223 vulnerabilidades relacionadas à manipulação de memória, em 2020 foram 150, em 2021 foram 100 e em 2022 foram 85 (todas as vulnerabilidades identificadas no código em C/C++, nenhuma dessas problemas foi encontrada no código em Rust). O ano de 2022 foi o primeiro em que as vulnerabilidades relacionadas à memória deixaram de ser predominantes.

Como as vulnerabilidades relacionadas ao gerenciamento de memória costumam ser as mais perigosas, as estatísticas gerais também mostram uma redução no número de problemas críticos e naqueles que podem ser explorados remotamente. Ao mesmo tempo, a dinâmica de descoberta de vulnerabilidades não relacionadas ao gerenciamento de memória se mantém estável nos últimos 4 anos, com cerca de 20 vulnerabilidades por mês. A proporção de problemas perigosos entre as vulnerabilidades causadas por erros no gerenciamento de memória também se mantém (mas como o número dessas vulnerabilidades está diminuindo, o número de problemas perigosos também está caindo).

As estatísticas também mostram uma correlação entre o volume de novo código que lida inseguramente com a memória e o número de vulnerabilidades relacionadas à memória (como estouro de buffer, acesso à memória já liberada etc.). Essa observação confirma a suposição de que o foco da implementação de técnicas de programação segura deve ser em novo código, e não na reescrita do código existente, já que a maior parte das vulnerabilidades identificadas se concentra no novo código.

Fonte: opennet.ru
