Dois fatos sobre o SSTP fundem-se na maioria das explicações, e é essa fusão que torna as capturas confusas. O pacote da aplicação sobrevive dentro do canal protegido, e a conexão TCP que transporta esse canal mantém os seus próprios endereços durante todo o percurso. Pelo cabo viaja um portador com a sua carga, nunca um substituto de qualquer um deles. Percorra a pilha de fora para dentro e rotule cada fronteira ao atravessá-la.

Comece pelo portador externo

A primeira coisa no cabo é uma ligação TCP comum à porta 443, com endereços reais que os encaminhadores reencaminham. É essa ligação que sobrevive à tradução de endereços de rede e que um fornecedor de acesso pode contar. Proteger a carga não remove o portador, e não esconde o volume nem o tempo.

Tudo o que vem depois deste ponto é transportado em vez de encaminhado. O portador continua a funcionar mesmo quando a troca interna falha.

Siga o encapsulamento para dentro

Dentro do canal protegido está uma troca de controlo SSTP, depois uma sessão PPP e depois o pacote de rede que o cliente quer ver entregue. Cada camada tem a sua própria negociação, as suas próprias mensagens de erro e a sua própria máquina de estados. Por isso uma falha pode parecer uma falha de TLS de um ponto de vista e uma falha de PPP de outro. Ler as camadas por ordem diz qual máquina de estados parou.

Uma única captura raramente mostra toda a pilha. Os cabeçalhos externos só são visíveis fora do ponto final, e os internos só após a desencapsulação. Essa assimetria vem de onde está, não do protocolo.

O diagrama abaixo agrupa as camadas para que se possa falar delas. Não é uma disposição de bytes, não promete um registo por pacote e não diz nada sobre quantas operações criptográficas uma implementação executa.

outer IP header
  TCP to port 443
    TLS record layer
      SSTP control and data packets
        PPP frames
          inner IP packet
            application transport and payload

Rotule o observador antes de ler uma captura

Duas capturas da mesma sessão respondem a perguntas diferentes, e a interface onde foram feitas decide quais. No caminho de acesso vê o portador e os registos TLS, e pode medir tamanhos e intervalos sem ver um endereço interno. No ponto final, após a desencapsulação, o pacote interno é tráfego comum sob a política privada de encaminhamento.

Escreva a interface e a direção em cada captura antes de a interpretar. Um rasto obtido num adaptador físico nunca mostrará os endereços da aplicação interna como campos externos comuns, e ler essa ausência como uma falha de cifra é um erro frequente. Um rasto obtido do interior do túnel não mostra qualquer portador, pelo que não pode responder a uma pergunta sobre a visão do fornecedor. A mesma disciplina aplica-se aos registos do ponto final, que anotam a ordem da negociação e não os conteúdos.

Mantenha as verificações que o diagrama não consegue provar

A ordem das camadas não estabelece que uma instalação valide o certificado do servidor, negoceie uma versão de TLS suportada ou autorize a conta. Cada uma delas é uma decisão de configuração que falha independentemente do encapsulamento.

Verifique-as com um cliente que relata o que negociou em vez de raciocinar a partir de um desenho. Comece com o aperto de mão TLS, depois a troca SSTP, depois o PPP, e pare na primeira etapa que relatar um erro. O primeiro comando imprime a cadeia e a versão negociada, e o segundo lista os apertos de mão presentes numa captura.

openssl s_client -connect vpn.corp.internal:443 -servername vpn.corp.internal
tshark -r sstp.pcap -Y "tls.handshake.type == 1"

Artigos relacionados