Sistema de monitoramento, análise e gestão de eventos de segurança para ambientes OT/ICS
- Sobre o Projeto
- Características Principais
- Arquitetura e Modelo de Dados
- Tecnologias Utilizadas
- Instalação e Configuração
- Estrutura do Projeto
- Requisitos Funcionais
- Restrições de Integridade
- Contribuindo
O LogHound é um sistema robusto desenvolvido para fornecer funcionalidades de fácil acesso e manuseio por parte do usuário, garantindo capacidade de monitoramento, análise e gestão de eventos de segurança em ambientes de Tecnologia Operacional (OT) e Sistemas de Controle Industrial (ICS).
O sistema utiliza o modelo relacional como paradigma de modelagem de dados, oferecendo simplicidade conceitual, base matemática sólida e flexibilidade para realização de consultas complexas, essenciais no contexto de segurança cibernética industrial.
- Centralizar o gerenciamento de ativos industriais e suas vulnerabilidades
- Registrar e analisar eventos de segurança em tempo real
- Rastrear indicadores de comprometimento (IOCs) e ameaças
- Modelar e visualizar cenários de ataque
- Gerenciar casos de segurança e evidências forenses
- Fornecer relatórios e análises para tomada de decisão
- Cadastro completo de ativos com identificador único
- Suporte para diferentes tipos de ativos (dispositivos físicos ou aplicações)
- Atributos essenciais: nome e tipo para classificação
- Rastreamento de ativos afetados por incidentes de segurança
- Registro de incidentes de segurança com data/hora obrigatória
- Controle de status dos incidentes (aberto, fechado, em análise, etc.)
- Associação de incidentes a usuários responsáveis pelo registro/tratamento
- Rastreamento temporal completo de eventos
- Cadastro de tipos de ameaças (malware, negação de serviço, etc.)
- Associação de ameaças a incidentes através do relacionamento ternário OCORRÊNCIA
- Modelagem da relação complexa entre incidente, ativo e ameaça
- Suporte para múltiplas ameaças por incidente e múltiplos ativos afetados
- Registro de evidências vinculadas a incidentes específicos
- Armazenamento de arquivos/logs como evidências
- Descrição detalhada de cada evidência
- Entidade fraca: Evidências dependem de incidentes para existir
- Exclusão em cascata: remoção de incidente remove suas evidências
- Sistema de usuários com identificação única
- Rastreamento de usuários responsáveis por incidentes
- Informações básicas: nome e e-mail
- Relacionamento 1:N com incidentes (um usuário pode registrar vários incidentes)
- Relacionamento ternário OCORRÊNCIA: Modela a ocorrência de um incidente relacionando simultaneamente incidente, ativo(s) e ameaça(s)
- Relacionamento identificador POSSUI: Garante que evidências sempre estejam vinculadas a um incidente
- Integridade referencial garantida em todos os relacionamentos
O LogHound utiliza o modelo relacional como paradigma de modelagem de dados, oferecendo simplicidade conceitual, base matemática sólida e flexibilidade para realização de consultas complexas. O sistema é modelado através do Prisma ORM e implementado em PostgreSQL.
O modelo conceitual do LogHound é composto pelas seguintes entidades:
| Entidade | Atributos | Descrição |
|---|---|---|
| USUÁRIO | ID_Usuario (PK), Nome, E-mail |
Usuários do sistema que registram e tratam incidentes |
| INCIDENTE | ID_Incidente (PK), Data/Hora, Status |
Eventos de segurança registrados no sistema |
| ATIVO | ID_Ativo (PK), Nome, Tipo |
Ativos do sistema (dispositivos ou aplicações) |
| AMEAÇA | ID_Ameaça (PK), Nome |
Tipos de ameaças de segurança (malware, negação de serviço, etc.) |
| Entidade | Atributos | Descrição |
|---|---|---|
| EVIDÊNCIA | ID_Evidência (PK parcial), Arquivo/Log, Descrição |
Evidências coletadas que comprovam um incidente |
- Cardinalidade: 1:N (Um usuário pode registrar vários incidentes)
- Descrição: Relaciona o usuário responsável pelo registro/tratamento do incidente
- Entidades: INCIDENTE, ATIVO, AMEAÇA
- Cardinalidades:
- INCIDENTE (1) : Um incidente está relacionado a uma ocorrência específica
- ATIVO (N) : Um incidente pode afetar múltiplos ativos
- AMEAÇA (N) : Um incidente pode estar relacionado a múltiplas ameaças
- Descrição: Modela a ocorrência de um incidente de segurança, relacionando qual ameaça afetou quais ativos
- Cardinalidade: 1:N (Um incidente pode possuir várias evidências)
- Tipo: Relacionamento identificador (EVIDÊNCIA é entidade fraca)
- Descrição: Relaciona evidências coletadas a um incidente específico. A exclusão de um incidente implica na exclusão de todas as suas evidências.
USUÁRIO (1) ──[REGISTRA]──> (N) INCIDENTE (1) ──[POSSUI]──> (N) EVIDÊNCIA
│
│
[OCORRÊNCIA] │
│
┌────────────┴────────────┐
│ │
(N) ATIVO (N) AMEAÇA
- Simplicidade Conceitual: Modelo focado nas entidades essenciais do domínio
- Integridade Referencial: Garante que incidentes só existam com ativos e ameaças válidos
- Entidade Fraca: EVIDÊNCIA depende de INCIDENTE para existir
- Relacionamento Ternário: OCORRÊNCIA modela a complexidade de relacionar incidente, ativo e ameaça simultaneamente
- Node.js - Runtime JavaScript
- Prisma ORM - ORM para modelagem e acesso ao banco de dados
- PostgreSQL - Banco de dados relacional
- TypeScript/JavaScript - Linguagem de programação
- Node.js 18+ instalado
- PostgreSQL instalado e rodando
- npm ou yarn
-
Clone o repositório
git clone <url-do-repositorio> cd LogHound
-
Instale as dependências
npm install
-
Configure o banco de dados
Crie um arquivo
.envna raiz do projeto com a seguinte configuração:DATABASE_URL="postgresql://usuario:senha@localhost:5432/loghound?schema=public"
-
Execute as migrações
npx prisma migrate dev
-
Gere o cliente Prisma
npx prisma generate
-
Opcional: Visualize o banco de dados
npx prisma studio
LogHound/
├── prisma/
│ └── schema.prisma # Schema do banco de dados
├── node_modules/ # Dependências
├── package.json # Configuração do projeto
├── package-lock.json # Lock de dependências
├── .env # Variáveis de ambiente (não versionado)
├── README.md # Este arquivo
├── DRD.md # Documento de Requisitos de Dados
└── MER.png # Diagrama do Modelo Entidade-Relacionamento
- ✅ Cadastro de ativos com identificador único
- ✅ Suporte para tipos: dispositivo (hardware) e aplicação (software)
- ✅ Rastreamento de hierarquia de ativos (composição)
- ✅ Registro de vulnerabilidades por ativo
- ✅ Relacionamento N:M entre ativos e vulnerabilidades
- ✅ Registro de indicadores de segurança (logs, alertas)
- ✅ Associação obrigatória de indicadores a ativos
- ✅ Data e hora obrigatórias para todos os eventos
- ✅ Registro de incidentes a partir de indicadores
- ✅ Associação de incidentes a múltiplos ativos
- ✅ Classificação de incidentes por tipo de ameaça
- ✅ Cadastro de tipos de ameaças (malware, negação de serviço, etc.)
- ✅ Validação: incidente requer ativo e ameaça relacionados
- ✅ Adição de evidências a incidentes
- ✅ Vinculação obrigatória de evidências a incidentes
- ✅ Modelagem de cenários de ataque
- ✅ Relacionamento entre ativos vulneráveis, ameaças, incidentes e evidências
- ✅ Visualização de relações complexas
- ✅ Contagem de ameaças por tipo
- ✅ Número de incidentes por ativo
- ✅ Total de vulnerabilidades por ativo
- ✅ Listagem de incidentes por período, agrupados por ativo
- ✅ Identificação do ativo com maior número de vulnerabilidades
- ✅ Busca de evidências por tipo de incidente e data
- ✅ Identificador único para cada ativo, incidente, ameaça e cenário
- ✅ Combinação única de tipo de vulnerabilidade e ativo
- ✅ Incidente só pode ser registrado se ativo(s) e ameaça existirem
- ✅ Evidência não pode ser cadastrada sem incidente
- ✅ Exclusão em cascata: incidente → evidências
- ✅ Data e hora obrigatórias para indicadores
- ✅ Status de incidente em conjunto predefinido
- ✅ Identificador de ativo em formato padronizado
- ✅ Cenário de ataque requer combinação válida de ativos e ameaças vinculada a incidente
- ✅ Data de evidência não pode ser anterior à data de início do incidente
- ✅ Identificador único de ativo filho dentro do contexto do ativo pai
Contribuições são bem-vindas! Para contribuir com o projeto:
- Faça um fork do repositório
- Crie uma branch para sua feature (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -m 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
- Siga as convenções do Prisma para modelagem
- Documente funções e classes complexas
- Mantenha commits descritivos e organizados
Este projeto está sob a licença ISC.
- Higor Ferreira
- Matheus Marinho
Instituto de Informática – UFG
Sistema desenvolvido para gestão e análise de eventos de segurança em ambientes OT/ICS