Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

04 - Identificações de Processos

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Para que o transporte de dados seja útil, ele não pode apenas entregar o pacote na máquina de destino; ele deve entregar o dado ao processo de software correto (ex: o Chrome, o Outlook ou o servidor Web). Essa identificação é feita através do conceito de Portas e Sockets.

1. O Conceito de Porta (Port)

Uma porta é um endereço lógico de 16 bits (0 a 65.535) que serve como "caixa postal" para uma aplicação específica.
- Portas de Origem: Escolhidas aleatoriamente pelo cliente para cada nova conexão.
- Portas de Destino: Padronizadas para serviços conhecidos (ex: 80 para HTTP, 443 para HTTPS).

Modelo de Portas x Processos

Em sistemas operacionais modernos, o conceito de "porta aberta" é uma abstração: quando um processo cria um socket de escuta, o kernel registra no socket table que segmentos chegando na porta X devem ser entregues àquele processo. Não há "fio físico" na porta — é apenas uma entrada em uma tabela hash do kernel.

2. O Conceito de Socket

Um Socket é a combinação única de um Endereço IP e um Número de Porta.
- Ele identifica de forma absoluta um ponto final de uma conexão na rede.
- Exemplo: 192.168.1.50:443 identifica o processo HTTPS rodando no servidor 50.

API de Sockets (POSIX)

// Servidor TCP escutando na porta 8080
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr = {
    .sin_family = AF_INET,
    .sin_port   = htons(8080),
    .sin_addr.s_addr = INADDR_ANY
};
bind(sock, (struct sockaddr*)&addr, sizeof(addr));
listen(sock, 5);  // backlog de 5 conexões pendentes
int client = accept(sock, NULL, NULL);

O socket() cria o descritor, o bind() associa IP:Porta, o listen() marca como passivo e o accept() bloqueia até chegar um SYN.

Socket Pair e Quíntupla

Em TCP, uma conexão é completamente identificada por um Socket Pair (dois sockets, um de cada lado). Para fins de gerenciamento, é mais comum falar em 5-tuple:

3. Identificando uma Conexão Completa

Para que o Sistema Operacional saiba exatamente para qual processo entregar cada segmento que chega da rede, ele usa uma Quíntupla (5-tuple) exclusiva para cada conexão:
1. IP de Origem.
2. Porta de Origem.
3. IP de Destino.
4. Porta de Destino.
5. Protocolo de Transporte (TCP ou UDP).

Conexão A: (192.168.1.10, 53142, 93.184.216.34, 443, TCP)
Conexão B: (192.168.1.10, 53143, 93.184.216.34, 443, TCP)

Duas conexões para o mesmo servidor na mesma porta são diferenciadas apenas pela porta de origem — um único servidor web pode atender milhares de clientes simultaneamente porque cada conexão tem uma 5-tuple única.

4. Categorias de Portas (IANA)

As portas são divididas em três grandes grupos, conforme padronizado pela IANA (Internet Assigned Numbers Authority):

Faixa Nome Quantidade Exemplos
0-1023 Well-Known (Sistema) 1024 22 (SSH), 25 (SMTP), 53 (DNS), 80 (HTTP), 443 (HTTPS)
1024-49151 Registered (Usuário) 48128 3306 (MySQL), 5432 (PostgreSQL), 6379 (Redis), 8080 (HTTP-alt)
49152-65535 Dynamic / Ephemeral 16384 Portas de origem escolhidas automaticamente por clientes

Atribuição IANA

A IANA mantém um registry público (https://www.iana.org/assignments/service-names-port-numbers) que registra quem usa cada porta. O registro é advisory — nada impede que uma aplicação use a porta 8080 em vez da oficial 80, mas software de firewall, IDS e NMS podem usar esse banco para identificar serviços.

Porta 0

A porta 0 é reservada e não pode ser usada para bind(). Quando usada como porta de origem ao chamar bind(), o kernel escolhe automaticamente uma porta efêmera da faixa dinâmica.

5. Tabelas Internas do SO

Linux: /proc/net/tcp

cat /proc/net/tcp
# sl  local_address rem_address   st ...
# 0:  0100007F:0016 00000000:0000 0A   (LISTEN, 127.0.0.1:22)
# 1:  0A0A0A0A:01BB 05060708:C8F4 01   (ESTABLISHED, 10.10.10.10:443 <-> 5.6.7.8:51444)

Os endereços estão em hex little-endian. O estado (st) segue os códigos do TCP (01=ESTABLISHED, 0A=LISTEN, 06=TIME_WAIT, etc.).

Comando ss

ss -tnp   # TCP, numérico, com processos
ss -unlp  # UDP, listening, com processos

O ss substituiu o antigo netstat por ser mais rápido (lê diretamente de /proc).

6. Reserva de Portas Efêmeras

Cada SO tem sua faixa para portas de origem:

Sistema Faixa Efêmera Padrão
Linux moderno 32768-60999 (cat /proc/sys/net/ipv4/ip_local_port_range)
Windows 10/11 49152-65535
FreeBSD / macOS 49152-65535
Linux antigo (kernel 2.x) 1024-4999

Em Linux pode ser ajustado: echo "32768 60999" > /proc/sys/net/ipv4/ip_local_port_range. Servidores sob alta carga (proxies reversos, NAT) precisam ampliar essa faixa para evitar esgotamento.

7. Portas e NAT

Quando um pacote atravessa um NAT (residencial ou corporativo), o NAT reescreve o IP de origem e a porta de origem, mantendo uma tabela de tradução:

Tabela NAT:
 Inside local          Outside (Inside global)
 192.168.1.10:53142  → 200.150.100.20:40001
 192.168.1.11:53142  → 200.150.100.20:40002

Note que dois hosts internos podem usar a mesma porta de origem (53142) — o NAT os diferencia pela porta externa atribuída. Por isso o NAT com porte é chamado NAPT ou PAT.

8. Portas e Segurança

Port Scanning

Ferramentas como nmap sondam portas para mapear serviços expostos:

nmap -sS -p 1-65535 alvo.com      # TCP SYN scan em todas as portas
nmap -sU --top-ports 100 alvo.com # UDP scan nas 100 portas mais comuns
nmap -sV -O alvo.com              # Detecção de versão e SO

Técnicas de Varredura

Técnica Flag TCP Detecção
TCP Connect SYN+ACK completos Logs no alvo
SYN scan (stealth) SYN apenas Silencioso
FIN/Xmas/Null FIN/URG/PSH Bypass de firewalls simples
UDP scan Datagrama UDP vazio Lento, gerar respostas ICMP

Hardening

  • Fechar portas desnecessárias (systemctl disable <service>).
  • Usar firewall (iptables, nftables, ufw, firewalld) para restringir acesso a portas internas.
  • Em servidores web: 80/443 abertos para qualquer IP, 22 apenas para rede administrativa (ou via VPN).
  • Detectar port knocking em servidores de produção como defesa em profundidade.

Important

Em termos de Cyber Segurança, o Port Scanning (mapeamento de portas abertas) é a primeira fase de um ataque. Descobrir qual porta está "escutando" revela quais serviços e versões de software estão rodando no servidor alvo. Por isso, ocultar a existência de portas (com firewall ou TCP wrappers) e manter serviços atualizados são controles defensivos fundamentais.