quarta-feira, 25 de março de 2015

Detectando o tráfego malicioso em redes VoIP

VoIP (Voz sobre IP) aproveita-se da infra-estrutura IP existente em uma rede e muitas vulnerabilidades que afetam comunicações IP tradicionais também afetam comunicações VoIP. Portanto, cavalos de Tróia, ataques DDoS e exfiltração não autorizada de informações confidenciais são uma preocupação dentro das redes habilitados para VoIP. Vamos focar em um desses ataques, o SIP-flood.

O protocolo SIP (Session Initiation Protocol) tornou-se o padrão de fato para a sinalização de camada de aplicação dentro de redes VoIP. Definido pela RFC 3261, as solicitações SIP são compostas dos seguintes itens: REGISTER, INVITE, ACK, CANCEL, BYE e OPTIONS. A parte da requisição SIP que interessa aqui é o INVITE.

A parte do SIP que mais se assemelha a solicitação HTTP-GET é o SIP INVITE, que é a porção do SIP que configura uma sessão entre dois agentes (usuários) e dentro desta configuração reside uma vulnerabilidade de negação de serviço (DoS). O SIP INVITE como o HTTP também utiliza um handshake de três vias por TCP para estabelecer conexões lógicas com hosts remotos, SIP utiliza um método de handshaking semelhante, que consiste em INVITE e mensagens do tipo 200 OK. Quando detectado um número desproporcional de handshakings incompletos, pode ser um sinal revelador de que um ataque SIP-Flood está em andamento.

Então, como detectar esse tipo de tráfego malicioso? Vamos verificar uma solução que faz uso do conhecido Wireshark.


Em primeiro lugar, garanta que o Wireshark está instalado em um dispositivo que pode receber chamadas SIP de dentro da mesma rede do servidor SIP. Abra o Wireshark e selecione a interface que manipula as comunicações VoIP. Isso geralmente é feito em eth0 (placa de Ethernet). Em seguida, inicie a captura de pacotes e uma enxurrada de tráfego de rede deve começar a cruzar o monitor.

Neste ponto, você pode começar a inundar um dos dispositivos SIP, rodando uma ferramenta de inundação de sua escolha. A versão gratuita conhecida como inviteflood  pode ser encontrado na maioria das distros de BackTrack Kali Linux. Suponha que o endereço SIP para um dos dispositivos de final é enduser@192.168.1.10 e a inundação deste endereço com INVITE é de cerca de 200 pedidos por segundo. O Wireshark deve começar a capturar vários pacotes de REGISTER, INVITE, e OK. Em seguida, insira o seguinte filtro no Wireshark:

sip.Method=="INVITE" || sip.Status-Line=="SIP/2.0 200 OK" || sip.Method=="ACK"

Este filtro irá permitir que o usuário final veja todos os INVITE, OK e ACK, e o ataque de sip-flood foi configurado corretamente, o usuário final não deve ver pacotes ACK. Por que isso?

Em um ataque de inundação INVITE tradicional, o invasor envia uma solicitação INVITE para um endereço SIP específico e, quando o dispositivo final SIP, eventualmente, responde com uma mensagem 200 OK, o atacante nunca responde com a terceira parte do three-way handshake - a mensagem de ACK. No entanto, o dispositivo final vitimado não sabe que o pacote ACK esperado nunca vai chegar, por isso aloca previamente os recursos necessários, enquanto mais pacotes INVITE começam a entrar em sua fila. Quando o limite de buffer do dispositivo estoura, o dispositivo final pode falhar ou, em alguns casos, ter um reset de fábrica.

Caso detectado que há muita disparidade na relação INVITE/OK/ACK, os administradores de segurança podem ser alertados para que algumas medidas possam ser implementadas. Por exemplo, bloqueio de endereços IP ou domínios que estão gerando um elevado número de mensagens OK não confirmadas.