Google revelado faz pouco a inclinação linguagem de programação Ferrugem entre os idiomas permitidos para desenvolvimento Android.
Já que o compilador Rust foi incluído na árvore de origem do Android em 2019, mas 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 realizado como parte de um projeto para fortalecer a segurança, promova técnicas de codificação seguras e melhore 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 concentra-se no gerenciamento de memória segura 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 da memória depois que ela foi liberada e estourar os limites do buffer.
O manuseio seguro da memória é garantido no Rust em tempo de compilação, verificando referências, rastreando a propriedade do objeto e a vida do objeto (escopo), bem como avaliando a exatidão do acesso à memória em tempo de execução.
Ferrugem também fornece meios de proteção contra transbordamentos inteiro, requer inicialização obrigatória de valores de variáveis antes do uso, trata melhor os erros na biblioteca padrão, adota o conceito de referências e variáveis imutáveis 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á com suporte, mas não é adequado para desenvolver componentes de sistema devido à sobrecarga pesada.
Rust permite atingir um 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).
Entre 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 dos dois'Segundo que qualquer código adicionado não deve atender a mais de duas das três condições- Trabalhe com dados de entrada não verificados, use 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 menor 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 ele 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.
fonte: https://security.googleblog.com
A ironia, quando seu maior concorrente acaba adotando algo que você ajudou a desenvolver para seus próprios objetivos ... A ferrugem está em alta.