Uma API inteligente para classificação automática de narrativas de segurança cibernética baseada no framework MITRE ATT&CK, desenvolvida pela Junta.ai. O sistema utiliza técnicas avançadas de NLP (Natural Language Processing) e RAG (Retrieval-Augmented Generation) para identificar automaticamente táticas e técnicas em descrições textuais de incidentes de segurança.
- Classificação Automática: Identifica técnicas MITRE ATT&CK em narrativas de segurança
- RAG (Retrieval-Augmented Generation): Busca semântica usando embeddings e FAISS
- Análise com LLM: Geração de respostas humanas detalhadas usando Ollama
- API RESTful: Interface completa com FastAPI e documentação automática
- Multilíngue: Suporte para português e inglês
- Dados Enriquecidos: Combinação de dados oficiais MITRE com cenários práticos
graph TB
A[Cliente/Frontend] --> B[FastAPI API]
B --> C[Classificador RAG]
B --> D[Serviço LLM]
C --> E[Modelo de Embeddings]
C --> F[Índice FAISS]
C --> G[Base de Dados MITRE]
D --> H[Ollama Local]
I[Web Scraper] --> G
J[Processador de Dados] --> G
-
API Layer (
api/):- FastAPI application com rotas RESTful
- Middlewares CORS e logging
- Schemas Pydantic para validação
-
RAG Service (
api/services/rag_service.py):- Embeddings usando SentenceTransformers
- Busca vetorial com FAISS
- Classificação por similaridade semântica
-
LLM Service (
api/services/llm_service.py):- Integração com Ollama
- Geração de análises detalhadas
- Suporte a múltiplos modelos
-
Data Pipeline (
data_op/):- Web scraping do site oficial MITRE
- Processamento e formatação de dados
- Merge de dados oficiais com cenários práticos
# Execução do web scraper
python data_op/scrapper.pyProcesso:
- Web scraping automatizado usando Playwright
- Coleta de 14 táticas principais do MITRE ATT&CK
- Extração de técnicas, descrições e metadados
- Geração do arquivo
data/raw/categories/mitre_training.json
Dados coletados:
- Táticas: Reconnaissance, Initial Access, Execution, Persistence, etc.
- Técnicas: Mais de 180 técnicas catalogadas
- Descrições: Textos detalhados de cada técnica
- Metadados: IDs, nomes, relacionamentos
Localização: data/raw/situations/
- 42+ cenários reais de incidentes de segurança
- Narrativas detalhadas em português
- Mapeamento para técnicas MITRE específicas
- Correções e mitigações recomendadas
# Processamento de dados de treinamento
python data_op/format_tuning_data.py
# Merge de dados oficiais e práticos
python data_op/merge_training_data.pyPipeline de processamento:
- Normalização: Limpeza e padronização de textos
- Estruturação: Conversão para formato JSON estruturado
- Enriquecimento: Combinação de dados oficiais com cenários práticos
- Validação: Verificação de integridade e consistência
{
"input": "Descrição da técnica ou narrativa do incidente",
"output": {
"technique_id": "T1190",
"technique_name": "Exploit Public-Facing Application",
"tactic": "Initial Access",
"correction": "Medidas de mitigação recomendadas"
}
}Arquivo: data/processed/mitre_techniques_complete.json
- Dados oficiais MITRE: ~180 técnicas catalogadas
- Cenários práticos: 42+ situações reais mapeadas
- Total: 200+ entradas para classificação
- Multilíngue: Conteúdo em português e inglês
- Python 3.8+
- Ollama (para funcionalidades LLM)
- 8GB+ RAM (recomendado)
- Clone o repositório:
git clone https://github.com/junta-ai/mitre-conversor.git
cd mitre-conversor- Instale as dependências:
pip install -r requirements.txt- Configure o Ollama (opcional, para análises LLM):
# Instalar Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# Baixar modelo recomendado
ollama pull llama3.2:3b
# Iniciar serviço
ollama serve- Verifique os dados:
# Os dados já estão incluídos no repositório
ls data/processed/mitre_techniques_complete.jsonO sistema usa configurações baseadas em config.py:
# Principais configurações
EMBEDDING_MODEL = "all-MiniLM-L6-v2" # Modelo de embeddings
LLM_MODEL = "llama3.2:3b" # Modelo LLM local
API_PORT = 8000 # Porta da APIpython run.pyuvicorn api.main:app --host 0.0.0.0 --port 8000 --reloadAcesse:
- API: http://localhost:8000
- Documentação: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
GET /api/healthResposta:
{
"status": "healthy",
"rag_loaded": true,
"techniques_count": 200,
"llm_available": true,
"llm_model": "llama3.2:3b"
}POST /api/classifyPayload:
{
"narrative": "Detectamos tentativas de exploração de vulnerabilidades em aplicações web expostas na nossa rede perimetral",
"top_k": 5,
"use_llm": true,
"language": "pt-br"
}Resposta:
{
"narrative": "Detectamos tentativas de exploração...",
"techniques": [
{
"technique_id": "T1190",
"technique_name": "Exploit Public-Facing Application",
"tactic": "Initial Access",
"similarity_score": 0.92,
"description": "Adversários podem tentar...",
"activity_description": null,
"correction": null
}
],
"processing_time": 0.15,
"human_response": "**Resumo Executivo**: Foi identificada uma tentativa de exploração...",
"llm_metadata": {
"model": "llama3.2:3b",
"language": "pt-br",
"generation_time": 2.3
}
}POST /api/searchPayload:
{
"query": "phishing email",
"top_k": 10
}- Embeddings: Textos são convertidos em vetores usando SentenceTransformers
- Indexação: Vetores são indexados com FAISS para busca eficiente
- Retrieval: Busca por similaridade coseno entre query e técnicas
- Ranking: Ordenação por score de similaridade (threshold: 0.7)
# Fluxo simplificado
narrative = "Texto do incidente"
embedding = model.encode(narrative)
scores, indices = faiss_index.search(embedding, top_k=5)
techniques = [mitre_techniques[i] for i in indices if scores[i] > 0.7]Quando use_llm: true:
- Técnicas identificadas são enviadas para o Ollama
- Prompt estruturado é gerado com contexto
- LLM produz análise detalhada em linguagem natural
- Resposta inclui resumo executivo, impacto e recomendações
mitre-conversor/
├── api/ # API FastAPI
│ ├── main.py # Aplicação principal
│ ├── models/
│ │ └── schemas.py # Schemas Pydantic
│ ├── routers/
│ │ ├── classifier.py # Endpoints de classificação
│ │ └── health.py # Health checks
│ └── services/
│ ├── rag_service.py # Serviço RAG/embeddings
│ └── llm_service.py # Serviço LLM/Ollama
├── data/ # Dados e datasets
│ ├── raw/ # Dados brutos
│ │ ├── categories/ # Dados oficiais MITRE
│ │ └── situations/ # Cenários práticos (42+)
│ ├── processed/ # Dados processados
│ └── training/ # Dados para fine-tuning
├── data_op/ # Pipeline de dados
│ ├── scrapper.py # Web scraper MITRE
│ ├── format_tuning_data.py # Formatação para treinamento
│ └── merge_training_data.py # Merge de datasets
├── config.py # Configurações globais
├── settings.py # Settings do projeto
├── run.py # Script de inicialização
└── requirements.txt # Dependências Python
- FastAPI: Framework web moderno e rápido
- Uvicorn: Servidor ASGI de alta performance
- Pydantic: Validação de dados e serialização
- SentenceTransformers: Modelos de embeddings pré-treinados
- FAISS: Biblioteca para busca de similaridade vetorial
- Transformers: Biblioteca Hugging Face para modelos NLP
- Ollama: Runtime local para modelos de linguagem
- Llama 3.2: Modelo de linguagem de código aberto
- Playwright: Automação web para scraping
- Pandas: Manipulação e análise de dados
- NumPy: Computação numérica
import requests
response = requests.post('http://localhost:8000/api/classify', json={
"narrative": "Funcionários receberam emails suspeitos solicitando credenciais",
"top_k": 3,
"use_llm": true
})
# Resultado esperado: T1566 (Phishing)response = requests.post('http://localhost:8000/api/classify', json={
"narrative": "Detectado movimento lateral usando credenciais comprometidas",
"top_k": 5
})
# Resultado esperado: T1021 (Remote Services), T1078 (Valid Accounts)- Processamento Local: Todos os dados são processados localmente
- Sem telemetria: Nenhum dado é enviado para serviços externos
- CORS configurado: Controle de acesso cross-origin
- Validação de entrada: Sanitização via Pydantic schemas
Este projeto está licenciado sob a MIT License. Veja o arquivo LICENSE para detalhes.
- MITRE Corporation: Framework ATT&CK e dados oficiais
- Hugging Face: Modelos de embeddings e transformers
- Meta: Modelo Llama 3.2
- Junta.ai: Desenvolvimento e implementação
Desenvolvido com ❤️ pela equipe Junta.ai
