Detecção de Intrusão e Resposta a Incidentes
Aula 6 de 6
IDS/IPS com Snort/Suricata
# Instalação Suricata
apt install suricata
suricata-update # atualizar regras (ET Open)
# Configuração: /etc/suricata/suricata.yaml
af-packet:
- interface: eth0
# Executar
systemctl enable --now suricata
# Verificar alertas
tail -f /var/log/suricata/fast.log
tail -f /var/log/suricata/eve.json | jq '.alert'
Regras Suricata
# /etc/suricata/rules/local.rules
# Detectar scan de porta
alert tcp $EXTERNAL_NET any -> $HOME_NET any \
(msg:"PORTSCAN detectado"; \
flags:S,12; threshold: type both, track by_src, count 10, seconds 10; \
sid:1000001; rev:1;)
# Detectar brute force SSH
alert tcp $EXTERNAL_NET any -> $HOME_NET 22 \
(msg:"SSH Brute Force"; \
flow:to_server; \
detection_filter:track by_src, count 10, seconds 10; \
sid:1000002; rev:1;)
WAF com ModSecurity (nginx)
# Configuração OWASP CRS
apt install libnginx-mod-http-modsecurity
# /etc/nginx/modsec/main.conf
SecRuleEngine On
Include /etc/nginx/modsec/crs/crs-setup.conf
Include /etc/nginx/modsec/crs/rules/*.conf
# Bloquear SQL Injection
SecRule ARGS "@detectSQLi" "id:1001,deny,status:403,msg:'SQLi detectado'"
Osquery — Query System como SQL
# Instalar
apt install osquery
# Queries úteis
osqueryi "SELECT * FROM processes WHERE name = 'nginx';"
osqueryi "SELECT * FROM listening_ports WHERE port = 22;"
osqueryi "SELECT * FROM crontab;"
osqueryi "SELECT * FROM file_events WHERE path LIKE '/etc/%';"
osqueryi "SELECT * FROM socket_events WHERE action = 'bind';"
# Monitoramento contínuo
# /etc/osquery/osquery.conf
{
"schedule": {
"process_audit": {
"query": "SELECT * FROM processes WHERE parent != 1;",
"interval": 60
}
},
"file_paths": {
"etc": ["/etc/%"],
"home": ["/home/%/.ssh/%%"]
}
}
Lynis — Security Auditing
# Executar auditoria
lynis audit system
lynis show warnings
lynis show suggestions
# Hardening index (score)
# /var/log/lynis-report.dat contém o score
Resposta a Incidentes — Checklist
1. Isolar o sistema comprometido da rede
2. Preservar evidências (disk image forense)
3. Coletar informações voláteis (processos, conexões, memória)
4. Analisar logs (auth.log, audit.log, syslog)
5. Identificar vetor de entrada
6. Remover acesso do atacante
7. Restaurar de backup limpo
8. Hardening para prevenir reincidência
Coleta Forense Imediata
# Informações voláteis (executar em sistema externo!)
lsof -i
netstat -tulpn
ss -tulpn
ps auxf
cat /var/log/auth.log | tail -100
cat /var/log/lastlog
last -F
find / -name "*.php" -mmin -60 -type f
strings /dev/mem | grep -i password
Prevenção é melhor que resposta. Mas quando um incidente ocorrer, tenha um plano testado. Documente tudo.