Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 26, 2023 04:52 pm GMT

Protegendo sua API NodeJs contra ReDos Attack[Parte 1]

Fala povo bonito, como esto ?
Espero que esteja indo tudo bem por a
Hoje vamos falar sobre ReDos Attack.

Antes de comearmos quero dizer que decidi dividir esse artigo em 3 partes, pois quero que quem esteja comeando no mundo do NodeJs/Javascript, seja backend ou front end, entenda o que eu estou dizendo. No sou muito f de deixar conhecimentos implcitos e meu objetivo atingir pessoas que ainda no conheciam esses conceitos/funcionalidades .

Portanto temos a seguinte diviso para artigo:

  1. Protegendo sua API NodeJs contra ReDos Attack[Parte 1]: definio do que expresso regular, como usar, o que ReDos e como ele ocorre;

  2. Protegendo sua API NodeJs contra ReDos Attack[Parte 2]: Aqui a apresentada a minha proposta de soluo, que inclusive pode ser generalizado para outros casos de operaes que levem muito tempo para serem computadas e possam prejudicar o funcionamento do NodeJs. Explicando o que eu usei e porqu eu usei;

  3. Protegendo sua API NodeJs contra ReDos Attack[Parte 3]: Aqui feito um teste de funcionalidade da soluo proposta para ver se ela de fato resolve o problema, alm de ser feito um teste de carga para verificar se a soluo escalvel quando nossa API ficar sob um trfego intenso de requisies.

Lembrando que isso apenas uma proposta de soluo, baseado nas situaes que j vi e que j tratei. No estou dizendo que seja a melhor, nem a pior, apenas mais uma opo, beleza ?
Por isso se voc s quer ver a soluo, pode pular para a segunda parte, e se voc s quer ver se isso realmente funciona, ento a terceira parte o seu objetivo !!

Sem mais delongas, bora pro contedo!!

ReDos Attack ou Regular Expression Denial of Service Attack um tipo de ataque onde um atacante explora o uso de uma expresso regular mal escrita enviando para a o sistema alvo um payload malicioso que pode fazer com que a expresso regular leve muito tempo para ser computada, consumindo uma grande quantidade de recursos computacionais durante esse processo. Vamos ver o que uma expresso regular, o que e como ocorre um ReDos Attack e o que podemos fazer para mitigar esse risco.

Regex Expression(Expresso regular)
Para entender o que o ReDos, primeiro precisamos ter uma noo do que uma expresso regular.
De forma simples, uma expresso regular um padro que identifica vrios elementos de um conjunto, ou seja, uma expresso regular um padro utilizado para saber se determinado texto, ou partes desse texto, possui alguma caracterstica.
Por exemplo, suponha que voc tem o seguinte texto (no se preocupe com o contedo, apenas para ilustrar o exemplo):

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam sed tempus lorem, non tincidunt nisl. Nullam eget dui vestibulum, blandit lorem ex a, sollicitudin erat. Phasellus aliquet pharetra orci molestie tincidunt. Pellentesque vel egestas nisl. Donec malesuada mauris urna, eu luctus tortor gravida efficitur. Aliquam suscipit risus in sem convallis imperdiet. tempus lorem, Nullam tincidunt  lorem luctus eu urna lorem, vestibulum lorem.

Suponha que voc quer saber quantas e quais so as palavras que possuem exatamente 5 letras.
Neste caso voc poderia utilizar a seguinte expresso regular:

\b[a-zA-Z]{5}\b

Basicamente o que essa expresso regular diz : "Encontre todas as palavras que se inicie com qualquer caractere minsculo ([a-z]) ou se inicie com um caractere maisculo ([A-Z]) e que tenha exatamente 5 caracteres ({5}). O "\b" No incio e no final da expresso regular marca o limite de palavra, isso serve para evitar que sub palavras sejam contabilizadas, ou seja, considera apenas palavras inteiras.
A seguir temos o resultado da expresso regular acima para o texto utilizado no exemplo.

Regular Expression example execution result
No nosso objetivo aqui estudar com profundidade o que uma expresso regular, porm, se voc faz uso desse mecanismo em seu dia a dia como desenvolvedor, ento sugiro fortemente se aprofundar mais nesse assunto, caso no seja um desenvolvedor sugiro ler mesmo assim pois conhecimento nunca demais. Mais informaes sobre expresses regulares pode ser lido aqui definio de Expresso regular.

Ok, agora que j temos uma noo do que uma expresso regular e como podemos utiliz-la vamos ver como ela pode ser prejudicial para o desenvolvimento de um software.

ReDos Attack

No desenvolvimento de software comum que os desenvolvedores utilizem expresses regulares para fazer validaes de dados, em uma validao de formulrio muito comum utiliz-las para validar se um e-mail est correto por exemplo.
Porm, devemos tomar cuidado ao lanar mo de tal artifcio pois dependendo de como se monta a expresso podemos deixar nosso sistema vulnervel, principalmente quando falamos do NodeJs.
Dependendo da expresso e da entrada possvel que ocorra um fenmeno chamado Catastrophic evaluation (Avaliao catastrfica) ou Catastrophic backtracking( Retorno catastrfico).
Essa situao ocorre quando a compilao da expresso regular para uma dada entrada leva tanto tempo e to custosa que todo o CPU fica ocupado executando aquele processamento, impedindo assim que outras tarefas sejam executadas.
No caso do NodeJs, esse fenmeno pode levar ao bloqueio da main thread (thread principal), o que por sua vez pode levar toda a API/Sistema a parar de responder. E exatamente isso que chamados de ReDos Attack, ou seja, quando um atacante envia intencionalmente payloads(dados) maliciosos para a API/Sistema alvo afim de explorar essa falha, deixando assim o sistema alvo inoperante, por isso o nome ReDos, Re de Regular Expression, Dos de Denail of Servie, ou seja, negao de servio baseado em regex.
A seguir exibido um exemplo de expresso regular e input que podem levar essa situao.

Catastrophic evaluation

O site, inclusive, identifica a situao de loop infinito e interrompe a avaliao da nossa expresso, conforme pode ser visto a seguir.

Catastrophic evaluation halted by website

Conforme veremos mais adiante, essa situao no nodeJs pode travar todo o seu sistema e com certeza algo que no queremos.

Ento bora para a parte 2 para ver como podemos resolver essa situao?
Te espero l
Segunda Parte


Original Link: https://dev.to/r9n/protegendo-sua-api-nodejs-contra-redos-attackparte-1-16mc

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To