5 pontos por GN⁺ 2024-09-27 | 1 comentários | Compartilhar no WhatsApp

Eliminar a causa raiz das vulnerabilidades de segurança de memória

Resultado paradoxal

  • Quando uma base de código escrita em linguagens sem segurança de memória cresce, migrar novos recursos para linguagens com segurança de memória reduz significativamente as vulnerabilidades de segurança de memória
  • Isso acontece porque as vulnerabilidades diminuem exponencialmente ao longo do tempo

Explicação matemática

  • O tempo de vida das vulnerabilidades segue uma distribuição exponencial
  • As vulnerabilidades surgem principalmente em código novo, e o código se torna mais seguro com o passar do tempo
  • A densidade de vulnerabilidades em código com 5 anos é de 3,4 a 7,4 vezes menor do que em código novo

Caso real no Android

  • Desde 2019, a equipe do Android começou a migrar o novo desenvolvimento para linguagens com segurança de memória
  • Em 2024, as vulnerabilidades de segurança de memória caíram de 76% para 24%
  • À medida que as vulnerabilidades de segurança de memória diminuíram, o risco total de segurança também caiu

Evolução da estratégia de segurança de memória

  • 1ª geração: patches reativos — abordagem de descobrir e corrigir vulnerabilidades
  • 2ª geração: mitigação proativa — abordagem de dificultar a exploração de vulnerabilidades
  • 3ª geração: descoberta proativa de vulnerabilidades — abordagem de encontrar vulnerabilidades com antecedência
  • 4ª geração: prevenção de alta confiança — abordagem de prevenir a própria ocorrência de vulnerabilidades ao migrar para linguagens com segurança de memória

Vantagens da prevenção de alta confiança

  • Interrompe a competição sem fim entre defensores e atacantes
  • Aumenta a segurança e reduz custos com linguagens seguras em memória
  • Melhora a correção do código e a produtividade dos desenvolvedores

Das lições à prática

  • Não é necessário descartar nem reescrever todo o código legado sem segurança de memória
  • Melhorar a interoperabilidade acelera a migração para linguagens com segurança de memória
  • Desenvolvimento de ferramentas para melhorar a interoperabilidade entre Rust e C++, e entre Rust e Kotlin

Papel das gerações anteriores

  • Uso seletivo de mitigação e detecção proativas
  • À medida que o código migra para código com segurança de memória, a necessidade de mitigação e detecção diminui

Conclusão

  • Usar linguagens com segurança de memória em código novo faz as vulnerabilidades diminuírem exponencialmente
  • Mais de 6 anos de resultados consistentes no Android comprovam a eficácia dessa abordagem

Resumo do GN⁺

  • Migrar para linguagens com segurança de memória é importante para reduzir vulnerabilidades de segurança de memória
  • O caso da equipe do Android mostra uma grande redução nas vulnerabilidades de segurança de memória
  • Melhorar a interoperabilidade, em vez de reescrever completamente o código existente, é uma abordagem prática
  • Usar linguagens seguras em memória, como Rust, pode aumentar ao mesmo tempo a segurança e a produtividade

1 comentários

 
GN⁺ 2024-09-27
Comentários no Hacker News
  • Migrar o novo desenvolvimento para linguagens com segurança de memória pode trazer melhorias significativas
    • É muito mais fácil e barato do que portar tudo
  • O gráfico no artigo é claro e conciso
    • Uma seleção cuidadosa de dados e a rotulagem podem transmitir facilmente a ideia pretendida
  • As vulnerabilidades diminuem exponencialmente
    • É importante focar no código novo
    • Projetos indiscriminados de RiiR são desperdício de recursos
    • A estratégia recomendada por especialistas em Rust é a mais eficaz para minimizar vulnerabilidades de memória
  • A equipe do Android observou que a taxa de rollback de mudanças em Rust é menos da metade da de C++
  • Há uma correlação entre código novo e vulnerabilidades de memória
    • O código relacionado a novos recursos concentra mais vulnerabilidades
    • Em código antigo, casos de borda são descobertos pelo uso real
  • É difícil afirmar categoricamente que código novo causa vulnerabilidades de memória
    • Existem vulnerabilidades de alto impacto, como o bug Heartbleed
  • As vulnerabilidades diminuem exponencialmente
    • Parar de adicionar novos recursos pode ser melhor para a segurança
    • O Windows LTSC pode ser a versão mais segura
  • Programação segura melhora a correção do código e a produtividade do desenvolvedor
    • Antecipando a descoberta de bugs para antes do check-in do código
    • A equipe do Android observou que a taxa de rollback de mudanças em Rust é menos da metade da de C++
  • Depois de descobrir Rust, recuperei o entusiasmo por programação
  • Entre as linguagens com segurança de memória (MSL), só Rust foi mencionado
    • Kotlin também foi mencionado, mas seus recursos de segurança de memória não são tão fortes quanto os de Rust
  • A vida útil das vulnerabilidades segue uma distribuição exponencial
    • Garantir segurança de memória em código novo tem muito valor
    • Isso também é útil em grandes bases de código legadas
  • Código antigo pode não ter sido revisado o suficiente
    • Eu reviso logs de commit recentes com mais frequência
  • Diferença entre as linguagens usadas para escrever código no Mac e no Windows
    • O Mac usa Swift, que é seguro em memória, enquanto o Windows usa principalmente C ou C++
  • Quanto mais raras as vulnerabilidades se tornam, mais valiosas elas ficam
    • As vulnerabilidades restantes provavelmente serão usadas por atores estatais contra alvos de alto valor
    • Recursos como o Lockdown Mode do iOS podem ser necessários
    • Usuários conscientes de segurança podem marcar uma opção de segurança em troca de perda de desempenho
    • Detecta ataques e os envia para a equipe de segurança para análise
    • Envia alertas ao usuário e informa que um ataque foi detectado
    • Em vez de monitorar passivamente a atividade do usuário, notifica o usuário quando um ataque é detectado
  • Usuários conscientes de segurança podem marcar uma opção de segurança em troca de perda de desempenho
    • Detecta ataques e os envia para a equipe de segurança para análise
    • Envia alertas ao usuário e informa que um ataque foi detectado
    • Em vez de monitorar passivamente a atividade do usuário, notifica o usuário quando um ataque é detectado