A Internet pode ter sérios problemas devido a idiomas como C e C ++ que contribuem para vulnerabilidades

Olá Habr! Apresento a você a tradução do artigo " Problemas de série na Internet que causam idiomas como C e C ++ favorecendo a survenue de failles " (francês).

Mas poucos desenvolvedores se preocupam com isso.


Um bug afeta o iPhone, outro - Windows e o terceiro - servidores em execução no Linux. À primeira vista, esses bugs não têm nada a ver, pois estão relacionados a diferentes plataformas: Android, iOS, macOS, Windows, Linux. No entanto, na realidade, tudo é diferente, de acordo com Alex Gaynor, engenheiro de segurança de software da Mozilla, que trabalhou anteriormente no USDS (Serviço Digital dos Estados Unidos).

[1]
Mais detalhes - https://www.usds.gov , daqui em diante aprox. tradutor.

Durante o terceiro Weakest Link, um evento anual organizado pelo Motherboard Vice,


No que diz respeito a hackers e cibersegurança no futuro, Alex Gaynor levantou um problema sério que, na sua opinião, poderia ameaçar a Internet, mas, paradoxalmente, deixa os desenvolvedores completamente indiferentes.

Gaynor explicou que os três erros mencionados anteriormente existem, porque o software que eles afetam em diferentes plataformas foi escrito usando linguagens de programação, que têm uma tendência desagradável a causar erros como “insegurança na memória”, permitindo o acesso a áreas de memória não alocadas.

[3]
Muito provavelmente, significava que a referência ao sexto elemento de uma matriz composta por 5 elementos é permitida, embora em outras linguagens de programação mais "seguras", pelo menos uma mensagem de erro seja exibida.

Essa categoria de erros pode levar a erros e vulnerabilidades de segurança ao acessar a memória.

Ao permitir que erros como “falta de segurança na memória” ocorram, linguagens de programação como C e C ++ podem espalhar um fluxo quase infinito de vulnerabilidades críticas de segurança ao longo dos anos. Um exemplo dessas vulnerabilidades é:

  • incompatibilidade de tipo
  • estouro de buffer
  • estouro de variável inteira
  • usar após vulnerabilidade gratuita

A incompatibilidade de tipo pode ocorrer quando um trecho de código não verifica o tipo de objeto passado para ele e o usa cegamente. Esta situação pode ser perigosa. Além disso, juntamente com incompatibilidades de tipo, ponteiros de função incorretos ou dados incorretos estão associados à parte errada do código, o que em alguns casos pode levar à sua execução.

O estouro de buffer (ou "buffer overflow" em inglês) é uma vulnerabilidade de segurança crítica que ocorre quando um usuário digita uma string que estará em uma matriz de caracteres de tamanho insuficiente. Isso faz com que os dados sejam gravados fora da área de memória alocada para a matriz. O HeartBleed, por exemplo, que impactou 17% dos servidores seguros na Internet, era uma vulnerabilidade de estouro de buffer que permitia ler 60 KB após o final da lista, incluindo senhas e outros dados do usuário.

O excesso de número inteiro é uma vulnerabilidade difícil de detectar que explora o fato de que os números não podem exceder um determinado valor, o que depende do número de bits usados ​​para representá-los e do método de codificação.

A vulnerabilidade "usar depois de liberar" geralmente ocorre ao usar um ponteiro ou dados na memória quando o ponteiro (ou bloco de memória) já está liberado.

Juntas, essas vulnerabilidades são as explorações mais comumente encontradas em softwares populares, como Firefox, Chrome, Windows, Android ou iOS. Gaynor já conta com pelo menos 400 e afirma: “Eu monitoro a segurança desses projetos há mais de um ano e, em quase todas as versões desses produtos, mais da metade das vulnerabilidades são inseguras de memória. E ainda mais alarmante é que vulnerabilidades graves e críticas [...] quase sempre têm esse tipo ".

Apesar dos riscos significativos à segurança do software que eles suportam, as linguagens de programação que não são seguras para a memória, como C ou C ++, ainda são usadas pelos desenvolvedores, enquanto alternativas comprovadas, como Rust e Swift, podem ser consideradas. como idiomas "memória segura" são raros.

Isso pode ser devido ao fato de que, para um novo projeto, os desenvolvedores, em regra, escolhem uma linguagem de programação com base nas linguagens que sua equipe conhece, no desempenho e nos sistemas de bibliotecas que podem fluir dessa escolha. Ao tomar decisões, o componente de segurança associado a isso quase nunca é considerado, ou pelo menos não é considerado suficiente, disse Gaynor.

Além disso, a maioria dos projetos de software, mesmo os mais importantes para segurança na Internet, não são novos. Eles foram lançados há dez anos, se não mais. Linux, OpenSSL e o servidor da web Apache, por exemplo, têm mais de vinte anos. Para projetos de larga escala como esses, reescrever todo o código em um novo idioma não é uma opção. Eles devem ser transformados gradualmente, o que significa que os projetos devem ser escritos e salvos em dois idiomas diferentes, em vez de um. Implica também a necessidade de formar uma equipe grande, que leva muito tempo e exige mais dinheiro.

O maior problema, finalmente, é que muitos desenvolvedores não acreditam que o problema exista. Eles acreditam que o problema não é que linguagens como C ou C ++ contribuam para vulnerabilidades, mas outros programadores que escrevem código com erros. Eles acreditam que não há problemas com essas linguagens supostamente "inseguras para a segurança da memória", porque nenhum código é perfeito, apenas as pessoas não sabem como usá-las.

O que você acha disso?



Observo que críticas sólidas à tradução também são bem-vindas.

Obrigado pela atenção!

Source: https://habr.com/ru/post/pt432502/


All Articles