02 - Segurança
video: https://youtu.be/... no frontmatter da nota.A segurança na camada de aplicação começa com a gestão das portas. Toda porta aberta é um ponto onde o mundo exterior pode interagir com o seu código.
1. Port Scanning: O Primeiro Passo de um Ataque
Um atacante usa ferramentas de Port Scanning (como o Nmap) para enviar pacotes de sondagem para um IP e descobrir quais portas estão abertas.
- Porta Aberta: Significa que há um processo escutando e aceitando conexões.
- Porta Fechada: Significa que o computador está ativo, mas não há serviço naquela porta.
- Porta Filtrada: Significa que um Firewall ou IDS está bloqueando o tráfego, impedindo o Nmap de saber o estado da porta.
O objetivo do atacante é encontrar um serviço desatualizado ou vulnerável rodando em uma porta conhecida (Vulnerability Research).
Tipos de Scan do Nmap
| Tipo | Flag TCP | Vantagem |
|---|---|---|
-sS (SYN scan) |
SYN | Padrão, rápido, furtivo |
-sT (TCP connect) |
SYN+ACK via SO | Lento, mas funciona sem root |
-sU (UDP scan) |
UDP | Deteciona serviços UDP (DNS, SNMP) |
-sA (ACK scan) |
ACK | Mapeia regras de firewall |
-sF/-sX/-sN |
FIN/Xmas/Null | Bypass de firewalls stateless antigos |
-sV |
- | Detecta versão do serviço |
-O |
- | Detecta sistema operacional |
Exemplo Prático de Scan
# Scan rápido das 1000 portas mais comuns
nmap 192.168.1.10
# Scan completo (65535 portas) com detecção de serviço
nmap -p- -sV 192.168.1.10
# Scan furtivo via SYN (requer root)
sudo nmap -sS 192.168.1.10
2. Hardening e Proteção de Portas
Para proteger a identificação de processos, aplicamos técnicas de Hardening:
- Princípio do Menor Privilégio: Desabilite todos os serviços e feche todas as portas que não são essenciais para o negócio.
- Port Knocking: Uma técnica de segurança onde todas as portas ficam fechadas por padrão. Para abrir uma porta (ex: 22/SSH), o usuário deve enviar uma sequência específica de pacotes ("batidas") em outras portas primeiro.
- Firewall de Host (iptables/ufw/firewalld): Use regras de entrada (Inbound Rules) para filtrar quais IPs podem se conectar em portas sensíveis (ex: Permitir SSH apenas do IP da VPN da empresa).
- Mudança de Portas Padrão: Embora seja "Segurança por Obscuridade", mudar a porta do SSH (de 22 para 2222) ou RDP (de 3389 para uma aleatória) pode reduzir drasticamente o ruído de bots automáticos que tentam ataques de força bruta.
Exemplo de Configuração com UFW
# Bloqueia tudo por padrão
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Permite SSH apenas da rede da empresa
sudo ufw allow from 10.0.0.0/8 to any port 22 proto tcp
# Permite HTTP/HTTPS públicos
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Habilita firewall
sudo ufw enable
Exemplo de Port Knocking (knockd)
Configuração em /etc/knockd.conf:
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 15
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 15
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
Cliente faz: knock servidor 7000 8000 9000 para abrir a porta.
3. Segurança no S.O. (Privilégios)
Em sistemas Linux, apenas o usuário root pode abrir portas abaixo de 1024.
- Isso é uma medida de segurança histórica para impedir que um usuário comum crie um servidor simulado (Fake Server) em uma porta bem-conhecida (como a 80) para capturar senhas ou enganar outros usuários.
- Boa Prática: Sempre que possível, configure serviços para rodar com usuários de sistema sem privilégios (ex: o usuário www-data para o servidor Web).
Portas Privilegiadas vs Efêmeras
| Faixa | Faixa | Uso | Permissão |
|---|---|---|---|
| Well-known | 0-1023 | Serviços padrão (HTTP, SSH, DNS, SMTP) | Apenas root |
| Registradas | 1024-49151 | Aplicativos cadastrados na IANA | Qualquer usuário |
| Dinâmicas/Efêmeras | 49152-65535 | Conexões de saída, sockets temporários | Qualquer usuário |
A faixa efêmera já foi 1024-4999 em sistemas antigos (Linux < 2.4). Em sistemas modernos, é 32768-60999 (configurável via /proc/sys/net/ipv4/ip_local_port_range).
# Verificar faixa efêmera atual
cat /proc/sys/net/ipv4/ip_local_port_range
# 32768 60999
# Aumentar faixa (útil para servidores de alta carga)
echo "10000 65535" | sudo tee /proc/sys/net/ipv4/ip_local_port_range
Bypass: CAP_NET_BIND_SERVICE
Em sistemas modernos com capabilities, é possível permitir que um binário específico faça bind em portas privilegiadas sem dar root completo ao processo:
# Permite que Nginx faça bind na 80 sem root
sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx
4. O Ataque de Injeção de Protocolo
A vulnerabilidade ocorre quando um serviço em uma porta aceita comandos de outro protocolo. A segregação clara de portas e a validação rigorosa do cabeçalho na camada de transporte ajudam a mitigar esses riscos.
Port Hijacking
Um atacante que consiga prever qual porta efêmera o SO vai atribuir a uma nova conexão pode tentar hijack — criar um socket falso antes do processo legítimo. Defesas:
- Randomização de portas efêmeras: SO modernos aleatorizam a seleção (Linux via
net.ipv4.ip_local_port_range+ randomização). - SO_REUSEADDR com cuidado: Evitar race conditions em binds de portas.
- PID checking: Serviços que dependem de socket inheritance podem validar o PID do cliente.
Ataques Clássicos
- DNS Spoofing via UDP 53: Atacante envia resposta UDP forjada antes do servidor legítimo.
- HTTP Smuggling em porta 80: Explora diferenças de parsing HTTP entre proxies front-end e back-end.
- FTP Bounce Attack em porta 21: Usa servidor FTP como relay para port scan interno (RFC 2577).
5. Web Application Firewall (WAF)
O WAF é um firewall específico para a camada de aplicação (HTTP/HTTPS), analisando o conteúdo das requisições, não apenas IPs e portas:
| Recurso | Função |
|---|---|
| Filtro SQL Injection | Bloqueia payloads como ' OR 1=1-- |
| Filtro XSS | Bloqueia <script>...</script> |
| Rate limiting | Limita requisições por IP |
| Geo-blocking | Bloqueia países não autorizados |
| Bot detection | Identifica user-agents suspeitos |
| Virtual patching | Aplica regra de bloqueio para CVE conhecido antes do patch oficial |
WAFs Comuns
- ModSecurity: Open-source, integrado com Apache/Nginx, com o OWASP Core Rule Set (CRS).
- Cloudflare WAF: SaaS, baseado em nuvem, com ML para detecção.
- AWS WAF: Integrado com CloudFront e ALB.
- Imperva / F5 ASM: Soluções enterprise on-premise.
Exemplo de Regra ModSecurity (OWASP CRS)
# Bloqueia SQL Injection
SecRule ARGS "(?i:union\s+select)" \
"id:1001,phase:2,deny,status:403,log,msg:'SQL Injection attempt'"
6. IDS/IPS - Detecção de Intrusão
Complementando o WAF, sistemas IDS/IPS monitoram tráfego para detectar padrões de ataque:
- Snort: Open-source, analisa pacotes por regras.
- Suricata: Evolução multithread do Snort.
- Zeek (Bro): Foco em análise forense e logs estruturados.
- Suricata + ELK: Stack comum de SIEM para monitorar portas e tráfego.
7. Resumo Técnico
| Mecanismo | Camada | Função |
|---|---|---|
| Port Scanning (Nmap) | Ataque | Descobrir serviços |
| Firewall de Host (iptables/ufw) | Rede/Host | Filtrar portas |
| Port Knocking | Host | Esconder serviços |
| Capabilities (CAP_NET_BIND_SERVICE) | SO | Permitir bind sem root |
| WAF (ModSecurity, Cloudflare) | Aplicação | Filtrar payload HTTP |
| IDS/IPS (Snort, Suricata) | Rede/Host | Detectar ataques |
8. Conclusão
A segurança de portas não é apenas "fechar o que não precisa". É um ecossistema que combina firewall de host, princípio do menor privilégio, WAF na borda da aplicação, IDS/IPS para detecção e boas práticas de configuração do SO. Cada porta aberta é uma superfície de ataque potencial, e o trabalho do engenheiro é minimizar essa superfície enquanto mantém a funcionalidade do negócio. A redundância de camadas (firewall + WAF + IDS) é o que chamamos de "defesa em profundidade".