A Casa Branca quer uma programação com segurança de memória, mas o que é isso?

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.

A ONCD disse:

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. .

  10 dicas essenciais para aproveitar melhor o aplicativo Google Recorder em telefones Pixel

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á:

  Avaliação gratuita do TruthFinder, duração da oferta e preço

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:

  Limpe o lixo e torne seu Mac mais rápido com o MacPaw CleanMyMac

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.