últimas postagens
Principais conclusões
- A Casa Branca recomenda o uso de linguagens seguras para memória, como Rust, para reduzir vulnerabilidades de segurança no código.
- Linguagens mais antigas de nível inferior, como C, apresentam riscos de código com erros, levando a incidentes de segurança.
- Linguagens seguras para memória, como Rust, oferecem gerenciamento automático de memória e recursos de prevenção de erros.
Uma agência governamental dos EUA decretou que os programadores deveriam favorecer linguagens seguras de memória, como Rust e Java. Mas por que eles são melhores e isso realmente importa?
O que a Casa Branca está dizendo?
Em uma declaração de 26 de fevereiro, o Escritório do Diretor Nacional Cibernético (ONCD) da Casa Branca instou os desenvolvedores de software a adotarem linguagens de programação seguras para memória, como Rust.
Nós, como nação, temos a capacidade – e a responsabilidade – de reduzir a superfície de ataque no ciberespaço e evitar que classes inteiras de bugs de segurança entrem no ecossistema digital, mas isso significa que precisamos enfrentar o difícil problema de migrar para linguagens de programação seguras para memória. .
Por que isso é importante?
A ONCD, criada em 2021, reporta diretamente ao Presidente, aconselhando-o sobre segurança cibernética e questões relacionadas. É provável que a política dos EUA tenha um efeito cascata em todo o mundo da tecnologia.
Muitas das piores vulnerabilidades de segurança de todos os tempos tiveram problemas com a segurança da memória como causa raiz. Linguagens mais antigas de nível inferior dão aos programadores muito poder, mas isso aumenta o risco de códigos com bugs causarem sérias repercussões.
Independentemente disso, o uso de linguagens seguras para memória – como Rust, Python e JavaScript – tem aumentado há muito tempo. A ONCD provavelmente está fazendo esse anúncio porque linguagens menos seguras como C existem há tanto tempo que seu código legado está agora enraizado na infraestrutura e em grande parte do software que usamos diariamente.
Qual é a aparência de uma linguagem insegura?
Código inseguro nem sempre parece assustador ou complicado. Veja este exemplo de um programa C simples:
#include <stdio.h>int main (void) {
int arr[3] = { 0, 0, 0 };
printf("%d\n", arr[3]);
return 0;
}
Este é um exemplo clássico de bug que pode levar a um ataque de buffer overflow. O programador esqueceu que arrays em C (e na maioria das outras linguagens) são indexados em zero, o que significa que o primeiro elemento está em arr[0]etc. Tentativa de acessar arr[3] é, portanto, um erro, mas que C permitirá:
O valor em arr[3] é um endereço de memória válido, como qualquer outro, apenas não pertence ao array. Qualquer valor pode ser armazenado lá, e as consequências de acessá-lo ou escrever nele podem variar desde uma falha no programa até um incidente de segurança catastrófico. Muitos hackers ao longo da história exploraram esses bugs.
Embora o compilador C ainda produza um aviso, ele também gera um executável. Um programador é livre para ignorar avisos e até mesmo ocultá-los usando sinalizadores do compilador. C ainda permitirá que você dê um tiro no próprio pé, enquanto linguagens como Rust não lhe oferecerão nenhuma arma.
Qual é a aparência do código seguro para memória?
Em uma linguagem segura para memória como Rust, o mesmo problema simplesmente não existe. Aqui está o mesmo programa, em Rust:
fn main() {
let arr: [u32; 5] = [0;3];
println!("{}", arr[3]);
}
Embora este código seja sintaticamente válido, Rust não conseguirá compilá-lo:
O compilador explica o problema e se recusa a produzir um executável. Rust simplesmente não permitirá que você execute este código.
Rust tem muitos outros recursos além deste, para ajudar a protegê-lo. Inclui recursos como ponteiros inteligentes para lidar com o gerenciamento de memória automaticamente e evitar a desreferenciação de ponteiro nulo.
Devo mudar de idioma?
Cada linguagem de programação tem um propósito, então você deve ter cuidado com os conselhos para evitá-los absolutamente, mesmo que venham do Presidente. Embora você possa optar por se especializar em um determinado idioma, é sempre útil aprender uma variedade para expandir suas opções.
A segurança da memória é um recurso de tantas linguagens modernas que você já deve estar familiarizado com pelo menos uma. C tem seus usos, mas existem opções mais seguras que causarão menos acidentes. Em particular, se você está procurando uma linguagem eficiente que tenha boas redes de segurança, Rust é obrigatório.