Confira neste artigo como o Google reduziu as falhas de segurança do Android em 52% com a abordagem Safe Coding.
Por anos, o Google tem trabalhado duro para tornar o Android um sistema operacional cada vez mais seguro. Os invasores procuram qualquer brecha que possam explorar, usando métodos comuns como phishing ou mais complexos, como vulnerabilidades de segurança de memória.
Agora, o Google explica como a abordagem Safe Coding conseguiu reduzir significativamente as vulnerabilidades de segurança de memória no Android nos últimos anos.
Como o Google reduziu as falhas de segurança do Android em 52%
Vulnerabilidades de segurança de memória são aquelas que tiram proveito de bugs relacionados à memória, como estouros de buffer, problemas de string de formato ou ponteiros pendurados, para interagir ou até mesmo sobrescrever a memória.
Esses tipos de vulnerabilidades ainda estão amplamente presentes no desenvolvimento de software. Os desenvolvedores tentam atacá-los de várias abordagens, com mitigações e detecções proativas predominando.
No entanto, o Google está confiante de que o Safe Coding é a abordagem ideal para minimizar vulnerabilidades de segurança de memória, como evidenciado por seus resultados com o Android.
A abordagem de Codificação Segura prioriza o uso de linguagens de programação seguras para memória desde o início. No entanto, há softwares com muitos anos de idade e milhões de linhas de código-chave desenvolvidos em linguagens “inseguras para memória”.
Então, qual é a proposta do Google nesses casos? A resposta está na transição gradual para linguagens seguras para memória (como Rust) para novos recursos.
Basicamente, o Google propõe que os desenvolvedores comecem a implementar exclusivamente linguagens seguras para memória ao desenvolver novos recursos.
Enquanto isso, o código antigo baseado em linguagens inseguras permanecerá “inalterado” além da manutenção clássica e correções de bugs. Isso se traduz em alcançar interoperabilidade segura, eficiente e econômica entre código novo e antigo.
As vulnerabilidades de segurança de memória do Android caíram 52% em 6 anos
De acordo com o Google, a abordagem de Codificação Segura resultou em uma queda nas vulnerabilidades de segurança de memória no Android de 76% para 24% em apenas 6 anos.
No entanto, a ideia de manter o código inseguro para memória pode parecer contraintuitiva. Afinal, se você está procurando segurança máxima, seu primeiro pensamento seria migrar todo o seu código para uma linguagem segura.
Embora isso possa ser verdade, a abordagem do Google faz sentido, e a empresa explica o porquê.
No desenvolvimento de software, eficiência de código e custo-benefício são essenciais. Existem ferramentas ou sistemas inteiros com muitos anos de desenvolvimento por trás deles. Isso envolve milhões e milhões de linhas fundamentais de código.
Ainda que uma empresa possa simplesmente começar a reescrever software do zero com base em linguagens de segurança de memória, o investimento e o esforço provavelmente não valem a pena.
A situação pode ser diferente em desenvolvimentos relativamente novos com pouco tempo por trás deles, no entanto.
Vantagens da codificação segura e interoperabilidade
O Google afirma que a abordagem de codificação segura, que é baseada na interoperabilidade de código, é uma maneira econômica e prática de adotar código de segurança de memória.
Isso, por sua vez, o torna econômico, pois permite que as empresas aproveitem investimentos anteriores. O custo é significativamente menor em comparação com a reescrita de software do zero.
Também é eficiente porque permite que novos recursos continuem a ser desenvolvidos enquanto integra o novo código seguro.
Usar código inerentemente seguro para memória também garante custos mais baixos a longo prazo. Abordagens anteriores favoreciam um ciclo infinito de “ataque e defesa” entre desenvolvedores e invasores.
Contar com mitigações e detecções proativas exigia ação e investimento contínuos em resposta a ataques em potencial. No entanto, o Safe Coding permite que desenvolvedores e empresas se esqueçam disso, concentrando-se em manter e melhorar recursos ou corrigir bugs.
Também há maior produtividade graças às menores taxas de reversão de código. Ou seja, há menos situações de reversão de código de emergência devido a bugs inesperados. O Google afirma que o Rust oferece taxas de reversão de código menores que a metade do C++.
Essencialmente, o Safe Coding traz economias significativas de tempo e dinheiro para empresas e desenvolvedores. No setor atual, que monitora de perto a lucratividade, isso pode ser crucial.
O Google revela que implementou a interoperabilidade entre “Rust ↔︎ C++ e Rust ↔︎ Kotlin”. A empresa também contribuiu com dinheiro e ferramentas para impulsionar sua abordagem.
Por exemplo, o Google deu US$ 1.000.000 para a Rust Foundation para impulsionar sua evolução. Ele também forneceu suas próprias ferramentas de interoperabilidade, como Crubit e autocxx.
É assim que a abordagem de Codificação Segura torna o software mais seguro
Você ainda pode estar se perguntando como uma abordagem que mantém o código inseguro para a memória pode levar a uma redução exponencial de vulnerabilidades de segurança de memória.
O Google também explica isso em sua postagem de blog, de uma forma muito técnica, mas tentarei simplificar para todos.
Por meio de estudos em larga escala, o USENIX Security e o próprio Google descobriram um fenômeno intrigante. Basicamente, a pesquisa concluiu que a grande maioria das vulnerabilidades de memória em software tem origem em código novo.
Uma parcela significativa também é derivada de código modificado recentemente. O Google também notou que a densidade de vulnerabilidades de segurança de memória do Android diminuiu progressivamente em código antigo.
Dado que uma parcela significativa do problema decorre de código novo, faz sentido focar nele, correto? Esse é o raciocínio por trás da decisão do Google de adotar a abordagem Safe Coding.
Mas por que mais problemas e vulnerabilidades se acumulam em código novo? Isso ocorre porque toda linguagem de programação tem uma propriedade fundamental: maturação.
Embora a estrutura fundamental de uma linguagem possa torná-la insegura para a memória, atualizações sucessivas podem ajudar a mitigar isso. Então, teoricamente, o código inseguro usado em partes mais antigas do software pode se tornar menos vulnerável ao longo do tempo.
Ao combinar a maturação de código antigo com novos recursos desenvolvidos em código novo e inerentemente seguro para a memória, o resultado será uma diminuição exponencial nas vulnerabilidades de memória.
O Google recomenda Rust como uma linguagem de segurança de memória
É claro que portar partes de códigos mais antigos para linguagens como Rust pode tornar as coisas ainda mais seguras. No entanto, isso nem sempre é possível, pelo menos não de forma direta. Há casos em que mover um único bloco pode derrubar o castelo inteiro.
O Google é inflexível sobre Rust como uma linguagem de programação de segurança de memória. Então, se você está interessado em aprender programação ou uma nova linguagem para ser competitivo na indústria de hoje, Rust pode ser o que você está procurando.
Vulnerabilidades de segurança de memória não são as únicas por aí. Terceiros mal-intencionados continuarão a procurar maneiras de tentar contornar as camadas de segurança de qualquer software.
No entanto, ter barreiras fortes nas “entranhas” do software garante que os invasores terão que recorrer a métodos mais mundanos e facilmente neutralizados. Por exemplo, você pode evitar ser vítima de phishing simplesmente usando o bom senso.