A Casa Branca quer uma programação com memória segura, mas o que é isso?
Ligações rápidas
⭐ O que é que a Casa Branca está a dizer?
⭐ Porque é que é importante?
⭐ Como é que uma língua insegura se parece?
⭐ Como é um código seguro em termos de memória?
⭐ Devo mudar de linguagem?
Principais lições
A Casa Branca recomendou a utilização de linguagens de programação que priorizam a segurança da memória, como o Rust, para mitigar possíveis riscos de segurança associados a erros de codificação e vulnerabilidades.
Em linguagens de programação mais primitivas, como o C, há uma maior probabilidade de que os erros no código possam resultar em violações de segurança.
Rust, uma linguagem conhecida pelas suas medidas de segurança, fornece uma camada adicional de segurança através da sua gestão automática de memória e capacidades de prevenção de erros incorporadas.
Uma diretiva recente emitida por uma agência governamental dos Estados Unidos defende que os profissionais de programação devem adotar linguagens seguras em termos de memória, como Rust e Java. No entanto, levanta-se a questão de saber o que distingue estas linguagens das outras e se essa distinção é ou não significativa na prática.
O que é que a Casa Branca está a dizer?
Na sua declaração de 26 de fevereiro, o Gabinete do Diretor Nacional Cibernético da Casa Branca defendeu que os programadores de software devem utilizar linguagens de programação seguras em termos de memória, como a Rust.
Como sociedade, temos a capacidade e a obrigação de minimizar a vulnerabilidade do ciberespaço, impedindo a introdução de falhas de segurança que abrangem uma série de classes, através da adoção de linguagens de programação com memória segura. No entanto, esta é uma questão desafiante que requer resolução.
Porque é que é importante?
O Gabinete do Ciberespaço e Inovação Digital (ONCD), fundado em 2021, opera sob a alçada direta do Presidente, fornecendo aconselhamento especializado em questões relacionadas com a cibersegurança e as preocupações associadas. Prevê-se que as decisões tomadas nos Estados Unidos em relação a este domínio exerçam uma influência significativa no panorama mais vasto dos avanços tecnológicos, tanto a nível nacional como internacional.
Várias violações de segurança dignas de nota foram atribuídas a falhas na gestão da memória, que é um aspeto fundamental da programação. A utilização de linguagens mais antigas e de baixo nível oferece aos programadores uma vasta gama de capacidades, mas ao mesmo tempo aumenta a probabilidade de uma codificação incorrecta ter consequências prejudiciais.
Apesar disso, tem havido uma tendência crescente para a utilização de linguagens de programação seguras em termos de memória, como Rust, Python e JavaScript. É muito provável que o comité de normalização de Objectos, Classes e Dados (ONCD) tenha feito este anúncio devido à prevalência de linguagens inseguras como o C, que se tornaram profundamente enraizadas na nossa infraestrutura tecnológica e são normalmente utilizadas em muitas aplicações do dia a dia.
Qual é o aspeto de uma linguagem insegura?
Certamente, teria todo o gosto em fornecer uma versão mais refinada dessa afirmação. Aqui está a minha tentativa de a reformular de uma forma elegante: “Vale a pena notar que o código de programação perigoso nem sempre apresenta uma aparência sinistra ou uma complexidade intrincada. Um exemplo disso pode ser observado num programa C básico, que pode, no entanto, conter riscos potenciais para a segurança e estabilidade do sistema.
#include <stdio.h>
int main (void) {
int arr[3] = { 0, 0, 0 };
printf("%d\n", arr[3]);
return 0;
}
Isto ilustra uma instância exemplar de uma falha que pode resultar em
A informação armazenada no local designado pela variável “arr[3]” constitui um endereço de memória legítimo, comparável a outros dentro do sistema. No entanto, este endereço específico não corresponde a um elemento dentro dos limites definidos para a matriz. Consequentemente, qualquer dado pode ser armazenado nessa posição, com resultados potenciais que vão desde a falha completa do sistema até graves violações de segurança. Historicamente, vários cibercriminosos aproveitaram-se de vulnerabilidades semelhantes.
Apesar de emitir uma notificação de aviso, o compilador C continua a gerar um programa executável. Fica ao critério do programador suprimir ou ocultar esses alertas através de directivas específicas do compilador. Independentemente desta opção, o C continua a oferecer o potencial para danos auto-infligidos, ao passo que linguagens de programação alternativas, como o Rust, se abstêm de fornecer os instrumentos necessários para atingir tais resultados.
Como é que o código seguro em termos de memória se parece?
Numa linguagem de programação que dá prioridade à segurança e evita a corrupção de dados, como o Rust, a questão do buffer overflow não se coloca. O código seguinte demonstra este conceito em Rust:
fn main() {
let arr: [u32; 5] = [0;3];
println!("{}", arr[3]);
}
Apesar da sua correção gramatical, o Rust não conseguirá processar esta parte específica do código devido a um erro de compilação.
A linguagem de programação Rust exibe uma adesão estrita aos seus próprios princípios, recusando-se a executar qualquer código que viole suas diretrizes estabelecidas.Quando se depara com código problemático, o compilador fornece uma explicação clara do problema, impedindo efetivamente a geração de um programa executável.
O Rust oferece uma infinidade de recursos adicionais além dos mencionados anteriormente, com o objetivo de aumentar a segurança por meio do gerenciamento automático de memória e evitar desreferências de ponteiro nulo. Estas incluem a implementação de ponteiros inteligentes, que gerem eficientemente os recursos e mitigam potenciais erros resultantes da utilização ou manuseamento inadequado destes ponteiros.
Devo mudar de idioma?
É essencial reconhecer que cada linguagem de programação serve a sua função e objetivo específicos, pelo que seria imprudente ignorar a prudência quando se considera a possibilidade de evitar absolutamente certas linguagens, independentemente da sua aprovação por indivíduos de alto nível, como presidentes. Apesar da inclinação para o domínio de uma língua em particular, a aquisição de proficiência em várias línguas pode proporcionar um vasto leque de oportunidades de versatilidade e adaptabilidade em empreendimentos futuros.
A segurança da memória é uma caraterística proeminente em numerosas linguagens de programação contemporâneas, tornando essencial o conhecimento de pelo menos uma dessas linguagens. Embora o C possa ter alguma utilidade, apresenta riscos significativos devido à sua falta de medidas de segurança. Felizmente, existem alternativas que oferecem características de segurança e eficiência melhoradas, nomeadamente o Rust, que deve ser considerado por quem procura uma linguagem com mecanismos de segurança robustos, mantendo as capacidades de otimização do desempenho.