Unindo-se a várias outras opções disponíveis, a Rust já é uma linguagem para desenvolvimento Android, e muitos já a estão adotando,
O Google anunciou recentemente a inclusão da linguagem de programação Rust entre as linguagens permitidas para o desenvolvimento Android.
Rust já é uma linguagem para desenvolvimento Android
Já que o compilador Rust foi incluído na árvore de origem do Android em 2019, o suporte a idiomas permaneceu experimental.
Alguns dos primeiros componentes do Rust enviados para o Android são novas implementações do mecanismo de comunicação entre processos Binder e a pilha Bluetooth.
A implementação do Rust foi realizada como parte de um projeto para fortalecer a segurança, promover técnicas de codificação seguras e melhorar a eficiência de identificação de problemas ao trabalhar com memória no Android. Observa-se que cerca de 70% de todas as vulnerabilidades perigosas identificadas no Android são causadas por erros ao trabalhar com memória.
O uso da linguagem Rust, que se concentra no gerenciamento seguro de memória e fornece gerenciamento automático de memória, reduzirá o risco de vulnerabilidades causadas por erros durante o manuseio da memória, como acessar uma área de memória após ela ter liberado e estourado os limites do buffer.
O manuseio seguro da memória é garantido no Rust em tempo de compilação, verificando referências, rastreando a propriedade e a vida do objeto (escopo), bem como avaliando a exatidão do acesso à memória em tempo de execução.
Rust também fornece meios de proteção contra estouros de inteiros, requer inicialização obrigatória de valores de variáveis antes do uso, lida melhor com erros na biblioteca padrão, adota o conceito de variáveis imutáveis e referências por padrão e oferece escrita estática forte para minimizar erros lógicos.
No Android, o gerenciamento seguro de memória é fornecido nas linguagens Kotlin e Java já compatíveis, mas eles não são adequados para desenvolver componentes de sistema devido à sobrecarga pesada.
Rust permite desempenho próximo às linguagens C e C++, permitindo que seja usado para desenvolver partes de baixo nível da plataforma e componentes para fazer interface com o hardware.
Para garantir a segurança do código C e C++, o Android usa isolamento sandbox, análise estática e testes de difusão. Os recursos de isolamento de sandbox são limitados e atingiram o limite de seus recursos (uma fragmentação adicional nos processos não é prática do ponto de vista do consumo de recursos).
Dentre as limitações do uso do sandbox, eles citam a alta sobrecarga e o maior consumo de memória causados pela necessidade de geração de novos processos, bem como a latência adicional associada ao uso do IPC.
Ao mesmo tempo, a sandbox não elimina vulnerabilidades no código, mas apenas reduz os riscos e complica o ataque, pois a exploração requer a identificação não de uma, mas de várias vulnerabilidades.
Os métodos de teste de código são limitados porque, para detectar erros, é necessário criar condições para a manifestação do problema. Não é possível cobrir todas as opções possíveis, tantos erros passam despercebidos.
Para processos de sistema no Android, o Google segue a ‘regra de dois’, segundo a qual qualquer código adicionado deve atender a no máximo duas das três condições: trabalhar com dados de entrada não verificados, usando uma linguagem de programação insegura (C/C++ ) e execute sem isolamento de caixa de areia rígida (com privilégios elevados).
Segue-se desta regra que o código para processar dados externos deve ser reduzido ao mínimo privilégio (isolado) ou escrito em uma linguagem de programação segura.
O Google não pretende reescrever o código C/C++ existente no Rust, mas planeja usar essa linguagem para desenvolver um novo código.
Faz sentido usar Rust para código novo, uma vez que estatisticamente a maioria dos erros aparece em código novo ou modificado recentemente. Em particular, cerca de 50% dos erros de memória detectados no Android são detectados em código escrito há menos de um ano.