WebSockets - Segurança
O protocolo deve ser projetado por razões de segurança. O WebSocket é um protocolo totalmente novo e nem todos os navegadores da web o implementam corretamente. Por exemplo, alguns deles ainda permitem a combinação de HTTP e WS, embora a especificação implique o contrário. Neste capítulo, discutiremos alguns ataques de segurança comuns dos quais um usuário deve estar ciente.
Negação de serviço
Ataques de negação de serviço (DoS) tentam tornar uma máquina ou recurso de rede indisponível para os usuários que o solicitam. Suponha que alguém faça um número infinito de solicitações a um servidor web com nenhum ou pequenos intervalos de tempo. O servidor não é capaz de lidar com cada conexão e irá parar de responder ou continuará respondendo muito lentamente. Isso pode ser denominado como ataque de negação de serviço.
A negação de serviço é muito frustrante para os usuários finais, que não conseguiam nem mesmo carregar uma página da web.
O ataque DoS pode até mesmo se aplicar a comunicações ponto a ponto, forçando os clientes de uma rede P2P a se conectarem simultaneamente ao servidor web da vítima.
Homem no meio
Vamos entender isso com a ajuda de um exemplo.
Suponha que uma pessoa A está conversando com o amigo dele Bpor meio de um cliente de mensagens instantâneas. Uma terceira pessoa deseja ver as mensagens que você troca. Então, ele faz conexões independentes com ambas as pessoas. Ele também envia mensagens para pessoasA e seu amigo B, como um intermediário invisível para sua comunicação. Isso é conhecido como ataque man-in-the-middle.
O tipo de ataque man-in-the-middle é mais fácil para conexões não criptografadas, pois o invasor pode ler os pacotes diretamente. Quando a conexão é criptografada, as informações precisam ser descriptografadas pelo invasor, o que pode ser muito difícil.
Do ponto de vista técnico, o invasor intercepta uma troca de mensagem de chave pública e a envia enquanto substitui a chave solicitada pela sua. Obviamente, uma estratégia sólida para dificultar o trabalho do invasor é usar SSH com WebSockets.
Principalmente ao trocar dados críticos, prefira a conexão segura WSS em vez do WS não criptografado.
XSS
Cross-site scripting (XSS) é uma vulnerabilidade que permite que invasores injetem scripts do lado do cliente em páginas da web ou aplicativos. Um invasor pode enviar código HTML ou Javascript usando seus hubs de aplicativo e permitir que esse código seja executado nas máquinas dos clientes.
Mecanismos de defesa nativa WebSocket
Por padrão, o protocolo WebSocket é projetado para ser seguro. No mundo real, o usuário pode encontrar vários problemas que podem ocorrer devido à implementação deficiente do navegador. Com o passar do tempo, os fornecedores de navegadores corrigem todos os problemas imediatamente.
Uma camada extra de segurança é adicionada quando uma conexão WebSocket segura sobre SSH (ou TLS) é usada.
No mundo WebSocket, a principal preocupação é com o desempenho de uma conexão segura. Embora ainda haja uma camada TLS extra no topo, o próprio protocolo contém otimizações para esse tipo de uso, além disso, o WSS funciona de forma mais elegante por meio de proxies.
Máscara de cliente para servidor
Cada mensagem transmitida entre um servidor WebSocket e um cliente WebSocket contém uma chave específica, chamada de chave de máscara, que permite a qualquer intermediário compatível com WebSocket desmascarar e inspecionar a mensagem. Se o intermediário não for compatível com WebSocket, a mensagem não será afetada. O navegador que implementa o protocolo WebSocket controla o mascaramento.
Security Toolbox
Finalmente, ferramentas úteis podem ser apresentadas para investigar o fluxo de informações entre seus clientes e servidor WebSocket, analisar os dados trocados e identificar possíveis riscos.
Ferramentas de desenvolvedor de navegador
Chrome, Firefox e Opera são ótimos navegadores em termos de suporte ao desenvolvedor. Suas ferramentas integradas nos ajudam a determinar quase todos os aspectos das interações e recursos do lado do cliente. Ele desempenha um grande papel para fins de segurança.