Como baixar ferramentas ReDoS e proteger seus aplicativos contra ataques de negação de serviço de expressão regular
Expressões regulares (regexes) são ferramentas poderosas para validar, analisar e manipular strings. No entanto, eles também podem ser uma fonte de riscos de segurança se não forem usados com cuidado. Neste artigo, explicaremos o que é ReDoS, como ele pode afetar seus aplicativos e como evitá-lo. Também mostraremos como baixar ferramentas ReDoS que podem ajudá-lo a detectar, testar e corrigir vulnerabilidades ReDoS em seu código.
O que é ReDoS e por que é perigoso?
ReDoS explicado
ReDoS significa Regular Expression Denial of Service. É um tipo de ataque de complexidade algorítmica que explora o fato de que algumas implementações de regex podem levar muito tempo para avaliar determinadas entradas. Um invasor pode criar uma entrada maliciosa que faz com que o mecanismo regex entre em um estado de retrocesso excessivo, consumindo muito tempo e memória da CPU. Isso pode resultar em uma negação de serviço para o aplicativo ou o servidor que usa o regex.
download redos
Exemplos de ataques ReDoS e vulnerabilidades
Ataques ReDoS não são incomuns no mundo real. Por exemplo, o firewall da Cloudflare teve um problema de ReDoS em 2019 e o back-end do Stack Overflow teve um problema de ReDoS em 2016. Aqui estão alguns exemplos de regexes vulneráveis a ataques ReDoS:
Regex
Descrição
entrada maliciosa
^(a+)+$
Este regex corresponde a uma ou mais repetições de um ou mais caracteres 'a'.
aaaaaaaaaaaaaaaaaaaaaa!
([a-zA-Z]+)*
Este regex corresponde a zero ou mais repetições de um ou mais caracteres alfabéticos.
aaaaaaaaaaaaaaaaaaaaaaaaaaaa1
(aaa)+
Este regex corresponde a uma ou mais repetições de 'a' ou 'aa'.
aaaaaaaaaaaaaaaaaaaaaa!
(.*machado}
Este regex corresponde a x repetições de qualquer número de caracteres seguidos por 'a'.
a! (para x > 10)
Em todos esses casos, a entrada maliciosa faz com que o mecanismo regex tente vários caminhos possíveis antes de falhar na correspondência, resultando em complexidade de tempo exponencial.
Como prevenir ataques ReDoS
Evite usar Regex ou use motores Regex seguros
A maneira mais infalível de evitar ataques ReDoS é evitar completamente o uso de regex. No entanto, isso pode não ser viável ou desejável, pois regexes são muito úteis para muitas tarefas. Nesse caso, você deve usar mecanismos regex seguros que não apresentem comportamento patológico. Por exemplo, você pode usar mecanismos baseados em NFA que simulam todos os caminhos possíveis em paralelo ou mecanismos baseados em DFA que convertem o regex em um autômato determinístico. Alguns exemplos de mecanismos regex seguros são RE2, Hyperscan e caixa regex de Rust.
Detectar e sanitizar Regexes malignos
Você também pode evitar ReDoS detectando regexes malignos em seu código ou na entrada do usuário e, em seguida, limpando-os. Um evil regex é aquele que contém agrupamento com repetição, dentro do qual há repetição ou alternância com sobreposição. Por exemplo, (a+)+ é um regex mal porque contém a+ dentro de (a+)+. Você pode usar ferramentas como RXXR2 ou SafeRegex para detectar regexes malignos e sugerir alternativas mais seguras. Você também pode usar bibliotecas como OWASP Java Encoder ou OWASP ESAPI para limpar a entrada do usuário antes de aplicar regexes a ela.
Use tempos limite e limites para correspondência Regex
Outra forma de evitar ReDoS é usar tempos limite e limites para correspondência de regex. Isso significa que você define uma quantidade máxima de tempo ou recursos que o mecanismo regex pode usar para avaliar uma entrada. Se o limite for excedido, a correspondência é interrompida e um erro é retornado. Dessa forma, você pode evitar o bloqueio de seu aplicativo ou servidor devido a uma entrada maliciosa. Você pode usar bibliotecas como RegexTimeout ou RegExLib para implementar tempos limite e limites para correspondência de regex em vários idiomas.
Como baixar ferramentas ReDoS
Ferramentas para detectar vulnerabilidades de ReDoS
Se você deseja baixar ferramentas ReDoS que podem ajudá-lo a detectar vulnerabilidades ReDoS em seu código, você pode usar as seguintes ferramentas:
RXXR2: Uma ferramenta que pode analisar estaticamente regexes e descobrir se eles são vulneráveis a ataques ReDoS. Também pode sugerir alternativas mais seguras para regexes malignos. Você pode baixá-lo de .
SafeRegex: uma ferramenta que pode verificar regexes em busca de vulnerabilidades ReDoS usando uma abordagem dinâmica. Ele também pode gerar casos de teste que acionam o pior desempenho do regex. Você pode baixá-lo de .
ReScue: Uma ferramenta que pode corrigir automaticamente as vulnerabilidades ReDoS em aplicativos Java usando uma combinação de análise estática e dinâmica. Também pode gerar casos de teste que verificam a correção e eficácia dos patches. Você pode baixá-lo de .
Ferramentas para testar e comparar o desempenho de ReDoS
Se você deseja baixar ferramentas ReDoS que podem ajudá-lo a testar e comparar o desempenho de seus regexes, você pode usar as seguintes ferramentas:
RegexBuddy: Uma ferramenta que pode ajudá-lo a criar, testar, depurar e otimizar seus regexes. Ele também pode medir a velocidade e a eficiência de seus regexes e compará-los com diferentes mecanismos e opções. Você pode baixá-lo de .
RegexPerf: Uma ferramenta que pode ajudá-lo a medir o desempenho de seus regexes em várias entradas e mecanismos. Também pode gerar gráficos e relatórios que mostram os resultados de seus testes. Você pode baixá-lo de .
RegexPal: Uma ferramenta que pode ajudá-lo a testar seus regexes online usando um navegador da web. Ele também pode destacar as correspondências e capturar grupos de seus regexes em diferentes entradas. Você pode acessá-lo de .
Ferramentas para gerar Regexes seguros e eficientes
Se você deseja baixar as ferramentas ReDoS que podem ajudá-lo a gerar regexes seguras e eficientes, você pode usar as seguintes ferramentas:
Rex: Uma ferramenta que pode ajudá-lo a gerar regexes a partir de especificações de linguagem natural.Ele também pode verificar a exatidão e cobertura de seus regexes usando exemplos e contra-exemplos. Você pode baixá-lo de .
Rexygen: Uma ferramenta que pode ajudá-lo a gerar regexes ideais a partir de exemplos. Ele também pode classificar os regexes gerados com base em sua simplicidade, legibilidade e desempenho. Você pode baixá-lo de .
Regulex: Uma ferramenta que pode ajudá-lo a gerar diagramas visuais de seus regexes. Ele também pode ajudá-lo a entender e depurar seus regexes mostrando sua estrutura e comportamento. Você pode acessá-lo de .
Conclusão
Neste artigo, explicamos o que é ReDoS, como ele pode afetar seus aplicativos e como evitá-lo. Também mostramos como baixar ferramentas ReDoS que podem ajudá-lo a detectar, testar e corrigir vulnerabilidades ReDoS em seu código. Esperamos que este artigo tenha sido útil para você e que você tenha aprendido algo novo sobre ReDoS.
perguntas frequentes
Aqui estão algumas perguntas frequentes sobre ReDoS e ferramentas ReDoS:
Qual é a diferença entre ReDoS e DoS?
ReDoS é um tipo específico de ataque DoS (Denial of Service) que visa o mecanismo regex de um aplicativo ou servidor. DoS é um termo geral que se refere a qualquer ataque que visa interromper o funcionamento normal de um sistema ou rede, sobrecarregando-o com solicitações ou tráfego.
Como posso saber se meu regex é vulnerável a ReDoS?
Você pode usar ferramentas como RXXR2 ou SafeRegex para analisar seu regex e verificar se ele é vulnerável a ReDoS. Você também pode usar ferramentas como RegexBuddy ou RegexPerf para testar seu regex em diferentes entradas e mecanismos e medir seu desempenho.
Como posso corrigir uma vulnerabilidade ReDoS no meu código?
Você pode corrigir uma vulnerabilidade ReDoS em seu código usando um ou mais dos seguintes métodos:
Evite usar regex ou use mecanismos regex seguros que não apresentem comportamento patológico.
Detecte e limpe regexes malignos em seu código ou na entrada do usuário.
Use tempos limite e limites para correspondência de regex.
Use ferramentas como ReScue para corrigir automaticamente as vulnerabilidades ReDoS em seu código.
Quais são algumas práticas recomendadas para escrever regexes seguras e eficientes?
Algumas práticas recomendadas para escrever regexes seguros e eficientes são:
Use expressões regulares simples e específicas que correspondam apenas ao que você precisa.
Evite usar agrupamentos, repetições, alternâncias ou referências inversas desnecessárias.
Use âncoras, literais, classes de caracteres e quantificadores para reduzir a ambigüidade e o retrocesso.
Use ferramentas como Rex ou Rexygen para gerar regexes ideais a partir de linguagem natural ou exemplos.
Use ferramentas como o Regulex para visualizar e entender seus regexes.
Onde posso aprender mais sobre ferramentas ReDoS e ReDoS?
Você pode aprender mais sobre ferramentas ReDoS e ReDoS nos seguintes recursos:
: um site que fornece uma visão geral do ReDoS, suas causas, efeitos e soluções.
: uma página wiki que explica o ReDoS, seu impacto, prevenção e métodos de teste.
: um repositório GitHub que lista várias ferramentas para lidar com problemas de ReDoS.
0517a86e26
Comments