.

A Agência de Segurança Nacional (NSA) está pedindo aos desenvolvedores que mudem para linguagens seguras de memória – como C#, Go, Java, Ruby, Rust e Swift – para proteger seu código da execução remota de código ou de outros ataques de hackers.
Das linguagens mencionadas acima, Java é a mais usada no desenvolvimento de aplicativos corporativos e Android, enquanto Swift é uma das 10 principais linguagens, graças em parte ao desenvolvimento de aplicativos iOS. E há um interesse crescente em Rust como um substituto para C e C++ na programação de sistemas.
“A NSA aconselha as organizações a considerar 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 de memória segura quando possível. Alguns exemplos de linguagens seguras de memória são C#, Go, Java, Ruby , e Swift”, disse a NSA.
A agência de espionagem cita pesquisas recentes do Google e da Microsoft de que 70% de seus problemas de segurança, respectivamente no Chrome e no Windows, eram relacionados à memória e muitos deles eram resultado do uso de C e C++, que são mais propensos a vulnerabilidades baseadas em memória .
Também: Cibersegurança, nuvem e codificação: por que essas três habilidades liderarão a demanda em 2023
“Atores cibernéticos maliciosos podem explorar essas vulnerabilidades para execução remota de código ou outros efeitos adversos, que muitas vezes podem comprometer um dispositivo e ser o primeiro passo em invasões de rede em larga escala”, observa a NSA na folha de informações de segurança cibernética “Software Memory Safety”.
“Linguagens comumente usadas, como C e C++, fornecem muita liberdade e flexibilidade no gerenciamento de memória enquanto dependem fortemente do programador para realizar as verificações necessárias nas referências de memória.”
Portanto, a agência recomenda o uso de uma linguagem de memória segura sempre que possível, seja para desenvolvimento de aplicativos ou programação de sistemas.
“A NSA recomenda usar uma linguagem segura para a memória quando possível”, observa.
Embora a maioria dos profissionais de segurança da informação esteja familiarizada com esse debate sobre linguagens seguras para memória, talvez nem todos os desenvolvedores estejam. No entanto, talvez devessem ser, dado que é um problema de décadas, como o criador do Java, James Gosling, apontou recentemente em uma discussão sobre como e por que o Java foi criado.
De qualquer forma, o documento da NSA oferece aos desenvolvedores uma explicação clara e em linguagem simples das razões técnicas por trás da mudança para linguagens seguras para a memória. Provavelmente a linguagem mais discutida em termos de segurança de memória tem sido a Rust, que é a principal candidata como ‘substituta’ para C e C++.
O kernel do Linux introduziu recentemente Rust como a segunda linguagem para C, seguindo o Android Open Source Project. Esses projetos não substituirão o código C/C++ antigo, mas preferirão o Rust para o novo código. Além disso, o CTO do Microsoft Azure, Mark Russinovich, recentemente convocou todos os desenvolvedores a usarem Rust sobre C e C++ para todos os novos projetos.
“Ao explorar esses tipos de problemas de memória, agentes mal-intencionados – que não estão vinculados às expectativas normais de uso de software – podem descobrir que podem inserir entradas incomuns no programa, fazendo com que a memória seja acessada, gravada, alocada ou desalocada de maneiras inesperadas. “, explica a NSA.
Mas – como especialistas notaram em debates sobre Rust e C/C++ – a NSA adverte que simplesmente usar uma linguagem de memória segura não impede, por padrão, a introdução de bugs de memória no software. Além disso, as linguagens geralmente permitem bibliotecas que não são escritas em linguagens seguras para memória.
“Mesmo com uma linguagem de memória segura, o gerenciamento de memória não é totalmente seguro de memória. A maioria das linguagens de memória segura reconhece que o software às vezes precisa executar uma função de gerenciamento de memória não segura para realizar determinadas tarefas. Como resultado, classes ou funções estão disponíveis e são reconhecidas como não segura para memória e permite que o programador execute uma tarefa de gerenciamento de memória potencialmente insegura”, disse a NSA.
“Algumas linguagens exigem que qualquer coisa que não seja segura para memória seja explicitamente anotada como tal para tornar o programador e quaisquer revisores do programa cientes de que não é seguro. Linguagens seguras para memória também podem usar bibliotecas escritas em linguagens não seguras para memória e, portanto, podem conter funcionalidade de memória não segura . Embora essas formas de incluir mecanismos inseguros de memória subvertam a segurança de memória inerente, elas ajudam a localizar onde podem existir problemas de memória, permitindo uma análise extra nessas seções de código.”
Também: Cibersegurança: Estas são as novas coisas para se preocupar em 2023
A NSA observa que algumas linguagens seguras para memória podem ter um custo de desempenho, o que exige que os desenvolvedores aprendam uma nova linguagem. Ele também aponta que existem medidas que os desenvolvedores podem tomar para fortalecer linguagens não seguras para memória. A equipe do Google Chrome, por exemplo, está explorando vários métodos para fortalecer o C++, mas essas abordagens também vêm com sobrecargas de desempenho. O C++ permanecerá na base de código do Chrome no futuro próximo.
A NSA recomenda testes de segurança de aplicativos estáticos e dinâmicos para detectar problemas de memória. Ele também recomenda explorar métodos de proteção de memória, como o Control Flow Guard (CFG), que colocará restrições sobre onde o código pode ser executado. Da mesma forma, a Randomização do Layout do Espaço de Endereço (ASLR) e a Prevenção de Execução de Dados (DEP) são recomendadas.
.








