Skip to content

felipedresch/LFI-Sentinel

Repository files navigation

LFI-Sentinel: Solução inteligente para o gerenciamento de incidentes de segurança

⚠️ Nota: Este projeto é uma versão preliminar de uma ferramenta desenvolvida como parte de um projeto maior financiado pela RNP (Rede Nacional de Ensino e Pesquisas). A publicação desta versão inicial foi autorizada, pois ela não representa o comportamento final do sistema. Vale destacar que esta versão pública não será mantida, já que os esforços estão direcionados ao desenvolvimento da versão final, que é de código fechado.

📋 Visão Geral

Este projeto fornece um sistema para gerenciar e analisar incidentes de segurança utilizando Inteligência Artificial (IA), especificamente Modelos de Linguagem Grandes (LLMs) como o Gemini do Google. A característica principal é sua capacidade de aproveitar uma base de conhecimento privada de incidentes de segurança passados através de Geração Aumentada por Recuperação (RAG - Retrieval-Augmented Generation). Isso permite que a IA forneça respostas contextualizadas, gere materiais de treinamento específicos e aprenda com o histórico único de incidentes da organização.

O sistema atua como um intermediário, aprimorando as interações com LLMs ao fundamentá-las em dados de incidentes reais e específicos, armazenados de forma segura. Além disso, a ferramenta auxilia durante todo o processo de gestão de incidentes de segurança, desde o cadastro até a solução.

🚀 Funcionalidades Principais

  • Gestão de Incidentes:
    • Upload de múltiplos incidentes via arquivos TXT (separados por ### ou ---).
    • Registro individual de incidentes.
    • Sistema automático de deduplicação baseado em hashes, evitando incidentes duplicados que podem enviesar as repsostas dos modelos de IA
    • Geração de soluções para os tickets/incidentes cadastrados
    • Categorização de incidentes a partir de 3 taxonomias distintas (CERT, NIST e LLM/Livre)
    • Avaliação dos resultados gerados pela ferramenta
  • Interação Contextual com IA:
    • Interface de chat permitindo aos usuários fazer perguntas sobre incidentes de segurança, recebendo respostas baseadas nos dados armazenados.
    • Geração de pares de Pergunta/Resposta (Q&A) baseados em tópicos de incidentes para fins de treinamento.
    • Métricas fornecidas com as respostas da IA, indicando a utilização do contexto e a relevância dos documentos fonte (scores de similaridade).
  • Interface Gráfica Intuitiva:
    • Um front-end web permite que os usuários realizem uploads de arquivos de incidentes, interajam com a base vetorial (busca) e conversem com a IA contextualizada sem necessidade de interação direta com a API.

Arquitetura RAG - Como Funciona?

O sistema utiliza Geração Aumentada por Recuperação (RAG) para conectar o LLM (Gemini) com nossa base de dados personalizada de incidentes:

  1. Embedding: Textos de relatórios de incidentes são convertidos em representações vetoriais numéricas (embeddings) usando o modelo text-embedding-004 do Google.
  2. Armazenamento: Esses embeddings são armazenados e indexados em um banco de dados vetorial especializado, o Pinecone, que permite buscas por similaridade eficientes.
  3. Recuperação: Quando uma consulta do usuário (por exemplo, uma pergunta via chat) é recebida, o sistema busca no Pinecone por documentos de incidentes semanticamente similares à consulta.
  4. Aumento e Geração: Os documentos de incidentes recuperados são passados para o modelo Gemini como contexto, juntamente com a consulta original do usuário. O Gemini é instruído a gerar uma resposta baseada apenas neste contexto fornecido, garantindo que as respostas sejam relevantes e fundamentadas nos dados reais dos incidentes. Se dados relevantes suficientes não forem encontrados, a IA indicará que não pode fornecer uma resposta completa.

🛠️ Tecnologias Utilizadas

  • Frontend: Next.js 15, React 19, TypeScript, Tailwind CSS
  • Backend: Express.js
  • IA e APIs: Google Generative AI API, Pinecone (busca vetorial)
  • Modelo de IA: Google Gemini 2.0 Flash (via Google AI SDK)
  • Modelo de Embeddings: Google text-embedding-004
  • Autenticação: Firebase Auth
  • Banco de Dados: Firebase Firestore
  • Containerização: Docker e Docker Compose

Fluxo de Uso

  1. Autenticação: Faça login através da interface Firebase
  2. Upload de Incidentes: Use a funcionalidade de upload para carregar arquivos TXT
  3. Visualização: Acesse a lista de tickets para ver os incidentes carregados
  4. Classificação: Use as opções de classificação automática (CERT, NIST, LLM)
  5. Chat: Utilize a interface de chat para fazer perguntas sobre os incidentes
  6. Resultados: Verifique as análises e classificações no módulo de resultados

📁 Estrutura do Projeto

ANON-Sentinel/
├── src/
│ ├── app/ # Páginas Next.js (App Router)
│ ├── components/ # Componentes React reutilizáveis
│ ├── server/ # Servidor Express
│ │ ├── routes/ # Rotas da API
│ │ ├── services/ # Serviços de integração
│ │ └── models/ # Modelos de dados
│ ├── lib/ # Utilitários e configurações
│ └── config/ # Configurações da aplicação
├── public/ # Arquivos estáticos
├── Dockerfile # Configuração Docker
├── docker-compose.yml # Orquestração de containers
├── start-evaluation.* # Scripts de inicialização
└── package.json # Dependências e scripts
👨‍💻 Configurando o Ambiente de Desenvolvimento

Pré-requisitos

  • Node.js 18+ e npm
  • Chaves de API configuradas
  • Projeto Firebase criado

Passos

# 1. Clone o repositório
git clone https://github.com/SF2025-S/ANON-Sentinel
cd ANON-Sentinel

# 2. Instale as dependências
npm install

# 3. Configure variáveis de ambiente
cp .env.example .env.local

# 4. Edite o arquivo .env.local com suas chaves (veja seção abaixo)

# 5. Build do projeto
npm run build

# 6. Execute o servidor
npm run start

⚙️ Configuração de Variáveis de Ambiente

Variáveis Necessárias

Crie um arquivo .env.evaluation (para Docker) ou .env.local (para execução local) com as seguintes variáveis:

# APIs de IA
GOOGLE_GENERATIVE_AI_API_KEY=sua_chave_google_ai
PINECONE_KEY=sua_chave_pinecone

# Firebase Configuration
NEXT_PUBLIC_FIREBASE_API_KEY=sua_chave_firebase
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=seu_projeto.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=seu_projeto_id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=seu_projeto.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=seu_sender_id
NEXT_PUBLIC_FIREBASE_APP_ID=seu_app_id
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=seu_measurement_id

# API Configuration
NEXT_PUBLIC_API_URL=http://localhost:3000

Como Obter as Chaves de API

1. Google AI API

  • Acesse Google AI Studio
  • Crie um novo projeto e gere uma chave API
  • Copie a chave para GOOGLE_GENERATIVE_AI_API_KEY

2. Pinecone

  • Registre-se em Pinecone
  • Crie um novo projeto
  • Não é necessário criar um índice pelo painel Pinecone, apenas defina o nome do índice/namespace através da variável indexName em lib/pinecone.ts
  • Copie a API Key para PINECONE_KEY

3. Firebase

  • Crie um projeto no Firebase Console
  • Ative Authentication e configure provedores (Email/Password, Google, etc.)
  • Ative Firestore Database em modo de teste
  • Vá em Configurações do Projeto > Geral
  • Na seção "Seus apps", adicione um app web
  • Copie as configurações do Firebase para as variáveis correspondentes
📋 Configuração Obrigatória: Usuários Autorizados

Após configurar o Firebase, é obrigatório criar usuários autorizados:

Passo 1: Ativar Email/Senha no Authentication

  1. Vá em Authentication > Sign-in method
  2. Clique em Email/Password
  3. Ative a opção e salve

Passo 2: Criar Usuário no Authentication

  1. Vá em Authentication > Users
  2. Clique em Add user
  3. Digite o email e senha do usuário
  4. Salve o usuário

Passo 3: Criar Coleção de Usuários Autorizados no Firestore

  1. Vá em Firestore Database
  2. Clique em Start collection
  3. Nome da coleção: authorized_users
  4. Crie um documento com:
    • Document ID: (email do usuário)
    • Campo: email (tipo: string)
    • Campo: active (tipo: boolean)
    • Campo: role (tipo: string)

Exemplo da estrutura no Firestore:

authorized_users/
└── documento1/
├── email: "admin@empresa.com"
└── isActive: true
└── role: "admin"

⚠️ Importante: Sem esta configuração, nenhum usuário conseguirá fazer login no sistema, mesmo com credenciais válidas no Authentication.

🔒 Configuração das Regras de Segurança do Firestore

Após configurar o Firestore, defina as seguintes regras de segurança:

  1. Vá em Firestore Database > Rules
  2. Substitua as regras padrão por:
rules_version = '_version_';
service cloud.firestore {
  match /databases/{database}/documents {
  	
    function isAuthorizedUser() {
      let userDoc = get(/databases/$(database)/documents/authorized_users/$(request.auth.token.email));
      return userDoc != null && userDoc.data.isActive == true;
    }
    
    match /authorized_users/{userId} {
      allow read: if request.auth != null && request.auth.token.email == userId;
    }
  
    match /uploads/{documentId} {
      allow read, write: if request.auth != null && isAuthorizedUser();
    }
    
    match /categorizations/{document} {
      allow read, write: if request.auth != null && isAuthorizedUser();
    }
    
    match /results/{document} {
      allow read, write: if request.auth != null && isAuthorizedUser();
    }
    
    match /solutions/{document} {
      allow read, write: if request.auth != null && isAuthorizedUser();
    }
  }
}
  1. Clique em Publish para ativar as regras

Scripts de Desenvolvimento

# Desenvolvimento
npm run dev              # Inicia em modo desenvolvimento (hot reload)

# Produção
npm run build           # Build da aplicação
npm run start           # Inicia em modo produção

# Utilitários
npm run lint            # Verificação de código
npm run type-check      # Verificação de tipos TypeScript

🚀 Uso da Aplicação

Acesso

Após iniciar a aplicação, acesse:

About

Solução inteligente para o gerenciamento de incidentes de segurança

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors