tcpdump Servidor Hello Certificate Filter

3

Em dispositivos localizados entre minha rede local e um roteador (todo o tráfego é transmitido), preciso ler o nome comum do pacote Hello Server Certificate.

Então, estou tentando descobrir como obter o filtro adequado com o tcpdump.

Encontrei ajuda com este artigo: link
Explica como usar o filtro avançado Campos IP e TCP.

Eu tentei esse tipo de filtro:

$ tcpdump -i any \
  'tcp and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' \
   -A -s 0 -v | grep 'Host\|id-at-commonName='

Como explicado no artigo, "Estamos combinando com qualquer pacote que contenha dados".

Funciona para o campo Host como para muitos outros dados, mas não consigo corresponder ao campo id-at-commonName= que está no campo SSL (portanto, no campo Dados TCP?).

Para ter certeza de que capturei um arquivo pcap com exatamente o mesmo filtro (sem o grep) e quando abri-lo com o Wireshark, posso obter todos os nomes do Certificado Comum. Preciso usar um filtro tcpdump porque preciso coletar os dados "na hora".

Alguém pode explicar por que não consigo ver esses dados por meio de tcpdump ?

    
por Kuruwan 10.02.2014 / 10:51

2 respostas

6

Se você quiser apenas obter o pacote Hello Handshake SSL para ver o SNI contido, o filtro a seguir parece funcionar tanto para o TLS1.0 quanto para o TLS1.2:

tcpdump -i any -s 1500 (tcp[((tcp[12:1] & 0xf0) >> 2)+5:1] = 0x01) and (tcp[((tcp[12:1] & 0xf0) >> 2):1] = 0x16)

em que 0x16 = Handshake (22) no primeiro campo de bytes dos dados

e 0x01 = Cliente Hello (1) no campo do 6º byte dos dados

    
por 02.04.2015 / 05:04
3

O rótulo id-at-commonName é mostrado pelo Wireshark, o formato de conexão não contém o texto, mas bytes brutos. O nome id-at-commonName é 03 in bytes . Depois disso, há um UTF8String (12 = 0x0c) com um comprimento de 9 bytes ( localhost ).

Se você estiver tentando corresponder nomes de host de um fluxo TCP, lembre-se do seguinte:

  • Certificados podem ser válidos para vários assuntos, você pode encontrar nomes adicionais em id-ce-subjectAltName (2.5.29.17)
  • O host real ao qual você está tentando se conectar pode ser anunciado na mensagem de handshake ClientHello por meio da extensão SNI (Server Name Indication).
  • Várias mensagens podem ser combinadas em um único registro.

Finalmente, observe que as mensagens SSL podem ser divididas em vários segmentos TCP, tornando a análise direta ainda mais difícil. Talvez seja uma opção para capturar para gravar uma contagem fixa de pacotes para arquivo com rotação ativada, manualmente analisar com tshark depois e, finalmente, remover a captura?

    
por 11.04.2014 / 18:49

Tags