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.
- 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
- Upload de múltiplos incidentes via arquivos TXT (separados por
- 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.
O sistema utiliza Geração Aumentada por Recuperação (RAG) para conectar o LLM (Gemini) com nossa base de dados personalizada de incidentes:
- Embedding: Textos de relatórios de incidentes são convertidos em representações vetoriais numéricas (embeddings) usando o modelo
text-embedding-004do Google. - Armazenamento: Esses embeddings são armazenados e indexados em um banco de dados vetorial especializado, o Pinecone, que permite buscas por similaridade eficientes.
- 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.
- 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.
- 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
- Autenticação: Faça login através da interface Firebase
- Upload de Incidentes: Use a funcionalidade de upload para carregar arquivos TXT
- Visualização: Acesse a lista de tickets para ver os incidentes carregados
- Classificação: Use as opções de classificação automática (CERT, NIST, LLM)
- Chat: Utilize a interface de chat para fazer perguntas sobre os incidentes
- Resultados: Verifique as análises e classificações no módulo de resultados
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
- Node.js 18+ e npm
- Chaves de API configuradas
- Projeto Firebase criado
# 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 startCrie 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- Acesse Google AI Studio
- Crie um novo projeto e gere uma chave API
- Copie a chave para
GOOGLE_GENERATIVE_AI_API_KEY
- 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
- 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
Após configurar o Firebase, é obrigatório criar usuários autorizados:
Passo 1: Ativar Email/Senha no Authentication
- Vá em Authentication > Sign-in method
- Clique em Email/Password
- Ative a opção e salve
Passo 2: Criar Usuário no Authentication
- Vá em Authentication > Users
- Clique em Add user
- Digite o email e senha do usuário
- Salve o usuário
Passo 3: Criar Coleção de Usuários Autorizados no Firestore
- Vá em Firestore Database
- Clique em Start collection
- Nome da coleção:
authorized_users - 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"Após configurar o Firestore, defina as seguintes regras de segurança:
- Vá em Firestore Database > Rules
- 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();
}
}
}- Clique em Publish para ativar as regras
# 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 TypeScriptApós iniciar a aplicação, acesse:
- URL Local: http://localhost:3001