Entenda quais são as tecnologias certas para o contexto da sua empresa e se defenda de ameaças conhecidas e desconhecidas. Saiba mais como podemos te ajudar.
Em junho de 2024, foram observados mais de 26 bilhões de ataques na web contra aplicativos e APIs, o que representa um aumento de 49% em relação ao ano anterior. Falhas de sistema devido à codificação incorreta e servidores web mal configurados são alguns dos fatores que tornam aplicações vulneráveis à ataques cibernéticos. Tais ataques podem gerar consequências severas às empresas afetadas, como a perda ou exposição de dados sensíveis, danos à reputação e impactos na operação.
Para garantir um ambiente digital mais seguro e minimizar os riscos de exploração, existem várias práticas de segurança que podem ser utilizadas. O fuzzing é uma delas, e é sobre isso que vamos nos aprofundar neste artigo.
Fuzzing para aplicações Web
Fuzzing é uma técnica proativa de teste de segurança, utilizada para detectar vulnerabilidades através da geração de entradas de dados aleatórias para induzir falhas. Esta metodologia é eficaz na identificação de falhas de negação de serviço (DoS), cross-site scripting (XSS) e injeções de código. Embora seja relativamente simples, a técnica é econômica e escalável, e podem revelar falhas críticas que passariam despercebidas em testes convencionais. A implementação do fuzzing é uma forma importante de garantir que o software de uma empresa esteja estável, confiável e seguro.
Dentro das aplicações Web, o fuzzing pode ser categorizado em:
- Fuzzing de aplicação: avalia elementos da interface do usuário, como botões e campos de entrada, e testa comandos de API, expondo a aplicação a entradas anômalas ou inválidas.
- Fuzzing de protocolo: examina a resposta do servidor a conteúdos incorretos enviados por meio de protocolos específicos, como HTTP.
- Fuzzing de formato de arquivo: involucra a criação e submissão de arquivos corrompidos para testar o processamento da aplicação.
O fuzzing utiliza ferramentas automáticas para fornecer entradas inválidas ou inesperadas a um programa ou função, verificando os resultados para ver se o programa falha ou age de forma inapropriada. Algumas das principais ferramentas são:
- FFuf: útil para a enumeração de URLs, arquivos, e subdomínios, permitindo descobrir locais e arquivos potencialmente expostos.
- Dirb: ferramenta de linha de comando para descoberta de arquivos e diretórios ocultos em servidores web.
- GoBuster: destaca-se pela rapidez e versatilidade, e é adequado para força bruta em várias frentes de teste.
- WFuzz: especializado em aplicações web, permite a substituição de entradas por payloads específicos, com suporte a plugins.
- SPIKE: framework para a criação de fuzzers de protocolo personalizados, utilizando C++.
- American Fuzzy Lop (AFL): emprega algoritmos genéticos para otimizar a cobertura de código dos testes.
- Boofuzz: framework de fuzzing em Python, focado na automação e extensibilidade do processo de teste.
Limitações da técnica e como contorná-las
Para que o fuzzing seja efetivo, ele deve cobrir o máximo possível do código da aplicação. A ideia é explorar diferentes caminhos de execução para maximizar a descoberta de vulnerabilidades. Se o teste cobrir apenas uma pequena parte do código, muitas vulnerabilidades potenciais podem passar despercebidas.
Outra limitação da técnica é o seu uso em aplicações que rejeitam entradas que não são consideradas válidas. Se uma entrada gerada pelo fuzzing for rejeitada, ela não será capaz de testar o código da aplicação adequadamente.
Além disso, os WAFs, que são dispositivos de segurança que monitoram e filtram o tráfego HTTP de e para uma aplicação web, também podem bloquear tentativas de fuzzing ao identificar entradas que parecem maliciosas. Isso pode impedir que o fuzzing funcione, já que o tráfego de teste é bloqueado antes de atingir a aplicação.
O fuzzing inteligente é uma das estratégias para lidar com esses desafios e melhorar a eficácia dos testes. Ele adapta suas entradas com base no feedback que recebe da aplicação. Se um determinado tipo de entrada provoca um comportamento interessante ou leva a uma falha, o fuzzing ajusta seus testes para explorar ainda mais essa área. Isso aumenta as chances de encontrar vulnerabilidades, pois o teste se torna mais direcionado.
Outros métodos de contornar as limitações do fuzzing são as técnicas de camuflagem. Isso significa modificar as entradas de teste de maneira que elas pareçam benignas ou normais, evitando a detecção e o bloqueio pelo WAF.
Estudo de caso
Um caso emblemático do impacto do fuzzing na segurança de aplicações Web é a descoberta de uma vulnerabilidade crítica no Apache Struts 2, que é um framework popular para aplicações Java Web.
Ao aplicar técnicas de fuzzing no Apache Struts 2, foi descoberto um erro de execução remota de código (RCE), identificado como CVE-2017-5638, que permitia que atacantes enviassem entradas maliciosas por meio de um cabeçalho HTTP.
O Apache Struts 2 não sanitizava adequadamente essas entradas, o que permitia a execução de comandos arbitrários no servidor host, comprometendo a segurança da aplicação e a integridade dos dados.
O impacto dessa vulnerabilidade foi vasto, afetando uma ampla gama de organizações que utilizavam o Apache Struts 2, desde sistemas governamentais até empresas do setor privado. A CVE-2017-5638 é um claro exemplo de como o fuzzing pode ser fundamental na descoberta precoce de falhas de segurança que, de outra forma, poderiam permanecer ocultas até serem exploradas por atacantes.
A rápida identificação e correção dessa vulnerabilidade demonstrou a eficácia do fuzzing como uma ferramenta essencial no arsenal de segurança de aplicações web, destacando a importância de práticas proativas de teste de segurança no ciclo de desenvolvimento de software para manter a integridade e a confiabilidade de aplicações e, consequentemente, do negócio.