Intro #
Os serviços SSL são cada vez mais críticos e precisamos garantir que estamos usando versões mais recentes do protocolo TLS e cifras seguras. Mas, na vida real, onde os nossos serviços têm diferentes tipos de clientes com diferentes tipos de dispositivos, precisamos de garantir a conectividade aos nossos serviços seguros.
Portanto, pode ser útil identificar quais clientes estão se conectando (ou tentando se conectar) aos nossos serviços SSL. Nesse caso, você pode usar a ferramenta tcpdump para um balanceador de carga ou qualquer servidor Linux.
Executando tcpdump com filtro SSL #
O comando tcpdump no balanceador de carga ou servidor Linux permite filtrar por campos TCP, portanto temos que combinar os bytes de acordo com o número da versão dos pacotes SSL encontrados na 12ª posição. Além disso, como podem ser encontradas diferentes posições para SSLv2, SSLv3, TLS1.0 ou TLS1.1, uma composição de vários filtros deve ser usada:
root@noid-ee-01:~$ tcpdump -i any -n "(((tcp[((tcp[12] & 0xf0) >> 2)] = 0x14) || (tcp[((tcp[12] & 0xf0) >> 2)] = 0x15) || (tcp[((tcp[12] & 0xf0) >> 2)] = 0x17)) && (tcp[((tcp[12] & 0xf0) >> 2 )+1] = 0x03 && (tcp[((tcp[12] & 0xf0) >> 2)+2] < 0x03))) || (tcp[((tcp[12] & 0xf0) >> 2)] = 0x16) && (tcp[((tcp[12] & 0xf0) >> 2)+1] = 0x03) && (tcp[((tcp[12] & 0xf0) >> 2)+9] = 0x03) && (tcp[((tcp[12] & 0xf0) >> 2)+10] < 0x03) || ((tcp[((tcp[12] & 0xf0) >> 2)] < 0x14) || (tcp [((tcp[12] & 0xf0) >> 2)] > 0x18)) && (tcp[((tcp[12] & 0xf0) >> 2)+3] = 0x00) && (tcp[((tcp[ 12] & 0xf0) >> 2)+4] = 0x02))"
O comando ficará aguardando até o cancelamento manual do comando com Crtl+C.
Testando o filtro SSL #
Para testar a conexão SSL em um servidor com um determinado protocolo SSL, você pode usar openssl no lado do cliente, como mostrado abaixo com uma conexão bem-sucedida.
cliente:~$ openssl s_client -connect 192.168.56.10:443 -tls1 CONNECTED(00000003) [...] --- Cadeia de certificados [...] --- Certificado do servidor -----BEGIN CERTIFICATE---- - MIID8DCCAtigAwIBAgIJAJ22cPNVcSZYMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYD VQQGEwJFUzEOMAwGA1UECAwFU3BhaW4xDjAMBgNVBAcMBVNwYWluMRMwEQYDVQQK DApaZXZlbmV0IFNMMRswGQYDVQQLD BJUZWxlY29tbXVuaWNhdGlvbnMxCjAIBgNV
Tendo que alterar o servidor e a porta desejada. Além disso, você pode alterar o parâmetro -tls1 para que o protocolo desejado seja usado.
Interpretando os resultados #
No lado do servidor, você verá algo assim:
root@noid-ee-01:~$ tcpdump [...] tcpdump: saída detalhada suprimida, use -v ou -vv para escuta de decodificação completa do protocolo em qualquer tipo de link LINUX_SLL (Linux cozido), tamanho de captura 262144 bytes 12 :20:46.984131IP 192.168.56.1.58286 > 192.168.56.10.444: Bandeiras [P.], seq 1580373103:1580373207, ack 4195613909, vitória 502, comprimento 104 12:20:46.988648 IP 192.168.56.10.444 > 192.168.56.1.58286: Bandeiras [P.], seq 1:1414, confirmado 104, vitória 29, comprimento 1413 [...]
O endereço IP 192.168.56.1 é detectado como conexão insegura com o serviço 192.168.56.10.444 no servidor.