Saturday, August 12, 2017

Analisando cabeçalhos TCP usando Wireshark

Publicado no PENETRATION TESTING em AGOSTO 11, 2017 por RAJ CHANDEL
Traduzido e complementado por Afonso H. R. Alves


O TCP é usado principalmente por vários aplicativos disponíveis na internet, incluindo o World Wide Web (WWW), E-mail, File Transfer Protocol, Secure Shell (porta 22), peer file e streaming media applications como Netflix ou Amazon.
Apertos de mão de 3 vias – ou dito em inglês - 3 Way Handshakes
 O processo de handshaking normalmente ocorre para estabelecer regras de comunicação quando um computador se propõe a se comunicar com um dispositivo estrangeiro. Quando um computador se comunica com outro dispositivo como um modem, impressora ou servidor de rede, ele precisa do aperto de mão para estabelecer uma conexão.

1) Cliente envia um pacote TCP para o servidor com o sinalizador SYN – (Sincroniza)
2) O servidor responde ao pedido do cliente com os sinalizadores SYN e ACK definidos. (Sincroniza e reconhece).
3) O cliente conclui a conexão enviando um pacote com o conjunto de sinalizadores ACK (Reconhecido o pacote.)
Estrutura do segmento TCP
O protocolo de controle de transmissão aceita dados vindo do fluxo de dados, os divide em pedaços e adiciona um cabeçalho(header) TCP criando um segmento TCP. Um segmento TCP carrega apenas o número de seqüência do primeiro byte no segmento.
Um segmento TCP consiste em um cabeçalho de segmento e uma seção de dados. O cabeçalho TCP contém 10 campos obrigatórios e um campo de extensão opcional.


Porta de Origem: O número da porta tendo 16 bits, Identifica a porta de envio.
Porta de destino: O número da porta de destino de 16 bits. Identifica a porta de recepção.
Número de seqüência: O número de seqüência do primeiro byte de dados neste segmento. Se o bit de controle SYN estiver configurado, o número de seqüência é o número de seqüência inicial (n) e o primeiro byte de dados é n + 1.
Número de confirmação: Se o bit de controle ACK estiver definido, este campo contém o valor do próximo número de seqüência que o receptor espera receber.
Deslocamento de dados: O número de palavras de 32 bits no cabeçalho TCP. Indica onde os dados começam.
Reservado: Seis bits reservados para uso futuro; Deve ser zero.
Bandeiras: CWR, ECE, URG, ACK, PSH, RST, SYN, FIN
Janela: Usada nos segmentos ACK. Ele especifica o número de bytes de dados, começando com o indicado no campo do número de confirmação que o receptor (o remetente deste segmento) está disposto a aceitar.
Checksum: O complemento de 16 bits da soma de complemento de todas as palavras de 16 bits em um pseudo-cabeçalho, o cabeçalho TCP e os dados TCP. Ao calcular a soma de verificação, o campo de soma de verificação é considerado zero.
Ponteiro urgente: Apontar para o primeiro octeto de dados seguindo os dados urgentes. Somente significativo quando o bit de controle URG está configurado.
Opções: Assim como no caso de opções de datagrama IP, as opções podem ser ou: - Um único byte contendo o número da opção. Uma opção de comprimento variável no seguinte formato
Padding: O preenchimento do cabeçalho TCP é usado para garantir que o cabeçalho TCP termina e os dados começam em um limite de 32 bits. O preenchimento é composto por zeros.


Diferentes tipos de sinalizadores TCP
Os sinalizadores TCP são usados no cabeçalho TCP, pois estes são bits de controle que especificam estados de conexão específicos ou informações sobre como um pacote deve ser configurado. O campo de sinalização TCP em um segmento TCP nos ajudará a entender a função e o propósito de qualquer pacote na conexão.
Lista de bandeiras
Descrição
O indicador CWR Congestion Window Reduced (CWR) é configurado pelo host de envio para mostrar que recebeu um segmento TCP com o conjunto de sinalizadores ECE
ECE      ECN-Echo indica que o ponto TCP é compatível com ECN durante o handshake de 3 vias

URG      Indica que o campo ponteiro urgente é significativo neste segmento.
ACK       Indica que o campo de reconhecimento é significativo neste segmento.
PSH      Push função para transferir dados
RST      Redefine a conexão.
SYN      Sincroniza os números de seqüência.
FIN       Não há mais dados do remetente.

Pacote TCP de análise usando Wireshark

Como você leu acima "estrutura do segmento TCP" e seu "campo" agora vamos elaborá-lo com a ajuda do Wireshark. Esperamos que o leitor esteja ciente das 7 camadas do modelo OSI para que a análise de pacotes TCP seja mais esclarecida.
A partir de uma imagem abaixo, você pode ver que analisarei a rede para capturar pacotes, mostrando claramente: tempo, IP de origem, IP de destino, protocolo, o comprimento de pacotes e informações.
Como eu havia dito anteriormente, se você conhece o modelo OSI, então você pode ver que ele mostrou três camadas de OSI: camada 2 (Ethernet), camada 3 (Protocolo de Internet), camada 4 (Protocolo de Controle de Transmissão (TCP)).

Agora vamos analisar a camada 4 e comparar a teoria acima com a imagem abaixo dada. Você pode ver que sublinhamos todos os campos do segmento TCP. Agora, leia as informações seguintes dos pacotes TCP.
Origem da porta: 58302
Porta de destino: 80
Número de seqüência: 0
Número de confirmação: 0
Bandeiras: SYN
Valor do tamanho da janela: 29200
Checksum: não verificado
Ponteiro urgente: 0
Opção: 20 bytes
O sinalizador SYN (sincronizar) é o sinalizador de pacote TCP que está configurado para iniciar uma conexão TCP para "handshakes de 3 vias" e o número de Seqüência e o número de Reconhecimento são 0.


A partir da imagem abaixo dada, você pode ver o campo expandido para sinalizadores mostrando apenas que 1 sinalizador/flag SYN está configurada entre a porta de origem, e as bandeiras de destino da porta de destino não estão configuradas neste momento.

Assim, os bits de controle obterão 1 para esse conjunto de sinalizadores na conexão TCP, e em caso contrário, ele permanece zero.
Os pacotes que definem o sinalizador SYN também podem ser usados para executar uma inundação SYN e uma varredura SYN.



 Como eu expliquei acima, em três maneiras, handshakes, a primeira solicitação do cliente com a bandeira SYN depois que o Servidor responde ao pedido do cliente com as bandeiras SYN e ACK definidas e, a partir das informações a seguir, observamos a mesma seqüência de transferência de pacotes entre o cliente e o servidor, bem como O número de seqüência é 0 e o número de confirmação é 1.
Porta de origem: 58302
Porta de destino: 80
Número de seqüência: 0
Número de confirmação: 1
Bandeiras: SYN, ACK
Tamanho da janela: 42408
Soma de verificação: não verificado
Ponteiro urgente: 0
Opção: 12 bytes


Analisando a expansão Campo de sinalizadores, você pode observar que desta vez 2 bandeiras SYN e ACK estão definidas como restante, ou seja, permanecem desativadas ou mostram zero e o bit de controle é definido 1-1 para ambos os sinalizadores. Este é o segundo passo para "handshake de 3 vias".


A partir das informações a seguir, encontramos dessa vez que o número da Seqüência e o número de Reconhecimento são 1 e o Cliente conclui a conexão enviando um pacote com o conjunto de sinalizadores ACK.
Agora, a conexão TCP foi estabelecida entre o cliente e o servidor.
Fonte: 58302
Porta de destino: 80
Número de seqüência: 1
Número de confirmação: 1
Bandeiras: ACK
Tamanho da janela: 229
Checksum: não verificado
Ponteiro urgente: 0
Opção: 12 bytes


A partir da imagem abaixo, você pode observar que o bit de controle é 1 para confirmação da Flag e esta é a terceira etapa necessária para "handshake de 3 vias" entre a porta de origem e a porta de destino.



 Uma vez que a conexão de handshake de TCP esta estabelecida, os dados podem ser transferidos entre o cliente e o servidor, como você pode ver na última imagem, mostrou a 7ª camada para Hypertext Transfer Protocol também para transferência de dados.
Origem: 58302
Porta de destino: 80
Número de seqüência: 1
Número de confirmação: 1
Bandeiras: PUSH, ACK
Tamanho da janela: 229
Checksum: não verificado
Ponteiro urgente: 0
Opção: 12bytes
O uso da função push e do sinalizador PUSH é avançar os Dados do usuário que envia.  Para permitir que os aplicativos leiam e escrevam neste soquete a qualquer momento, os buffers são implementados em ambos os lados de uma conexão TCP. 


Aqui você pode observar que o bit de controle definido para 1 para PUSH e ACK flag como resultado de uma nova camada pode abrir uma transferência de dados entre o aplicativo do remetente e o aplicativo do receptor.

Agora, quando o pacote de dados de transferência explorou, encontramos os detalhes do cabeçalho HTTP como: Host: google.com
User-Agent: Mozilla / 5.0.
 Por fim, os diferentes tipos de cookies que você pode observar em determinada imagem abaixo.



Autor: AArti Singh é Pesquisador e Escritor Técnico em Hacking Articles, um Consultor de Segurança da Informação Social Media Lover and Gadgets. 

Key stretching - explicação

Você pode fazer uma chave fraca se tornar mais forte ao executar múltiplos processos para a mesma chave. Por exemplo, você pode ter uma se...