Pular para o conteúdo principal

Relatório de Estado do Sistema - sec-worker-interface (3FA)

Data: 07 de Janeiro de 2026
Versão: 1.0.0
Responsável: Engenheiro de Software Sênior


📊 Resumo Executivo

MétricaValor
SistemaAutenticação 3-Factor para Consultores
Status✅ Operacional e Validado
Fatores de AutenticaçãoSSH + Hardware UUID + Google OAuth
Plataforma ClientemacOS (exclusivo)
TTL do Token120 segundos
TTL da Sessão4 horas

🎯 Objetivo do Sistema

Implementar autenticação 3-factor para acesso ao painel administrativo iface-backend-vuejs, restringindo acesso exclusivamente a consultores ArboreoLab com:

  1. Chave SSH válida (acesso ao túnel)
  2. Dispositivo autorizado (Hardware UUID vinculado)
  3. Conta Google verificada (OAuth)

🔧 Componentes Implementados

Cliente Python (Mac)

ArquivoFunçãoStatus
login_consultor.pyLogin 3FA com countdown e detecção automática
register_consultor.pyRegistro de novo consultor + binding de dispositivo
cli.pyInterface CLI com Click + Rich
hardware_auth.pyExtração de Hardware UUID (macOS)
consultor_client.pyCliente HTTP para API

Backend Node.js

ComponenteLocalizaçãoStatus
consultorAuthService.jsnode/backend/services/
consultorRoute.jsnode/backend/routes/auth/
requireConsultor.jsnode/backend/middleware/
googleAuthEndpoint.jsnode/backend/api/✅ Atualizado

Frontend Vue.js

ComponenteLocalizaçãoStatus
LoginPage.vueiface-backend-vuejs/src/views/auth/✅ Reescrito
auth.tsiface-backend-vuejs/src/stores/✅ Atualizado
index.ts (router)iface-backend-vuejs/src/router/✅ Guard adicionado

Banco de Dados

TabelaDatabaseStatus
arb_consultoresArboreolabADM
arb_consultores_logArboreolabADM
arb_consultores_noncesArboreolabADM

🔐 Fluxo de Segurança Validado

┌──────────────────────────────────────────────────────────────────────────┐
│ FLUXO DE AUTENTICAÇÃO 3FA │
├──────────────────────────────────────────────────────────────────────────┤
│ │
│ [MAC] $ python3 login_consultor.py │
│ │ │
│ ├─→ Abre túnel SSH (Fator 1) ✅ │
│ │ ssh -L 3001:127.0.0.1:3000 user@server │
│ │ │
│ ├─→ Extrai Hardware UUID (Fator 2) ✅ │
│ │ ioreg -rd1 -c IOPlatformExpertDevice │
│ │ │
│ ├─→ POST /api/auth/consultor/initiate │
│ │ { email, hardware_uuid, nonce, timestamp } │
│ │ │
│ ├─→ Servidor valida: │
│ │ □ Hardware UUID hash corresponde? │
│ │ □ Nonce é único (anti-replay)? │
│ │ □ Timestamp dentro de 5 min? │
│ │ │
│ ├─→ Servidor gera challenge_token (120s TTL) │
│ │ Armazena em pending_challenge_token │
│ │ │
│ ├─→ Abre browser: /login?ct=<token> │
│ │ │
│ [BROWSER] │
│ │ │
│ ├─→ POST /api/auth/consultor/validate-token │
│ │ { token } → Busca token EXATO no banco │
│ │ │
│ ├─→ Se válido: mostra botão Google │
│ │ Se inválido: bloqueia login ❌ │
│ │ │
│ ├─→ Usuário clica "Prosseguir com Google" (Fator 3) ✅ │
│ │ │
│ ├─→ POST /api/login/google │
│ │ { code, challengeToken } │
│ │ │
│ ├─→ Servidor valida NOVAMENTE: │
│ │ □ challengeToken === pending_challenge_token? │
│ │ □ Token não expirou? │
│ │ □ Google OAuth válido? │
│ │ │
│ ├─→ Limpa pending_challenge_token (uso único) │
│ │ Emite JWT com isConsultor=true │
│ │ │
│ [MAC] ├─→ Script detecta login (polling) │
│ │ Fecha túnel automaticamente │
│ │ │
│ └─→ Consultor tem acesso por 4 horas ✅ │
│ │
└──────────────────────────────────────────────────────────────────────────┘

🛡️ Vulnerabilidades Mitigadas

AtaqueProteçãoStatus
Replay AttackNonce único + timestamp window
Token TamperingValidação exata (busca por token no DB)
Device SpoofingHardware UUID hashado com salt único
Session HijackingCookie HttpOnly + TTL curto
Unauthorized AccessValidação em 2 pontos (frontend + backend)
Brute ForceSSH key required + rate limiting

Teste de Segurança Realizado

TesteResultado
Alterar token na URL❌ Bloqueado - "Token inválido"
Acessar sem executar script❌ Bloqueado - "Aguardando validação SSH"
Reutilizar token expirado❌ Bloqueado - "Token expirado"
Login com dispositivo diferente❌ Bloqueado - "Hardware não reconhecido"

📁 Estrutura de Arquivos

sec-worker-interface/
├── README.md # Documentação completa ✅ ATUALIZADO
├── ESTRUTURA_DIRETORIOS.md # Este diagrama ✅ CRIADO
├── requirements.txt # Dependências Python
├── .python-version # Python 3.11

├── login_consultor.py # Script de login 3FA
├── register_consultor.py # Script de registro
├── cli.py # Interface CLI
├── hardware_auth.py # Extração Hardware UUID
├── consultor_client.py # Cliente HTTP
├── sec-worker # Wrapper shell

└── .venv/ # Ambiente virtual

📈 Métricas de Implementação

MétricaValor
Arquivos Python criados5
Linhas de código Python~800
Endpoints Node.js criados4
Componentes Vue.js modificados3
Tabelas SQL criadas3
Tempo de implementação1 dia

🔄 Endpoints da API

SSH Tunnel (localhost:3001)

MétodoEndpointDescrição
POST/api/auth/consultor/initiateInicia challenge com Hardware UUID
POST/api/auth/consultor/registerRegistra novo consultor
GET/api/auth/consultor/check-loginPolling do script Python

Browser (HTTPS)

MétodoEndpointDescrição
POST/api/auth/consultor/validate-tokenValida token antes de mostrar Google
POST/api/login/googleLogin Google com challengeToken
GET/api/auth/consultor/statusVerifica sessão atual

📋 Checklist de Validação

  • Script Python executa em macOS
  • Túnel SSH abre automaticamente
  • Hardware UUID é extraído corretamente
  • Token é gerado e armazenado no banco
  • Browser abre com token na URL
  • Frontend valida token antes de mostrar Google
  • Token alterado é rejeitado
  • Login Google funciona
  • JWT contém isConsultor=true
  • Script detecta login e fecha túnel
  • Sessão dura 4 horas
  • Log de auditoria registra ações

🚀 Próximos Passos (Sugestões)

  1. Revogação de dispositivo - Endpoint para revogar Hardware UUID específico
  2. Multi-dispositivo - Permitir múltiplos Macs por consultor
  3. Alertas de segurança - Notificar login de novo dispositivo
  4. Dashboard de auditoria - Visualizar logs de autenticação
  5. Renovação de sessão - Estender sessão sem re-autenticação completa

📝 Changelog

v1.0.0 (2026-01-07)

  • ✅ Implementação inicial do sistema 3FA
  • ✅ Scripts Python: login, register, cli
  • ✅ Backend: service, routes, middleware
  • ✅ Frontend: LoginPage com validação prévia
  • ✅ Banco: tabelas de consultores e auditoria
  • ✅ Documentação: README e ESTRUTURA_DIRETORIOS

📄 Arquivos de Referência

  • README: /home/arboreolab/Clio/sec-worker-interface/README.md
  • Estrutura: /home/arboreolab/Clio/sec-worker-interface/ESTRUTURA_DIRETORIOS.md
  • Infraestrutura: .github/instructions/infraestrutura/Infraestrutura_ArboreoLab.instructions.md

Relatório gerado automaticamente em 07 de Janeiro de 2026