Segurança em Código Aberto questionada
27 de Junho de 2024

A Agência de Segurança Cibernética e Infraestrutura dos EUA (CISA) publicou uma pesquisa analisando 172 projetos open-source chave e se eles estão susceptíveis a falhas de memória.

O relatório, assinado conjuntamente pela CISA, pelo Bureau Federal de Investigação (FBI), bem como organizações Australianas (ASD, ACSC) e Canadenses (CCCS), é um seguimento do 'Case for Memory Safe Roadmaps' lançado em dezembro de 2023, com o objetivo de aumentar a conscientização sobre a importância do código seguro em termos de memória.

Linguagens de programação seguras em termos de memória são aquelas projetadas para prevenir erros comuns relacionados à memória, como buffer overflows, use-after-free e outros tipos de corrupção de memória.

Elas conseguem isso gerenciando automaticamente a memória ao invés de depender do programador para implementar mecanismos seguros de alocação e desalocação de memória.

Um exemplo moderno de um sistema de linguagem segura é o borrow checker do Rust, que elimina data races.

Outras linguagens como Golang, Java, C#, e Python gerenciam a memória por meio de garbage collection, recuperando automaticamente a memória liberada para evitar exploração.

Linguagens inseguras em termos de memória são aquelas que não oferecem mecanismos integrados de gerenciamento de memória, sobrecarregando o desenvolvedor com essa responsabilidade e aumentando a probabilidade de erros.

Exemplos desses casos são C, C++, Objective-C, Assembly, Cython e D.

O relatório apresenta uma pesquisa que examina 172 projetos open-source amplamente implantados, descobrindo que mais da metade contém código inseguro em termos de memória.

Os principais resultados apresentados no relatório são resumidos da seguinte forma:

-52% dos projetos open-source críticos analisados contêm código escrito em linguagens inseguras em termos de memória.

-55% do total de linhas de código (LoC) desses projetos são escritas em linguagens inseguras em termos de memória.

-Os maiores projetos são desproporcionalmente escritos em linguagens inseguras em termos de memória.

-Dos dez maiores projetos por total de LoC, cada um tem uma proporção de LoC insegura em termos de memória acima de 26%.

-A proporção média de LoC insegura em termos de memória nesses grandes projetos é de 62,5%, com quatro projetos excedendo 94%.

Mesmo os projetos escritos em linguagens seguras em termos de memória muitas vezes dependem de componentes escritos em linguagens inseguras em termos de memória.

Alguns exemplos notáveis do conjunto examinado são Linux (proporção de código inseguro 95%), Tor (proporção de código inseguro 93%), Chromium (proporção insegura 51%), MySQL Server (proporção insegura 84%), glibc (proporção 85%), Redis (proporção 85%), SystemD (65%) e Electron (47%).

A CISA explica que os desenvolvedores de software enfrentam múltiplos desafios que muitas vezes os obrigam a usar linguagens inseguras em termos de memória, como restrições de recursos e requisitos de desempenho.

Isso é especialmente verdadeiro ao implementar funcionalidades de baixo nível como networking, criptografia e funções do sistema operacional.

"Observamos que muitos projetos open source críticos são parcialmente escritos em linguagens inseguras em termos de memória e a análise limitada de dependência indica que projetos herdam código escrito em linguagens inseguras em termos de memória através de dependências," explica a CISA no relatório.

Onde desempenho e restrições de recursos são fatores críticos, temos visto, e esperamos a continuação do uso, de linguagens inseguras em termos de memória.

A agência também destaca o problema dos desenvolvedores desativarem recursos de segurança de memória, seja por erro ou propositalmente, para atender a requisitos específicos, resultando em riscos mesmo ao usar blocos de construção teoricamente mais seguros.

Ultimamente, a CISA recomenda que os desenvolvedores escrevam novo código em linguagens seguras em termos de memória, como Rust, Java e GO, e façam a transição de projetos existentes, especialmente componentes críticos, para essas linguagens.

Além disso, é recomendado seguir práticas seguras de codificação, gerenciar e auditar cuidadosamente as dependências e realizar testes contínuos, incluindo análise estática, análise dinâmica e fuzz testing, para detectar e tratar questões de segurança de memória.

Publicidade

Pentest do Zero ao Profissional

O mais completo curso de Pentest e Hacking existente no Brasil, ministrado por instrutores de referência no mercado. Oferece embasamento sólido em computação, redes, Linux e programação. Passe por todas as fases de um Pentest utilizando ambientes realísticos. Se prepare para o mercado através da certificação SYCP. Saiba mais...