O Escritório do Diretor Nacional de Segurança Cibernética (ONCD) da Casa Branca dos EUA instou os desenvolvedores a pararem de usar as linguagens de programação C e C++ no desenvolvimento de software de missão crítica. Este conselho é baseado em preocupações com a segurança do gerenciamento de memória, um aspecto crítico para evitar vulnerabilidades como buffer overflows e ponteiros pendentes.
O gerenciamento inadequado de memória no código do programa pode levar a vulnerabilidades graves, permitindo que invasores realizem ataques cibernéticos. Linguagens de programação como Java, devido aos seus mecanismos de detecção de erros em tempo de execução, são consideradas seguras no que diz respeito ao gerenciamento de memória. Em contraste, C e C++ permitem que os desenvolvedores executem operações de ponteiro e acessem endereços diretamente na memória do computador. Isso envolve ler e escrever dados em qualquer lugar da memória que eles possam acessar por meio de um ponteiro.
No entanto, essas linguagens não verificam automaticamente se essas operações excedem o espaço de memória alocado para dados ou estruturas. Esta verificação é chamada de “verificação de limites”. A ausência de tal verificação significa que um programador pode gravar dados acidentalmente ou intencionalmente além do bloco de memória alocado, o que pode levar à substituição de outros dados, dados corrompidos ou, na pior das hipóteses, vulnerabilidades de segurança que os invasores podem explorar para executar código malicioso ou obter controle sobre o sistema.
O relatório ONCD destaca que cerca de 70% de todas as vulnerabilidades de segurança identificadas pelos engenheiros da Microsoft em 2019 e do Google em 2020 estavam relacionadas a violações de segurança de memória. Estas estatísticas demonstram claramente a necessidade de repensar as abordagens ao desenvolvimento de software no contexto da actual estratégia de segurança cibernética dos EUA.
O relatório não apenas aponta problemas com C e C++, mas também propõe uma série de alternativas – linguagens de programação reconhecidas como “seguras para memória”. As linguagens recomendadas pela Agência de Segurança Nacional (NSA) incluem Rust, Go, C#, Java, Swift, JavaScript e Ruby. Essas linguagens incluem mecanismos que evitam tipos comuns de ataques à memória, aumentando assim a segurança dos sistemas em desenvolvimento.
Uma análise da popularidade das linguagens de programação de acordo com o índice TIOBE mostra que das linguagens propostas pela NSA, C# ocupa o quinto lugar em popularidade, Java é o quarto, JavaScript é o sexto e Go é o oitavo. Esses dados indicam que algumas das linguagens recomendadas já são amplamente utilizadas e aceitas na comunidade de desenvolvedores profissionais.
A iniciativa da Casa Branca vai além da simples lista de recomendações. Inclui um plano estratégico para reforçar a segurança cibernética a nível nacional, conforme refletido na ordem executiva do presidente Joe Biden de março de 2023. Este documento define a direção para uma colaboração abrangente entre o setor público, as empresas de tecnologia e o público para desenvolver e implementar soluções seguras de software e hardware.
A conclusão do relatório ONCD pede uma seleção consciente de linguagens de programação com base na sua capacidade de gerenciar a memória com segurança. Não é apenas orientação técnica para desenvolvedores, mas também orientação estratégica para organizações que desenvolvem software de missão crítica. A mudança para linguagens de programação que garantam a segurança da memória pode reduzir significativamente o risco de vulnerabilidades e aumentar a confiabilidade e segurança da infraestrutura digital.