Você está na página 1de 4

Pedro Henrique Barbosa de Almeida, NUSP: 10258793

Resumo do encontro 24
Detecção de erros e protocolos de acesso múltiplo

CVE-2021-32640

Essa vulnerabilidade foi detectada em uma biblioteca do Websocket (WS) para


OpenJS usada em aplicações de comunicação em tempo real. O Websocket
funciona de forma parecida com o HTTP, porém, ele usa um canal de comunicação
full-duplex. Atualmente, a maior parte dos navegadores fornece suporte a
Websocket. Bons exemplos de uso desse protocolo são jogos online e chats online.

A falha pode ser explorada através de um certo campo do header de uma requisição
e pode ser usada para tornar um servidor WS lento. Mais especificamente, a
vulnerabilidade acontece passando um tipo de protocolo personalizado no campo da
requisição "Sec-Websocket-Protocol". Esse tipo de ataque é conhecido como
ReDoS (regular expression denial of service) e ele utiliza entradas que podem levar
muito tempo para serem processadas pelo servidor. O processador de regex do
servidor procura por vírgula e espaços, quando é enviado o pacote malicioso, o
processador fica muito tempo procurando por esses padrões. Esse cenário fica mais
dramático se vários clientes estiverem rodando a mesma requisição maliciosa.

O maior risco da vulnerabilidade é a perda de disponibilidade de um serviço. Como


hoje a maior parte das aplicações são feitas para a web, disponibilidade é muito
importante. Essa indisponibilidade se dá pelo esgotamento de recursos do sistema:
banda, memória e processamento. O que pode respingar em outras aplicações
rodando no mesmo servidor.

A correção consiste em trocar a linha que faz o "parseamento" dos protocolos


usando regex, por uma linha que faz a quebra de todos os protocolos usando
simplesmente a vírgula. Com isso, o sistema fica imune a ataques ReDoS.

Detecção de erros

1
EDC significa Error Detection and Correction, ou detecção e correção de erros (por
exemplo, redundância). Geralmente esse mecanismo acontece através do
acréscimo de alguns bits no datagrama transmitido.

Mesmo assim, a detecção de erros nunca é 100% confiável. Os protocolos podem


perder alguns erros. Campos de bits EDC maiores permitem uma melhor detecção e
correção.

É necessário haver um balanço da quantidade de bits do datagrama e do


mecanismo de detecção de erro, pois, se os bits de detecção de erro forem em
grande número pode haver desperdício de recursos de rede. Geralmente esses
parâmetros são definidos com experimentos.

Checagem de paridade

A checagem de paridade de bit único consegue detectar apenas erros de 1 bit. Essa
checagem se dá através de um bit que indica a paridade da quantidade de "1"s
transmitidos: é 1 se houver um número par de bits "1" no dado transmitido, ou 0,
caso contrário. Se mais de 1 bits estiverem ligados erroneamente no dado
transmitido, pode ser que o erro passe despercebido pelo mecanismo de checagem
de paridade.

Bit paridade de dimensão 2

Com esse mecanismo, é possível detectar e corrigir erros de um único bit. Ele
funciona da seguinte forma: a sequência de bits que deseja-se transmitir é quebrada
em várias linhas. Assim, definem-se bits de paridade de cada linha e de cada
coluna. A combinação de bits de paridade da linha e da coluna permite saber
exatamente qual no bit errado, o que possibilita, inclusive, a correção.

Não sempre, mas geralmente, os erros de bits acontecem em "rajada", o que torna
uma sequência de bits errada nos dados transmitidos.

Checksum da internet

Esse mecanismo tem por objetivo detectar erros em rajada (ou seja, sequência de
bits trocados) em um segmento transmitido.

2
Nele, o remetente trata conteúdos do segmento UDP (incluindo campos de
cabeçalho UDP e endereços de IP) como sequências de inteiros de 16 bits. Assim, o
checksum (soma) do conteúdo do segmento é calculado e colocado no campo de
checksum do UDP.
Já o destinatário computa o checksum do segmento recebido e checa se o
checksum calculado é igual ao valor do campo checksum do segmento. Se não for
igual, um erro foi detectado. Se for igual, erros não foram detectados. No entanto,
erros podem ter ocorrido mesmo assim.

Checagem de redundância cíclica (CRC)

É uma codificação mais poderosa de detecção de erros, seu objetivo é escolher r


bits "R", tais que o segmento <D,R> (onde D é a sequência de bits do dado) seja
exatamente divisível por G.

O destinatário conhece G, divide <D,R> por G. Se o resto não for zero, um erro foi
detectado. Esse mecanismo pode detectar todos os erros menores que r+1 bits. Ele
é amplamente usado na prática (Ethernet, 802.11 Wifi).

Esse mecanismo é mais difícil de implementar. Além disso, na prática, a junção de


bits de verificação não é através de uma concatenação, mas sim através de uma
multiplicação e um XOR. Com isso, é possível detectar os erros em "rajada".

Existem geradores (G) amplamente conhecidos na literatura. Geralmente, eles são


determinados com experimentos.

Protocolos de links de múltiplo acesso

Embora cada elemento esteja conectado à rede por um único cabo, existem
barramentos. Em certos casos, pode haver colisão de dados. Dessa forma, o
protocolo deve ser capaz de "se recuperar" toda vez que isso acontece.

Existem dois tipos de enlaces principais: ponto a ponto, onde há um link ponto a
ponto entre o switch Ethernet e os hosts ou PPP para acesso com conexão discada;
e transmissão (cabo compartilhado), usado por cabos ethernet, wireless 802.11, 4G,
satélites.

3
Em um canal de difusão compartilhado, quando há duas ou mais transmissões
simultâneas por nós da rede, pode haver interferência, sobretudo, por colisões, se o
nó recebe dois ou mais sinais ao mesmo tempo.

Já com o uso de um protocolo de múltiplo acesso, existe um algoritmo distribuído


que determina como os nós podem compartilhar o canal, ou seja, determinar quais
nós podem transmitir. A comunicação sobre o compartilhamento do canal deve usar
o próprio canal, não devendo haver um canal "fora da banda" para a coordenação.

Protocolo de acesso múltiplo ideal

Em um protocolo de acesso múltiplo ideal, dado um canal de acesso múltiplo de


capacidade de transmissão a uma taxa de R bps, quando um nó quer transmitir, ele
pode enviar a uma taxa R. Quando M nós quiserem transmitir, cada um poderia
enviar a uma média de R/M. Dessa forma, o gerenciamento aconteceria de forma
descentralizada, ou seja, sem nós especiais para coordenar transmissões, sem
relógios de sincronização, ou slots de tempo reservados para um determinado nó e,
sobretudo, de forma simples.

Protocolos MAC (controle de acesso múltiplo/ ao meio) - taxonomia

Existem três principais classes desses protocolos MAC:

1) Particionamento de canais: divide o canal em partes menores (slots de tempo


(tdma), frequência (fma) e código (cdma)) e aloca um pedaço para um só nó
usar exclusivamente.
2) Acesso aleatório: não divide o canal e permite colisões, mas é capaz de se
recuperar de colisões.
3) "Tomador de turnos": nós podem roubar os turnos de outros, mas nós com
mais a enviar podem tomar um "turno" mais longo. É muito comum em redes
baseadas em anel.

Você também pode gostar