.

Um grupo que trabalha no desenvolvimento da imensamente popular linguagem de programação C++ traçou um caminho para tornar a linguagem “memória segura” – assim como seu rival mais jovem, Rust.
Rust foi adotado pela Microsoft, AWS, Meta, Android Open Source Project do Google, o projeto Chromium dominado por C++ (mais ou menos), o kernel do Linux e muitos outros, o que ajudou a reduzir as falhas de segurança de memória. Até mesmo a Agência de Segurança Nacional (NSA) recomendou que os desenvolvedores fizessem uma mudança estratégica de C++ em favor de C#, Java, Ruby, Rust e Swift.
Avisos generalizados sobre a segurança do C++ levaram a movimentos para traçar um caminho para a “Segurança do C++”, detalhado em um artigo de um grupo que inclui Bjarne Stroustrup, o criador do C++, para o C++ Standards Committee Working Group 21 (WG21), que foi lançado este mês.
O artigo defende mudanças técnicas e considera como o C++ deve abordar seu “problema de imagem” com segurança.
Também: Linguagens de programação: por que esse velho favorito está em alta novamente
A Apple é a mais recente gigante da tecnologia a destacar problemas de segurança com código C/C++ em sistemas operacionais. A empresa está abordando a segurança da memória no XNU, o kernel para iOS, macOS, watchOS e muito mais.
“Como quase todos os dispositivos de usuário populares hoje dependem de códigos escritos em linguagens de programação como C e C++, que são considerados “não seguros para a memória”, o que significa que eles não fornecem garantias sólidas que impedem certas classes de bugs de software, melhorar a segurança da memória é um objetivo importante para equipes de engenharia em todo o setor”, explicou a Apple em outubro.
C++ surgiu em 1985 e continua sendo uma das linguagens mais populares, em parte devido ao seu desempenho. Ele é padronizado pela Organização Internacional de Padronização (ISO), cuja versão mais recente é C++20, finalizada em dezembro de 2020. O próximo padrão provavelmente se chamará C++2023. O Rust, por outro lado, alcançou a versão 1.0 em 2015 e não é padronizado, mas impulsionado por sua comunidade de colaboradores.
O artigo de Stroustrup e seus colegas fala sobre o uso de C++ em domínios críticos de segurança, como embarcados, médicos, aeroespaciais e aviônicos. Eles reconhecem que há “demandas crescentes por restrições mais formais em relação à segurança” devido ao aumento de veículos autônomos, infraestrutura crítica conectada, aplicativos de mensagens e assim por diante.
“Aplicações como embarcadas, automotivas, aviônicas, médicas e nucleares eram aplicações óbvias que requerem segurança se programadas em C++”, escrevem os autores.
“Então, ao longo do caminho, foram desenvolvidas diretrizes de segurança para a maioria deles. A explosão da Internet trouxe navegadores que eram cada vez mais alvos de hackers à medida que mais transações comerciais ocorriam por meio de navegadores. Rust, originalmente da Mozilla, construído sobre C++ tornou-se o pôster filho de uma linguagem de navegador segura. Cada vez mais temos visto as alegações de segurança do RUST testadas em mais aplicativos além dos navegadores, por exemplo, drivers e kernel do Linux.”
O documento observa a recente recomendação da NSA para que as organizações “considerem fazer uma mudança estratégica de linguagens de programação que fornecem pouca ou nenhuma proteção de memória inerente, como C/C++, para uma linguagem segura de memória quando possível”.
“Mais recentemente, dois desenvolvimentos envolvendo publicações do governo dos EUA aconselhando os aplicativos de segurança a não usar C/C++ do NIST e da NSA parecem ter iniciado uma discussão ampla sobre segurança no C++. Tanto o NIST quanto a NSA parecem sugerir o uso de uma linguagem alternativa”, disse. o papel diz. O risco é que “entidades não governamentais possam ignorar a diretiva do governo E/OU, a diretiva do governo bloqueia o C++ de determinado mercado e indiretamente leva a um afastamento do C++”.
O artigo observa que o C++ tem um problema de imagem quando se trata de segurança, mas atribui isso a outras linguagens que se vendem como seguras, o que os autores argumentam que ignora os avanços em segurança que o C++ fez nos últimos anos.
“C++ parece, pelo menos na imagem pública, menos competitiva do que outras linguagens em relação à segurança. Isso parece verdade especialmente quando comparado a linguagens que se anunciam de forma mais forte/ativamente/descaradamente/competente do que C++. De certa forma, elas parecem especialmente para satisfazem uma definição de segurança de suíte executiva, o que torna atraente para os executivos solicitar uma mudança do C++”, diz o documento.
Também: Low-code ainda não é uma cura para departamentos de TI sobrecarregados
“No entanto, o que se perdeu no barulho é que o C++ fez grandes progressos nos últimos anos em questões de oscilação, segurança de recursos e memória… C++ se beneficia de ter uma especificação, comunidade ativa de usuários e implementadores. Outras linguagens “seguras” pode até não ter nenhuma especificação, pelo menos ainda não. Essas importantes propriedades de segurança são ignoradas porque estamos menos preocupados com publicidade. C++ também foi testado pelo tempo e testado em milhões de linhas de código, ao longo de quase meio século.”
Outras línguas não são, argumenta.
“Pode chegar um momento em que o C++ passará sua tocha para outra linguagem maior, mas nenhum dos contendores atuais é assim. Nunca devemos abandonar os milhões de linhas de código existentes, algumas das quais não clamam por segurança. Nós reconhecer a urgência de dar suporte à segurança em C++ é uma das questões de nosso tempo.”
O documento diz que o comitê de padrões C++ WG21 apóia a ideia de que as mudanças para segurança precisam ser adotadas não apenas em ferramentas – onde ele trabalhou mais no passado – mas também para ser “visível” na linguagem/compilador e biblioteca para ajudar a abordar a imagem do C++ em relação à segurança.
.