Showing posts with label SYN. Show all posts
Showing posts with label SYN. Show all posts

Saturday, June 22, 2019

Wireshark Three ways hand-shake

A member of the pen test team enters this filter into Wireshark:

((tcp.flags == 0x02) || (tcp.flags == 0x12) ) || 

((tcp.flags == 0x10) && (tcp.ack==1) && (tcp.len==0) )



What is he attempting to view?


A.SYN, SYN/ACK, ACK



B.SYN, FIN, URG, and PSH



C.ACK, ACK, SYN, URG



D.SYN/ACK only


A is correct. Wireshark has the ability to filter based on a decimal numbering system assigned to TCP flags (basically the flag’s binary value assigned to the bit representing it in the header). The assigned flag decimal numbers are FIN = 1, SYN = 2, RST = 4, PSH = 8, ACK = 16, and URG = 32. Adding flag numbers together (for example, SYN + ACK = 18) allows you to simplify a Wireshark filter. For instance, tcp.flags == 0x2 looks for SYN packets, tcp.flags == 0x16 looks for ACK packets, and tcp.flags == 0x18 looks for both (in the case presented in the question, the filter will display all SYN packets, all SYN/ACK packets, and all ACK packets).


B, C, and D are incorrect. These flags do not represent the values in the Wireshark filter.

Saturday, July 21, 2018

TCP Three-Way Handshake – Como capturar e entender o conceito

TCP Three-Way Handshake – Como capturar e entender o conceito

Os dois primeiros pacotes são fáceis porque são os dois únicos que possuem o sinalizador SYN definido. Para encontrá-los, basta filtrar em “tcp.flags.syn == 1“. Mas e o terceiro pacote? Ele tem apenas o sinalizador ACK, mas isso também vale para todos os outros pacotes após o handshake, por isso não podemos usar esse sinalizador. A solução para filtrar o pacote que queremos é filtrar os valores que só podem ser encontrados em um pacote que é o terceiro pacote de um handshake de três vias ( o ACK).
Sabemos que o número de sequência é um maior que no pacote SYN. Como o número de seqüência inicial é aleatório, teríamos um problema, mas, felizmente, o Wireshark oferece números de seqüência relativos (ativados por padrão). Isso significa que cada SYN tem um número de seqüência relativo de zero, e o terceiro pacote terá um número de seqüência de um. Então, filtramos em "tcp.seq == 1". E como devemos ter reconhecido o SYN / ACK do servidor, sabemos que o número ACK também deve ser um, o que leva a um filtro melhor: “tcp.seq == 1 e tcp.ack == 1“. Infelizmente, muitos pacotes podem ter um número de seqüência relativo de um, porque se o cliente (que iniciou a conexão, sendo o remetente do primeiro e terceiro pacote) não enviar nenhum dado (por exemplo, ao receber dados FTP), a seqüência permanecerá em um para toda a conexão. Portanto, precisamos de mais campos para filtrar que apareçam apenas no terceiro pacote de handshake.
Podemos excluir todos os pacotes que contêm uma carga útil TCP, porque o terceiro pacote está vazio (isso pode mudar com novas implementações rápidas de configuração de conexão no futuro, mas, por enquanto, está vazio). Então, adicionamos o comprimento da carga útil zero ao nosso filtro: “tcp.seq == 1 e tcp.ack == 1 e tcp.len == 0“
O próximo problema é que esse filtro também mostrará todos os pacotes ACK vazios onde não vimos o pacote SYN / SYK / ACK no rastreamento (porque eles não foram capturados com antecedência suficiente), então precisamos encontrar uma maneira de fazer isso. Certifique-se de que aceitamos somente pacotes ACK onde temos o SYN e SYN / ACK no traço. Existe um truque fácil para fazer isso, mas ele só funciona desde a versão 1.12 e posterior do Wireshark: O Wireshark 1.12 é a primeira versão a calcular o RTT inicial para todas as conversações TCP quando ele tem o handshake total de três vias. Portanto, se o campo iRTT estiver disponível, sabemos que vimos o pacote SYN e SYN / ACK. O filtro final para o terceiro pacote de handshake é: “tcp.seq == 1 e tcp.ack == 1 e tcp.len == 0 e tcp.analysis.initial_rtt“.
Para filtrar todos os três tipos de pacotes de handshake: “tcp.flags.syn == 1 ou (tcp.seq == 1 e tcp.ack == 1 e tcp.len == 0 e tcp.analysis.initial_rtt)” -  Lembre-se de que isso mostrará os pacotes de handshake de qualquer conversa, portanto, pode haver mais de um conjunto. Se o filtro não funcionar para você, verifique se você ativou os números de sequência absoluta.
A melhor maneira de testar estes comandos é capturar sua própria conexão e checar como vários websites aceitam o aperto de mão.
Lembre-se
ACK – reconhecer
SYN – Sincronizar e ACK
SYN – Sincronização completa – dos cookies – certificados e tokens.

1.      O host A envia um pacote TCP SYNchronize ao Host B

2.      Host B recebe o SYN de A

3.      O host B envia um reconhecimento SYNchronize

4.      Host A recebe SYN-ACK de B

5.      Host A envia um conhecimento

6.      Host B recebe ACK.
7.      A conexão do soquete TCP é ESTABLISHED.

References:


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.