Executando verificação de segurança...
8

CrowdStrike - Análise do Erro

Postado por Zach Vorhies / Google Whistleblower (@Perpetualmaniac)

"Era um ponteiro NULL da linguagem C++ não segura para a memória.

Como sou um programador profissional de C++, deixe-me decodificar este stack trace dump para você".

A memória no seu computador é organizada como um enorme array de números. Representamos esses números aqui em hexadecimal, que é base 16 (hexadecimal). A área problemática? O computador tentou ler o endereço de memória 0x9c (ou seja, 156).

Por que é assim tão ruim? Esta é uma região inválida de memória para qualquer programa. Qualquer programa que tente ler desta região será IMEDIATAMENTE DESCARTADO PELO WINDOWS. É isso que você vê aqui com este dump de pilha.

Programadores em C++ devem verificar isso quando passam objetos ao redor, "verificando se é null".

Normalmente, você verá algo assim:

string* p = get_name();

if (p == NULL) { 
    print("Não foi possível obter o nome"); 
}

A parte string* significa que temos um "ponteiro" para o início do valor da string. Se for null, então não há nada lá, não tente acessá-lo.

Então, vamos pegar um objeto genérico com alguns dados:

struct Obj {
  int a;
  int b;
};

Agora vamos assumir o seguinte:

Obj* obj = NULL;

Então o endereço de:

obj é 0
obj->a é 0 + 4
obj->b é 0 + 8

Então, se eu fizer isso com um ponteiro NULL:

print(obj->a);

O programa gerará um despejo de pilha como o que você verá acima. Ele não conseguirá ler o valor 0x000000004.

Neste despejo de pilha, você vê que está tentando ler o valor de memória 0x9c. Em números humanos, esse é o valor 156. Então, o que aconteceu foi que o programador esqueceu de verificar se o objeto com o qual estava trabalhando era válido e tentou acessar uma das variáveis membro do objeto...

NULL + 0x9C = 0x9C = 156.

Isso é uma região inválida de memória.

E o pior é que isso ocorre em um programa especial chamado driver de sistema, que tem acesso PRIVILEGIADO ao computador. Portanto, o sistema operacional é forçado, por excesso de cautela, a travar imediatamente.

Isso é o que está causando a tela azul da morte. Um computador pode se recuperar de uma falha em código não privilegiado simplesmente encerrando o programa, mas não um driver de sistema. Quando seu computador trava, 95% das vezes é porque é uma falha nos drivers de sistema.

Se o programador tivesse feito uma verificação para NULL, ou se tivesse utilizado ferramentas modernas que verificam esse tipo de coisa, isso poderia ter sido detectado. Mas, de alguma forma, isso chegou à produção e foi então forçado como uma atualização pela Crowdstrike... OOPS!

A solução para o futuro é que a Microsoft precisa ter políticas melhores para reverter drivers defeituosos e não apenas aplicar atualizações arriscadas aos clientes.

A Crowdstrike provavelmente promoverá seu oficial de segurança de código para implementar ferramentas de sanitização de código que irão detectar isso automaticamente.

E a Crowdstrike provavelmente fará uma análise rigorosa sobre reescrever seu driver de sistema, que atualmente é em C++, para uma linguagem mais moderna como Rust, que não tem esse problema.

Para quem está procurando uma conspiração, a linguagem substituta para C++, Rust, é comprometida por um grupo de pessoas com uma agenda política que estão fazendo coisas estranhas.

É possível que isso seja uma trama para mover o código crítico para Rust. É a única outra linguagem que o Linux está permitindo, além de C. Mas quem sabe."

Link: https://x.com/Perpetualmaniac/status/1814385711359111174

Carregando publicação patrocinada...
6
2