167 lines
6.5 KiB
Markdown
167 lines
6.5 KiB
Markdown
# Revisão e Melhorias do Módulo de Cibersecurity
|
|
|
|
**Data:** 12/01/2026
|
|
**Módulo:** `/ti/cibersecurity`
|
|
**Objetivo:** Garantir funcionamento seguro do sistema mesmo diante de ataques
|
|
|
|
## Resumo das Melhorias Implementadas
|
|
|
|
### ✅ 1. Controle de Acesso (Admin-Only)
|
|
|
|
**Problema identificado:** Qualquer usuário autenticado podia executar ações críticas de segurança (bloquear IPs, criar regras, deletar configurações).
|
|
|
|
**Solução implementada:**
|
|
- Adicionado helper `assertAdmin()` em `packages/backend/convex/security.ts`
|
|
- Todas as queries e mutations sensíveis agora exigem role `admin === true`
|
|
- Removido parâmetro `usuarioId` do cliente; o ID é derivado do usuário autenticado
|
|
- Criado `+page.server.ts` na rota `/ti/cibersecurity` para redirecionar não-admins
|
|
|
|
**Funções protegidas:**
|
|
- `listarEventosSeguranca`, `obterVisaoCamadas`, `listarReputacoes`
|
|
- `atualizarReputacaoIndicador`, `configurarRegraPorta`, `deletarRegraPorta`
|
|
- `solicitarRelatorioSeguranca`, `deletarRelatorio`
|
|
- `salvarAlertConfig`, `deletarAlertConfig`, `listarAlertConfigs`
|
|
- `criarConfigRateLimit`, `atualizarConfigRateLimit`, `deletarConfigRateLimit`, `listarConfigsRateLimit`
|
|
- `registrarAcaoIncidente`
|
|
|
|
### ✅ 2. Hardening de Endpoints Dev-Only
|
|
|
|
**Problema identificado:** Endpoints e mutations de teste estavam acessíveis em produção.
|
|
|
|
**Solução implementada:**
|
|
- Criado helper `assertDevOnly()` que verifica:
|
|
- Flag `SECURITY_DEV_TOOLS === 'true'`
|
|
- URL contém `localhost` ou `127.0.0.1`
|
|
- Deployment local (`anonymous-*`)
|
|
- `NODE_ENV !== 'production'`
|
|
- Endpoint HTTP `/security/rate-limit/seed-dev` retorna 404 em produção
|
|
- Mutations `criarEventosTeste`, `limparEventosTeste`, `seedRateLimitDev` bloqueadas em produção
|
|
|
|
### ✅ 3. Enforcement Real de Blacklist e Rate Limit
|
|
|
|
**Problema identificado:** As políticas eram apenas registradas no banco, sem enforcement real no tráfego.
|
|
|
|
**Solução implementada:**
|
|
- Criada mutation `enforceRequest` que verifica:
|
|
1. **Blacklist de IPs:** Consulta `ipReputation` e bloqueia com 403 se `blacklist === true` e ativo
|
|
2. **Rate limit por endpoint:** Aplica regras configuradas para o path específico
|
|
3. **Rate limit por IP:** Aplica regras globais ou específicas por IP
|
|
- Integrado no `hooks.server.ts` do SvelteKit para proteger `/api/auth/*`
|
|
- Integrado no handler HTTP `/security/analyze` do Convex
|
|
- Respostas consistentes: 403 (blacklist) ou 429 (rate limit) com header `Retry-After`
|
|
|
|
**Arquivos modificados:**
|
|
- `packages/backend/convex/security.ts` - função `enforceRequest`
|
|
- `packages/backend/convex/http.ts` - enforcement no `/security/analyze`
|
|
- `apps/web/src/hooks.server.ts` - enforcement no `/api/auth/*`
|
|
|
|
### ✅ 4. Melhorias de UX/UI
|
|
|
|
**Problema identificado:**
|
|
- Alerta sonoro falhava por autoplay policy
|
|
- Uso de `confirm()`/`alert()` nativos (inconsistente)
|
|
- Componente muito grande (difícil manter)
|
|
|
|
**Solução implementada:**
|
|
- **Alerta sonoro:** Agora requer interação do usuário (toggle) para ativar `AudioContext`
|
|
- **Confirmações:** Substituído `confirm()` por modal `<dialog>` nativo com estado reativo
|
|
- **Feedback:** Substituído `alert()` por sistema de feedback já existente (`feedback` state)
|
|
|
|
**Arquivos modificados:**
|
|
- `apps/web/src/lib/components/ti/CybersecurityWizcard.svelte`
|
|
|
|
## Funcionalidades Validadas
|
|
|
|
### ✅ Dashboard Principal
|
|
- ✅ Threat Matrix (gráfico de camadas) - 6h de dados
|
|
- ✅ Feed de eventos em tempo real com filtros (severidade/tipo)
|
|
- ✅ Contador de novos eventos
|
|
- ✅ Lista negra (blacklist) com ações rápidas
|
|
- ✅ Regras de porta (CRUD completo)
|
|
- ✅ Relatórios refinados (solicitar, listar, imprimir PDF, excluir)
|
|
- ✅ Rate limiting avançado (CRUD + ativar/desativar)
|
|
- ✅ Alertas e notificações (configurações múltiplas, email/chat)
|
|
|
|
### ✅ Backend (Convex)
|
|
- ✅ Queries protegidas (admin-only)
|
|
- ✅ Mutations protegidas (admin-only)
|
|
- ✅ Enforcement de blacklist
|
|
- ✅ Enforcement de rate limit
|
|
- ✅ Detecção automática de ataques (SQLi, XSS, DDoS, etc.)
|
|
- ✅ Sistema de reputação de IPs
|
|
- ✅ Alertas automáticos (email/chat)
|
|
|
|
## Pontos de Atenção
|
|
|
|
### ⚠️ Enforcement de Rate Limit
|
|
- O enforcement atual funciona para:
|
|
- Endpoints HTTP do Convex (`/security/analyze`)
|
|
- Rotas `/api/auth/*` do SvelteKit
|
|
- **Recomendação:** Para proteção completa, considere:
|
|
- Proxy reverso (Nginx/Traefik) com rate limiting
|
|
- WAF (Web Application Firewall) na borda
|
|
- Cloudflare ou similar para DDoS protection
|
|
|
|
### ⚠️ Testes Automatizados
|
|
- Script existente: `scripts/teste_seguranca.py`
|
|
- **Recomendação:** Executar periodicamente para validar:
|
|
- Detecção de ataques (SQLi, XSS, brute force, DDoS)
|
|
- Bloqueio de IPs na blacklist
|
|
- Rate limiting funcionando
|
|
|
|
### ⚠️ Ambiente de Produção
|
|
- Endpoints dev-only estão protegidos, mas verifique:
|
|
- `NODE_ENV` está configurado corretamente
|
|
- `CONVEX_DEPLOYMENT` não começa com `anonymous-` em produção
|
|
- Flag `SECURITY_DEV_TOOLS` não está definida em produção
|
|
|
|
## Como Testar
|
|
|
|
### 1. Teste de Autorização
|
|
```bash
|
|
# Como usuário não-admin, tentar acessar /ti/cibersecurity
|
|
# Esperado: redirecionamento para /ti
|
|
```
|
|
|
|
### 2. Teste de Enforcement
|
|
```bash
|
|
# Bloquear um IP via painel
|
|
# Tentar fazer login com esse IP
|
|
# Esperado: 403 Forbidden
|
|
```
|
|
|
|
### 3. Teste de Rate Limit
|
|
```bash
|
|
# Configurar rate limit baixo (ex: 5 req/20s) para /api/auth/sign-in/email
|
|
# Fazer 6 tentativas de login rapidamente
|
|
# Esperado: 429 Too Many Requests na 6ª tentativa
|
|
```
|
|
|
|
### 4. Teste de Detecção de Ataques
|
|
```bash
|
|
python scripts/teste_seguranca.py --teste brute_force
|
|
python scripts/teste_seguranca.py --teste sql_injection
|
|
python scripts/teste_seguranca.py --teste ddos
|
|
```
|
|
|
|
## Próximos Passos Recomendados
|
|
|
|
1. **Monitoramento:** Implementar dashboard de métricas em tempo real
|
|
2. **Automação:** Cron job para expirar bloqueios temporários automaticamente
|
|
3. **Integração:** Conectar com WAF/proxy reverso para enforcement na borda
|
|
4. **Testes E2E:** Criar suite de testes automatizados para validação contínua
|
|
5. **Documentação:** Adicionar guia de uso para equipe TI
|
|
|
|
## Arquivos Modificados
|
|
|
|
- `packages/backend/convex/security.ts` - Guards de admin, enforcement, dev-only
|
|
- `packages/backend/convex/http.ts` - Enforcement no endpoint HTTP
|
|
- `apps/web/src/hooks.server.ts` - Enforcement no SvelteKit
|
|
- `apps/web/src/routes/(dashboard)/ti/cibersecurity/+page.server.ts` - Guard de rota (novo)
|
|
- `apps/web/src/lib/components/ti/CybersecurityWizcard.svelte` - UX melhorada
|
|
|
|
---
|
|
|
|
**Status:** ✅ Implementação completa
|
|
**Próxima revisão:** Após testes em ambiente de staging/produção
|