Escolar Documentos
Profissional Documentos
Cultura Documentos
Neste artigo iremos entender os aspectos referentes à conexão e gerenciamento de uma sessão
TCP necessária para que dois hosts quaisquer troquem dados.
Objetivos:
- Entender como os hosts gerenciam as conexões TCP e como utilizar o comando netstat para
compreender a máquina de estado (state machime) TCP.
- Através do estado das conexões TCP verificar as possíveis condições de um host.
- Entender as implicações de determinados estados TCP em relação à segurança de um host.
A resposta típica deste comando pode ser visualizada abaixo e os significados de cada campo são:
Proto
O protocolo utilizado para a conexão.
State (estado)
Indica o estado das conexões TCP. Os possíveis estados são:
- Closed
- Listen
- Established
- Close_Wait
- Last_Ack
- SYN_send
- SYN_received
- Time_Wait
- FIN_Wait_1
- Last_Ack.
O significado de cada um deste estados será explicado mais à frente neste artigo.
Portas TCP
Tanto o TCP quanto o UDP possibilitam utilizar 65356 portas que são empregadas pelos
respectivos serviços habilitados nos hosts. Quando um determinado serviço está ativo uma porta
específica é habilitada para que o processo de comunicação entre os hosts ocorra. A comunicação
do TCP é baseada em um componente Cliente que busca dados em um componente Servidor.
- Portas no componente Servidor assumem valores entre 1 e 1024 e são sempre fixas. Ex: 21 para
FTP, 23 para Telnet, etc
- Portas para o componente Cliente assumem valores acima de 1023 e são randômicas.
Em sua última atualização de 28 de setembro de 2004 o IANA (entidade que controla a alocação
destas portas) definiu o seguinte esquema:
- Flags TCP
- State Machime TCP
- Processo de abertura e fechamento de sessão
Flags TCP
Como colocado no início do artigo, todo o processo de controle de uma sessão TCP é controlada
pelos seus flags. O protocolo TCP possui 6 flags que controlam completamente todo o processo
de comunicação entre os hosts, os seis flags, são:
SYN ACK FIN PSH URG RST
SYN
Quando setado em 1 indica o pedido de abertura de sessão TCP.
ACK
Quando "setado" em 1, sinaliza que este segmento contém o próximo octeto que o host origem
espera receber. O flag ACK está sempre presente nos segmentos TCP, exceto na abertura de
sessão.
FIN
Quando "setado" em 1, sinaliza um pedido de desconexão. Como o TCP é full duplex a
desconexão pode se dar em um único sentido ou em ambos. Se um host enviar uma solicitação
FIN, este pedido terá que ser confirmado, mas dados podem ainda ser transmitidos até que
finalize suas atividade, onde outro segmento com o flag SYN deve ser enviado devendo também
se confirmado pelo outro host.
PUSH
Quando "setado" em 1, avisa ao receptor que os dados podem ser entregues diretamente à
aplicação. Uma resposta afirmativa a este comando significa que o receptor enviou todos os
dados à aplicação correspondente.
URG
Quando "setado" em 1, sinaliza que o campo Urgent Pointer deve ser lido, pois contém dados
válidos. È um flag muito pouco utilizado hoje em dia. Este flag é também conhecido como OOB
(Out Off Band) já que ele especifica uma condição na qual os dados devem ser retirados não do
fluxo de dados normal, mas do campo URGENT POINT.
RST
Indica que a conexão está sendo abortada. Para uma conexão ativa, se um segmento com o flag
RST é enviado a conexão é fechada de forma abrupta de maneira que os dados armazenados nos
buffers ou em transito sejam descartados.
O protocolo TCP possui 11 estados de conexão que são definidos como abertura e fechamento de
sessão, os mais simples de entender e os estados intermediários, mais complexos, que podem
determinar uma série de situações importantíssimas nas quais um host pode passar. No diagrama
de blocos abaixo é possível verificar estes estados.
O processo de conexão de um host se inicia quando um serviço qualquer habilita uma
determinada porta que passa do estado Closed para o estado Listen. Quando um host recebe um
segmento com o flag SYN habilitado (SYN=1) formalmente é iniciada uma sessão TCP e no host
destino é reservado uma estrutura de dados especial para controle de todas as conexões TCP
iniciadas. Esta estrutura de dados é chamada de TCB (Transmission Control Block) ou Bloco de
Controle da transmissão. O TCB contem todas as informações importantes sobre uma conexão,
tais como os dois números do soquete que identificam a conexão e os ponteiros para os buffers
onde os dados que entram e saem da conexão são mantidos. O TCB é usado também executar o
mecanismo de Slide Window ou janela deslizante.
1 - O primeiro segmento indica que o host A com endereço IP 192.168.1.1 deseja realizar uma
abertura de sessão TCP na porta 80 do host B com endereço IP 192.168.1.2. O segmento possui a
porta de origem xxxx e o flag SYN habilitado (SYN=1).
C:/> netstat – na
2 - O segundo segmento contém dois flags ativos (SYN e ACK) e demonstra duas situações:
- O host B aceitou o pedido de abertura de sessão na porta 80 enviando um segmento de resposta
com o flag ACK habilitado (ACK=1). Isto significa que o pedido de abertura de sessão foi aceito já
que o serviço existente neste host utiliza a porta 80 e está ativo.
- No mesmo segmento é enviado o flag SYN=1 demonstrando que este host deseja abrir uma
sessão na porta xxx do host A. O TCP é full-duplex, ou seja, o host A abre sessão no host B e vice
versa. O procedimento de enviar dois flags habilitados em um mesmo segmento é conhecido como
pigg-backing.
O que é um segmento?
Segmento é a representação dos dados na camada
de transporte e significa um pacote que contém as
portas de serviço de destino e origem.
Da mesma forma que a abertura de sessão, o protocolo TCP também realiza um fechamento
formal de uma sessão exigindo uma troca de flags entre os hosts, de maneira a confirmar,
explicitamente, que a sessão TCP será fechada. O esquema abaixo facilita a visualização de como
este processo é realizado.
1 - O primeiro segmento é enviado pelo host A quando uma aplicação como o FTP, por exemplo,
não tiver mais dados para enviar e requisita da pilha TCP o encerramento da sessão que será
realizada através do envio de um segmento com o flag FIN habilitado (FIN =1).
2- O segundo segmento é enviado pela aplicação que está sendo executada no host B aceitando o
pedido de finalização enviando um segmento com o flag ACK habilitado (ACK=1). A conexão está
agora fechada em uma direção (A->B) e serão necessários mais segmentos para fechar a conexão
no sentido inverso (B->A).
3 - Este segmento é o pedido de fechamento de sessão no sentido inverso (B->A) que é realizado
pelo host B enviando um segmento com o flag FIN habilitado (FIN=1).
4 – Este é o último segmento confirmando pelo host A o pedido de fechamento de sessão feito
pelo host B. O segmento com o flag ACK habilitado (ACK=1) é enviado pelo host A .
Um "sem estado", que existe antes que uma conexão seja realmente
CLOSED iniciada. Na verdade um host sempre está em closed se nenhuma
aplicação ou serviço requisitar uma porta.
Estado em que um host se encontra quando um determinado serviço ou
LISTEN aplicação se posiciona para esperar um pedido para iniciar uma
conexão. Esse é o verdadeiro estado inicial de uma conexão TCP.
Tempo depois que um host tiver enviado um pacote SYN e estiver
SYN-SENT
aguardando a resposta SYN-ACK apropriada.
Estado em que um host se encontra depois de receber um segmento
SYN-RCVD com o flag SYN e responder que aceita este pedido enviando um
segmento com os flags SYN-ACK ativados.
Estado em que uma conexão realizou todos os procedimentos
ESTABLISHE intermediários para o estabelecimento de sessão. È o ápice do processo
D de abertura de sessão e a partir daí os dados podem ser trocados entre
os hosts.
O processo de estabelecimento de uma conexão TCP normalmente passa por estados
acima descritos como parte do three-way handshaking.
Os seis estados restantes descrevem o desmembramento de uma conexão TCP onde os
estados descritos demonstram como uma conexão é fechada e como os dados param de
fluir entre os dois hosts. Os estados abaixo descritos demonstram como esse processo é
realizado.
Estado em que uma conexão se encontra depois de ter enviado um
FIN-WAIT-1
pacote FIN inicial pedindo um fechamento correto da conexão TCP.
Estado de uma conexão receber um segmento com o flag FIN inicial e
CLOSE-WAIT
enviado de volta um ACK para confirmar que o FIN foi aceito.
Estado da conexão de um host que recebeu um segmento com o flag
FIN-WAIT-2 FIN habilitado, enquanto espera por um FIN final do seu parceiro de
conexão.
Estado da conexão de um host que acabou de enviar o segmento FIN,
LAST-ACK necessário para o fechamento correto de uma conexão TCP, de volta ao
host iniciador, enquanto espera uma confirmação deste.
Estado do host que recebeu um FIN tendo que esperar um determinado
período de tempo antes de enviar um ACK. O host deve esperar por um
TIME-WAIT
determinado tempo (em torno de 240 segundos) antes da porta ser outra
vez utilizada.
Estado que é empregago quando uma conexão usa o fechamento
simultâneo fora do padrão. A conexão está neste estado depois de
CLOSING receber um FIN inicial e enviar um ACK. Depois de receber um ACK a
conexão entrará no estado TIME-WAIT. A figura abaixo exemplifica esta
situação.
Cada um dos estados de uma conexão TCP é minuciosamente descrito na RFC 793. Para
entender verdadeiramente estes estados de uma conexão TCP é importante observar os muitos
estágios pelos quais uma conexão TCP passa. Além dos estados “Stablished” e “Closed”
demonstrados acima, existem uma série de outros estados que devem ser entendidos por
qualquer profissional de segurança, suporte e desenvolvimento. As descrições destes estados
são:
A compreensão destes estados poderá ajuda-lo a entender uma série de situações que um host
pode passar. As mais importantes e comuns, são:
Serviços executados
Um simples netstat –na ou mesmo a execução TCPview (download) ou o fport (download) poderão
lhe dizer quem são os serviços que estão sendo executados em seu computador e quais as portas
empregadas, de maneira que, se um ataque estiver sendo recebido ou mesmo se um trojam tiver
sido instalado em sua máquina sem que você perceba, será possível nitidamente encontra-lo, pois
o comando netstat –an ou TCPview ou o fport relacionarão os serviços ativos habilitados com as
respectivas portas e os arquivos que estão sendo executados. Observe a listagem abaixo.
Ataque SYN-FLOODING
C:>nestat –n – p TCP
Active Connections
Ataques DDOS
Os ataques de DDOS são semelhantes aos ataques SYN Flooding no que se refere ao
procedimento das conexões TCP, pois o resultado prático é o mesmo, ou seja, exaurir os recursos
computacionais da máquina vítima (TCB). Mas este ataque é muito mais sofisticado e devastador,
pois é necessária a estruturação de uma rede bem orquestrada de computadores clientes que
podem ser preparados horas, dias ou mesmo meses antes que o ataque seja proferido. De um
modo geral, os procedimentos empregados para o SYN-Flooding podem ser utilizados, o problema
é que na máquina vítima deste ataque,como normalmente acontece nem mesmo é possível
executar qualquer aplicação, pois a mesma trava em poucos segundos após o início do ataque,
ficando assim, praticamente impossível, a utilização de utilitários como o netstat. O mais
recomendado então é verificar os seguintes itens:
- Excesso de tráfego: Verifque com o MRTG ou PRTG (download) se existe tráfego que esteja
ultrapassando o número de acesso médio ou esperado.
- Pacotes UDP e ICMP: Verifique a existência de pacotes UDP e ICMP de tamanho acima do
normal ou em excesso. Geralmente as sessões UDP empregam pacotes pequenos em torno de 10
bytes. As mensagens ICMP não excedem a faixa de 64 e 128 bytres. Pacotes com tamanhos
superiores a esses números são considerados suspeitos de conter mensagens de controle
destinadas a cada um dos agentes instalados nas máquinas vítimas. Normalmente o conteúdo
destes pacotes está criptografado, mas o endereço de destino é verdadeiro, o que poderá ser um
item interessante para se localizar os agentes que estão realizando os ataques.
- Pacotes TCP e UDP: Alguns ataques de DDOS utilizam aleatoriamente protocolos orientados a conexão para
enviar dados em canais que não são orientados a conexão e normalmente utilizam portas acima de 1024.
Como foi demonstrado, o conhecimento do protocolo TCP se torna uma importante ferramenta na
ajuda do entendimento de um ambiente de rede. No próximo artigo exploraremos como são
realizados os Port Scanners e como cada método funciona. Até breve.