Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
bandjacks — Modelagem Mundial de Defesa contra Ameaças Cibernéticas | Kitploit
Ferramentas/GitHubGitHub/blevene/bandjacks
OSINT (Inteligência de Fontes Abertas)ReconhecimentoFeeds e Agregadores de AmeaçasAnálise de VulnerabilidadesColeta de InformaçõesInteligência de AmeaçasAprendizado de MáquinaAprendizado e EducaçãoRecursos CuradosAnálise de Logs
GitHubblevene/bandjacks
254há 3 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

bandjacks

Modelagem Mundial de Defesa contra Ameaças Cibernéticas

Ver Repositório

Bandjacks

Sistema de Modelagem Mundial de Defesa contra Ameaças Cibernéticas

Visão Geral

Bandjacks é um sistema abrangente de inteligência de ameaças cibernéticas (CTI) que:

  • Extrai técnicas MITRE ATT&CK de relatórios de ameaças em 12 a 40 segundos
  • Constrói um grafo de conhecimento de atores de ameaças, técnicas e defesas
  • Gera pacotes compatíveis com STIX 2.1 com rastreamento completo de proveniência
  • Integra a ontologia D3FEND para recomendações defensivas
  • Fornece recursos de busca vetorial e análise de grafos
  • Calcula análises de co-ocorrência para identificar padrões de técnicas
  • Apresenta extração 94% mais rápida que versões anteriores com caching de respostas LLM
  • Inclui um frontend Next.js para revisão de relatórios e visualização de análises

📚 Documentação

GuiaDescrição
Início RápidoComece a usar em 5 minutos
Configuração CompletaConfiguração completa do ambiente
Uso da CLIGuia da interface de linha de comando
Referência da APIDocumentação da API REST
Análises de Co-ocorrênciaDocumentação de análises
Geração de AttackFlowGuia de geração de fluxos
Sistema de RevisãoRevisão com supervisão humana

Destaques da Arquitetura

TechniqueCache

  • Cache em memória de todas as técnicas MITRE ATT&CK carregadas na inicialização
  • Consultas O(1) por external_id (ex.: T1557) para resolução instantânea de nomes
  • 1376 técnicas armazenadas em cache com metadados completos (nome, descrição, táticas, plataformas)
  • Nomenclatura consistente garante que a interface de revisão sempre mostre nomes de técnicas legíveis por humanos

ActorCache

  • Cache em memória de todos os conjuntos de intrusão e atores de ameaças
  • Consultas rápidas para resolução de nomes de atores e pesquisa
  • Suporta correspondência de alias e pesquisa difusa

Início Rápido

Pré-requisitos

  • Python 3.11+
  • Neo4j 5.x (banco de dados de grafo)
  • OpenSearch 2.x (armazenamento vetorial)
  • Redis (opcional, para cache)
  • Node.js 18+ (para frontend)
  • Acesso LLM: chaves de API em nuvem (Gemini ou OpenAI) ou um servidor local compatível com OpenAI

Instalação```bash

Clone the repository

git clone https://github.com/yourusername/bandjacks.git cd bandjacks

Install Python dependencies with uv (recommended)

uv sync

Or with pip

pip install -e .

Install frontend dependencies

cd ui && npm install && cd ..

root@kitploit:~
### Configuração do Ambiente

**IMPORTANTE:** Você deve configurar as variáveis de ambiente antes de iniciar a aplicação. A aplicação requer que `NEO4J_PASSWORD` seja definida.

Crie um arquivo `.env` na raiz do projeto:```bash
# Copy the sample file
cp infra/env.sample .env

# Edit .env and set your actual passwords
nano .env

Configuração necessária no .env:```bash

Neo4j Configuration (REQUIRED)

NEO4J_URI=bolt://localhost:7687 NEO4J_USER=neo4j NEO4J_PASSWORD=your-actual-neo4j-password # MUST BE SET - no default provided

OpenSearch Configuration

OPENSEARCH_URL=http://localhost:9200 OPENSEARCH_USER=admin OPENSEARCH_PASSWORD=your-opensearch-password # Optional if security is disabled

LLM Configuration — pick ONE of the options below:

Option A: Local OpenAI-compatible API (vLLM, llama.cpp, Ollama, LocalAI, LM Studio, etc.)

LOCAL_LLM_API_BASE=http://192.168.1.100:8080/v1 # Base URL of your local server LOCAL_LLM_MODEL=mistral-nemo # Model name as the server reports it LOCAL_LLM_API_KEY=no-key # Most local servers accept any value

Option B: Cloud LLM providers

PRIMARY_LLM=gemini GOOGLE_API_KEY=your-gemini-api-key

Optional: OpenAI as fallback (or primary if PRIMARY_LLM=openai)

OPENAI_API_KEY=your-openai-api-key

ATT&CK Configuration

ATTACK_INDEX_URL=https://raw.githubusercontent.com/mitre-attack/attack-stix-data/master/index.json ATTACK_COLLECTION=enterprise-attack ATTACK_VERSION=latest

Redis (optional, for caching)

REDIS_URL=redis://localhost:6379

root@kitploit:~
**Nota:** O aplicativo falhará ao iniciar se `NEO4J_PASSWORD` não estiver definida. Consulte [Correção de Variáveis de Ambiente](https://github.com/blevene/bandjacks/blob/HEAD/ENV_VARIABLES_FIX.md) para mais detalhes.

### Iniciando os Serviços```bash
# Start the FastAPI backend server
uv run uvicorn bandjacks.services.api.main:app --reload --port 8000

# In another terminal, start the Next.js frontend
cd ui && npm run dev

# Access the applications
open http://localhost:8000/docs    # API documentation
open http://localhost:3000         # Frontend UI

Interface de Linha de Comando (CLI)

Bandjacks inclui uma CLI abrangente para operações de inteligência de ameaças:```bash

Show all available commands

uv run python -m bandjacks.cli.main --help

root@kitploit:~
> **Nota:** A CLI requer que variáveis de ambiente sejam definidas (NEO4J_PASSWORD, etc.). Execute a partir da raiz do projeto onde o `.env` está localizado.

### Comandos de Consulta```bash
# Search for threat intelligence
uv run python -m bandjacks.cli.main query search "ransomware encryption techniques" --top-k 10

# Explore graph relationships
uv run python -m bandjacks.cli.main query graph "attack-pattern--abc123" --depth 2

Gerenciamento de Fila de Revisão```bash

Show review queue

uv run python -m bandjacks.cli.main review queue --status pending --limit 20

Approve a candidate

uv run python -m bandjacks.cli.main review approve "candidate-123" --reviewer analyst-1

Reject with reason

uv run python -m bandjacks.cli.main review reject "candidate-456" --reviewer analyst-1 --reason "False positive"

root@kitploit:~
### Extração de Documentos```bash
# Extract CTI from a document
uv run python -m bandjacks.cli.main extract document ./report.pdf --confidence-threshold 80 --show-evidence

Comandos de Análise

Nota: Comandos de análise requerem dados AttackEpisode no Neo4j para retornar resultados.```bash

Show top co-occurring technique pairs

uv run python -m bandjacks.cli.main analytics top-cooccurrence --limit 25 --min-episode-size 2

Compute conditional co-occurrence P(B|A) for a technique

uv run python -m bandjacks.cli.main analytics conditional "attack-pattern--abc123" --limit 25

Analyze a specific threat actor

uv run python -m bandjacks.cli.main analytics actor "intrusion-set--xyz789" --metric npmi

Extract technique bundles

uv run python -m bandjacks.cli.main analytics bundles --min-support 3 --min-size 3 --max-size 5 --format json --output bundles.json

Global co-occurrence metrics

uv run python -m bandjacks.cli.main analytics global --min-support 2 --limit 50 --format csv --output pairs.csv

root@kitploit:~
### Comandos de Fluxo de Trabalho```bash
# Process a directory of reports with analytics
uv run python -m bandjacks.cli.main workflow process-reports ./reports/ --workers 3 --analyze --export-dir ./results/

# Bulk export all analytics data
uv run python -m bandjacks.cli.main workflow bulk-export --export-dir ./analytics_export/

Comandos de Administrador```bash

Check system health

uv run python -m bandjacks.cli.main admin health

View cache statistics

uv run python -m bandjacks.cli.main admin cache-stats

Clear cache

uv run python -m bandjacks.cli.main admin cache-clear --pattern "search:*"

Optimize database

uv run python -m bandjacks.cli.main admin optimize

root@kitploit:~
## Interface do Frontend

O frontend Next.js fornece uma interface moderna para trabalhar com o sistema.

### Gerenciamento de Relatórios (`/reports`)
- **Lista de Relatórios**: Visualizar todos os relatórios ingeridos com status e contagens de técnicas
- **Novo Relatório** (`/reports/new`): Carregar arquivos PDF/TXT ou colar conteúdo do relatório
- **Detalhe do Relatório** (`/reports/[id]`): Visualizar técnicas, entidades e evidências extraídas
- **Interface de Revisão** (`/reports/[id]/review`): Fluxo de revisão com humano no loop

### Análise de Coocorrência (`/analytics/cooccurrence`)

> **Nota:** Estas páginas requerem dados `AttackEpisode` no Neo4j. Processe os relatórios pelo pipeline de extração primeiro, ou use `POST /v1/flows/build` para gerar episódios a partir de dados de conjuntos de intrusão.

- **Página Central**: Visão geral com contagens de episódios/técnicas/atores
- **Pares Principais** (`/pairs`): Pares de técnicas coocorrentes com métricas NPMI/Lift
- **Condicional** (`/conditional`): Probabilidades condicionais P(B|A)
- **Pacotes** (`/bundles`): Pacotes de técnicas frequentemente coocorrentes
- **Atores** (`/actors`): Padrões de técnicas específicas de atores
- **Pontes** (`/bridging`): Técnicas usadas em múltiplos atores

### Saúde do Sistema (`/health`)
- Status de saúde em tempo real de todos os componentes (Neo4j, OpenSearch, Redis)
- Estatísticas de cache e uso de memória
- Endpoints de saúde compatíveis com Kubernetes

### Iniciando o Frontend```bash
cd ui
npm run dev     # Development mode with hot reload
npm run build   # Production build
npm run start   # Start production server

# Ensure backend is running
# API_URL defaults to http://localhost:8000/v1

Guia de Uso

1. Carregando Dados do MITRE ATT&CK

Primeiro, carregue o framework MITRE ATT&CK em seu grafo de conhecimento:```bash

Load the latest enterprise ATT&CK release

curl -X POST "http://localhost:8000/v1/stix/load/attack"
-H "Content-Type: application/json"
-d '{ "collection": "enterprise-attack", "version": "latest", "adm_strict": false }'

root@kitploit:~
### 2. Extraindo Técnicas de Relatórios

Extraia técnicas do MITRE ATT&CK de relatórios de inteligência de ameaças:```python
import httpx
import time

# For small reports (<5KB) - synchronous processing
response = httpx.post(
    "http://localhost:8000/v1/reports/ingest",
    json={
        "content": "APT29 used spearphishing emails with malicious attachments...",
        "title": "APT29 Campaign Analysis",
        "config": {
            "use_optimized_extractor": True,
            "span_score_threshold": 0.7,
            "top_k": 5
        }
    }
)

result = response.json()
print(f"Extracted {len(result['extraction']['techniques'])} techniques")

# For large reports (>5KB) - asynchronous processing
response = httpx.post(
    "http://localhost:8000/v1/reports/ingest_async",
    json={
        "content": large_report_text,
        "title": "Large Report Analysis"
    }
)

job_id = response.json()["job_id"]

# Check job status
status = httpx.get(f"http://localhost:8000/v1/reports/jobs/{job_id}/status")
while status.json()["status"] == "processing":
    time.sleep(2)
    status = httpx.get(f"http://localhost:8000/v1/reports/jobs/{job_id}/status")

# Get results from completed job
result = status.json()["result"]
print(f"Extracted {result['techniques_count']} techniques in {result['elapsed_time']} seconds")

3. Uso Direto do Python

Para acesso programático sem a API:```python from bandjacks.llm.extraction_pipeline import run_extraction_pipeline

Configure extraction

config = { "use_optimized_extractor": True, # Use optimized pipeline "span_score_threshold": 0.7, # Minimum span confidence "max_spans": 20, "top_k": 5, "chunk_size": 2000, # For large documents "max_chunks": 100 }

Run extraction pipeline

result = run_extraction_pipeline( report_text, config, source_id="report_123", neo4j_config=neo4j_config )

Access results

techniques = result["techniques"] # Dict of technique_id -> details bundle = result.get("bundle") # STIX 2.1 bundle if configured entities = result.get("entities") # Extracted entities

Example: Print extracted techniques

for tech_id, info in techniques.items(): print(f"{tech_id}: {info['name']}") print(f" Confidence: {info['confidence']}%") print(f" Evidence: {info['evidence']}")

root@kitploit:~
## Arquitetura do Pipeline de Extração

O pipeline de extração do Bandjacks utiliza uma arquitetura multiagente para extrair inteligência de ameaças estruturada:

### Componentes do Pipeline

O pipeline de extração usa 9 agentes especializados em sequência:

#### 1. **EntityExtractionAgent** - Reconhecimento de Entidades
- Extrai atores de ameaças, malwares, ferramentas e campanhas
- Executa primeiro para fornecer contexto para a extração de técnicas
- Usa few-shot prompting com validação de esquema JSON
- Lida com documentos divididos em blocos com extração progressiva em janela

#### 2. **SpanFinderAgent** - Detecção de Texto Comportamental
- Detecta trechos de texto contendo comportamentos de ameaça usando 14 padrões de regex específicos por tática
- Identifica IDs de técnica explícitos (T1566.001) e padrões comportamentais
- Pontua trechos por confiança com indexação de palavras-chave
- Sem chamadas de LLM — pura correspondência de padrões para velocidade

#### 3. **BatchRetrieverAgent** - Recuperação de Candidatos
- Usa busca vetorial KNN do OpenSearch para encontrar técnicas candidatas por trecho
- Desduplica textos de trechos idênticos antes da codificação para evitar embeddings redundantes
- Retorna top-k candidatos com pontuações de similaridade para cada trecho

#### 4. **Pre-filter** - Redução de Trechos
- Limita trechos a `max_spans_per_technique` (padrão 2) por técnica candidata
- Mantém os trechos com maior pontuação por candidato para preservar a qualidade da evidência
- Reduz chamadas de LLM do mapeador em ~46% com perda mínima de técnicas

#### 5. **DiscoveryAgent** - Descoberta por LLM (condicional)
- Acionado quando a confiança do recuperador é baixa (<0,7 média)
- Usa LLM para descobrir técnicas que a busca vetorial não encontrou
- Única chamada em lote para todos os trechos de baixa confiança

#### 6. **BatchMapperAgent** - Mapeamento de Técnicas (LLM)
- Processa trechos em lotes de até 10 (`MAX_MAPPER_BATCH_SIZE`, padrão reduzido de 25 em 2026-05 para limitar truncamento em LLMs em nuvem)
- Extrai TODAS as técnicas relevantes por trecho com pontuações de confiança
- Usa validação de esquema JSON para saída estruturada

#### 7. **EvidenceVerifierAgent** - Validação de Evidências
- Verificação baseada em padrões de citações e referências de linhas
- Pontua a qualidade da evidência em uma escala de 40 a 100 pontos
- Sem chamadas de LLM — regex e correspondência de texto

#### 8. **ConsolidatorAgent** - Consolidação de Evidências
- Mescla técnicas duplicadas encontradas em vários trechos
- Agrega evidências usando similaridade de Jaccard (limiar >85%)
- Produz lista final de técnicas com pontuações de confiança consolidadas

#### 9. **AttackFlowSynthesizer** - Geração de Sequência (LLM)
- Analisa marcadores temporais ("primeiro", "depois", "então")
- Infere relações causais a partir da narrativa
- Cria objetos STIX Attack Flow com arestas probabilísticas
- Recorre a modelagem de co-ocorrência quando a sequência não é clara

### Otimizações de Desempenho

- **Blocos Inteligentes**: Documentos divididos em blocos de 2KB com sobreposição
- **Processamento em Lote**: Mapeador processa até 25 trechos por chamada de LLM
- **Processamento Paralelo**: Blocos processados simultaneamente em threads de trabalho
- **Cache de Respostas**: Respostas de LLM armazenadas em cache para evitar chamadas duplicadas
- **Término Antecipado**: Extrações de alta confiança pulam verificação
- **TechniqueCache**: Todas as técnicas ATT&CK carregadas na inicialização para consultas O(1)
- **Pre-filter**: Limita trechos por técnica candidata antes do mapeador LLM (46% menos chamadas)
- **Embedding em Lote**: Embeddings de técnicas gerados em lotes (2-5x mais rápido)
- **Pool de Conexões**: Conexões Neo4j/OpenSearch compartilhadas entre requisições
- **Lotes UNWIND**: Escritas Neo4j agrupadas via UNWIND (30-40 consultas → 6-7)
- **Pré-aquecimento do Modelo**: Modelo de embedding carregado na inicialização para evitar latência de cold-start

### Tempos de Processamento

| Tamanho do Documento | Tempo de Processamento | Técnicas Extraídas |
|----------------------|------------------------|---------------------|
| Pequeno (<5KB)       | 10-20 segundos         | 5-10 técnicas       |
| Médio (5-15KB)       | 20-40 segundos         | 10-15 técnicas      |
| Grande (>15KB)       | 30-60 segundos         | 15-25 técnicas      |

## Análise de Co-ocorrência

Bandjacks fornece análises para entender relacionamentos entre técnicas. 

> **Nota:** As análises requerem dados de `AttackEpisode` e `AttackAction` no Neo4j. Estes são criados quando:
> - Relatórios são processados pelo pipeline de extração
> - Fluxos de ataque são construídos via `/v1/flows/build`
> - Pacotes STIX com episódios de ataque são ingeridos
>
> Se nenhum episódio existir, as análises retornarão resultados vazios.

### Co-ocorrência Global

Calcular quais técnicas frequentemente aparecem juntas em todos os episódios de ataque:```python
# Via API
response = httpx.post(
    "http://localhost:8000/v1/analytics/cooccurrence/global",
    json={"min_support": 2, "min_episodes_per_pair": 2, "limit": 50}
)

for pair in response.json()["pairs"]:
    print(f"{pair['name_a']} + {pair['name_b']}: NPMI={pair['npmi']:.3f}")

Probabilidade Condicional

Calcular P(B|A) - dado que a técnica A foi usada, qual é a probabilidade da técnica B:```python response = httpx.get( "http://localhost:8000/v1/analytics/cooccurrence/conditional", params={"technique_id": "attack-pattern--abc123", "limit": 25} )

root@kitploit:~
### Pacotes de Técnicas

Identifique pacotes de técnicas que co-ocorrem frequentemente (3-5 técnicas):```python
response = httpx.post(
    "http://localhost:8000/v1/analytics/cooccurrence/bundles",
    json={"min_support": 3, "min_size": 3, "max_size": 5}
)

Análise Específica de Atores

Analise padrões de técnicas para atores de ameaça específicos:```python response = httpx.post( "http://localhost:8000/v1/analytics/cooccurrence/actor", json={"intrusion_set_id": "intrusion-set--xyz789", "min_support": 1} )

root@kitploit:~
## Sistema de Revisão Humano-no-Loop

O Bandjacks inclui um sistema abrangente de revisão para validar a inteligência extraída:

### Interface de Revisão Unificada

O sistema de revisão apresenta todos os itens extraídos em uma única interface:```typescript
// Review workflow
1. Upload/ingest report → Extraction pipeline runs
2. Navigate to /reports/{id}/review
3. Review extracted items across three tabs:
   - Entities (threat actors, malware, tools)
   - Techniques (ATT&CK mappings with evidence)
   - Attack Flow (sequenced steps)
4. Take actions on each item:
   - Approve: Accept as correct
   - Reject: Mark as incorrect
   - Edit: Modify details (name, confidence, etc.)
5. Submit all decisions atomically

Recursos de Revisão

  • Links de Evidência: Links diretos para o texto fonte com números de linha
  • Ajuste de Confiança: Modificar pontuações de confiança com base no conhecimento do analista
  • Operações em Lote: Selecionar múltiplos itens para aprovação/rejeição em lote
  • Atalhos de Teclado: A (aprovar), R (rejeitar), E (editar), Espaço (próximo)
  • Acompanhamento de Progresso: Indicadores visuais de conclusão da revisão
  • Filtragem: Filtrar por tipo, nível de confiança ou status

Integração com API```python

Submit review decisions

response = httpx.post( f"http://localhost:8000/v1/reports/{report_id}/unified-review", json={ "decisions": [ { "item_id": "technique-0", "action": "approve", "confidence_adjustment": 5, "notes": "Confirmed via external CTI" }, { "item_id": "entity-malware-1", "action": "edit", "edited_value": { "name": "Corrected Malware Name", "confidence": 95 } } ], "global_notes": "Review completed by analyst-1" } )

Review creates:

- Approved entities as Neo4j nodes

- Technique-to-report relationships

- Audit trail of decisions

root@kitploit:~
### 4. Procurando por Técnicas

Procure por técnicas ATT&CK usando linguagem natural:```python
# Vector search for similar techniques
response = httpx.post(
    "http://localhost:8000/v1/search/ttx",
    json={
        "query": "ransomware that encrypts files and demands payment",
        "top_k": 5
    }
)

techniques = response.json()["results"]
for tech in techniques:
    print(f"{tech['external_id']}: {tech['name']} (score: {tech['score']:.2f})")

5. Consultas ao Grafo

Consulte o grafo de conhecimento para relações:```python

Get all techniques used by a specific group

response = httpx.get( "http://localhost:8000/v1/graph/group/G0016/techniques" )

Get defensive techniques for an attack

response = httpx.get( "http://localhost:8000/v1/defense/technique/T1566.001" )

root@kitploit:~
### 6. Gerando Modelos de AttackFlow

Crie modelos de co-ocorrência que mostram como agentes de ameaças utilizam técnicas em conjunto:```python
# Generate flow for a specific intrusion set (e.g., APT29)
response = httpx.post(
    "http://localhost:8000/v1/flows/build",
    json={
        "intrusion_set_id": "intrusion-set--899ce53f-13a0-479b-a0e4-67d46e241542"
    }
)

flow = response.json()
print(f"Generated flow '{flow['name']}' with {len(flow['steps'])} techniques")
print(f"Co-occurrence edges: {len(flow['edges'])}")

Geração em Massa: Gere fluxos para todos os atores de ameaça com técnicas:```bash

Run the bulk generation script

uv run python scripts/build_intrusion_flows_simple.py

Monitor progress - creates flows for 165+ intrusion sets

Handles rate limiting automatically

Skips existing flows to avoid duplicates

root@kitploit:~
AttackFlow models utilizam **co-ocorrência** em vez de ordenação sequencial, já que conjuntos de intrusão não possuem informações de sequência inerentes. As técnicas são conectadas por:
- **Arestas intra-tática**: Entre técnicas na mesma tática da kill chain
- **Arestas entre táticas**: Entre técnicas através de táticas adjacentes
- **Padrões hub-and-spoke**: Para grandes conjuntos de técnicas, evitando explosão de arestas

Consulte o [Guia de Geração de AttackFlow](https://github.com/blevene/bandjacks/blob/HEAD/docs/ATTACKFLOW_GENERATION.md) para uso detalhado.

## Formatos de Entrada Suportados

O pipeline de extração suporta múltiplos formatos de entrada:

- **Texto Simples** - Conteúdo textual direto
- **Markdown** - Documentos markdown formatados
- **PDF** - Via extração com pdfplumber
- **HTML** - Via análise com BeautifulSoup
- **JSON** - Extração de dados estruturados

### Extrair de Texto Simples```python
# Direct text extraction
plaintext_report = """
The threat actors used spearphishing emails with malicious attachments.
After gaining access, they deployed Mimikatz to harvest credentials and
used RDP for lateral movement across the network.
"""

result = asyncio.run(run_agentic_v2_async(plaintext_report, {
    "cache_llm_responses": True,
    "single_pass_threshold": 500
}))

Extrato de Markdown```python

Markdown document extraction

markdown_report = """

APT Campaign Analysis

Attack Methods

  • Initial Access: Spearphishing with malicious Office documents
  • Execution: PowerShell scripts and scheduled tasks
  • Persistence: Registry modifications and service installation

Tools Used

ToolPurpose
MimikatzCredential dumping
PsExecRemote execution
Cobalt StrikeC2 communications
"""

result = run_extraction_pipeline(markdown_report, { "use_optimized_extractor": True, "span_score_threshold": 0.7 }, source_id="markdown_report")

root@kitploit:~
### Extrato do PDF```python
import pdfplumber
from bandjacks.llm.extraction_pipeline import run_extraction_pipeline

# Read PDF with pdfplumber (recommended)
with pdfplumber.open("threat_report.pdf") as pdf:
    text = ""
    for page in pdf.pages:
        page_text = page.extract_text()
        if page_text:
            text += page_text + "\n"

# Extract techniques using extraction pipeline
result = run_extraction_pipeline(text, {
    "use_optimized_extractor": True,
    "span_score_threshold": 0.7,
    "chunk_size": 2000
}, source_id="threat_report")

print(f"Found {len(result['techniques'])} techniques")

Relatórios de Processamento em Lote```python

from pathlib import Path import json

reports_dir = Path("./reports") results = []

for pdf_file in reports_dir.glob("*.pdf"): # Extract text and techniques # ... (see above)

root@kitploit:~
results.append({
    "file": pdf_file.name,
    "techniques": list(result["techniques"].keys()),
    "count": len(result["techniques"])
})

Save summary

with open("extraction_summary.json", "w") as f: json.dump(results, f, indent=2)

root@kitploit:~
### Construindo Fluxos de Ataque```python
# Generate attack flow from extracted techniques
response = httpx.post(
    "http://localhost:8000/v1/flows/build",
    json={
        "source_id": "report-123",
        "technique_ids": ["T1566.001", "T1059.001", "T1003.001"]
    }
)

flow = response.json()
print(f"Generated flow with {len(flow['steps'])} steps")

Testes

Execute o conjunto de testes para verificar sua instalação:```bash

Run all tests

uv run pytest

Test extraction pipeline

python tests/test_optimized_extraction.py

Test graph integration

python tests/test_graph_upsert.py

Test STIX validation

python tests/test_bundle_validation.py

Run frontend tests

cd ui && npm test

root@kitploit:~
## Endpoints da API

### Endpoints Principais

- `POST /v1/stix/load/attack` - Carregar dados MITRE ATT&CK
- `POST /v1/reports/ingest` - Ingestão síncrona de relatórios (<5KB)
- `POST /v1/reports/ingest_async` - Ingestão assíncrona de relatórios (>5KB)
- `POST /v1/reports/ingest/upload` - Enviar arquivos PDF/TXT
- `GET /v1/reports/jobs/{id}/status` - Verificar status do job
- `POST /v1/reports/{id}/unified-review` - Enviar decisões de revisão
- `POST /v1/search/ttx` - Pesquisar por técnicas
- `GET /v1/graph/technique/{id}` - Obter detalhes da técnica

### Fluxos de Ataque

- `POST /v1/flows/build` - Gerar modelos de coocorrência AttackFlow
- `GET /v1/flows/{flow_id}` - Recuperar detalhes específicos do AttackFlow
- `POST /v1/flows/search` - Pesquisar por fluxos de ataque semelhantes
- `GET /v1/flows/dump` - Exportar fluxos em massa com paginação e filtragem

### Análises

- `GET /v1/analytics/cooccurrence/global` - Métricas globais de coocorrência
- `GET /v1/analytics/cooccurrence/conditional` - Probabilidades condicionais
- `GET /v1/analytics/cooccurrence/bundles` - Pacotes de técnicas
- `GET /v1/analytics/cooccurrence/actor` - Padrões específicos de atores
- `GET /v1/coverage/gaps` - Lacunas de cobertura de técnicas

### Defesa e Detecção

- `GET /v1/defense/technique/{id}` - Obter recomendações defensivas
- `GET /v1/detections/technique/{id}` - Estratégias de detecção
- `POST /v1/sigma/validate` - Validar regras Sigma

### Monitoramento

- `GET /health` - Verificação básica de saúde
- `GET /health/live` - Sonda de vivacidade Kubernetes
- `GET /health/ready` - Sonda de prontidão Kubernetes
- `GET /health/components/{component}` - Saúde de componente individual
- `GET /v1/costs/stats` - Rastreamento de custos LLM (agregado diário por modelo)
- `GET /v1/cache/stats` - Obter estatísticas de cache LLM
- `POST /v1/cache/clear` - Limpar cache LLM
- `GET /v1/compliance/report` - Métricas de conformidade
- `GET /v1/drift/status` - Status de detecção de deriva
- `GET /v1/ml-metrics/performance` - Métricas do modelo ML

### Atores e Procedência

- `GET /v1/actors` - Listar atores de ameaça
- `GET /v1/actors/{id}` - Obter detalhes do ator
- `GET /v1/provenance/{object_id}` - Procedência do objeto
- `GET /v1/provenance/{object_id}/lineage` - Cadeia de linhagem completa
- `GET /v1/provenance/{object_id}/evidence` - Trechos de evidência

### Recursos Apenas da API (Sem UI/CLI)

Estes endpoints são totalmente funcionais, mas são acessados apenas via REST API (sem páginas frontend ou comandos CLI):

#### Simulação de Caminhos de Ataque
- `POST /v1/simulation/paths` - Simular caminhos de ataque a partir de técnica/grupo inicial
- `POST /v1/simulation/predict` - Prever técnicas prováveis seguintes dado o estado atual
- `POST /v1/simulation/whatif` - Análise de cenário hipotético para situações defensivas
- `POST /v1/simulation/scenario` - Simular a partir de conjuntos de grupos/software/técnicas
- `GET /v1/simulation/statistics/{technique_id}` - Estatísticas de uso da técnica
- `GET /v1/simulation/groups/{group_id}/patterns` - Padrões de ataque do grupo
- `POST /v1/simulation/compare` - Comparar múltiplos caminhos de ataque

#### Política MDP e Implantação
- `POST /v1/simulate/rollout` - Simulação de implantação PTG
- `POST /v1/simulate/mdp` - Calcular política de defesa ótima MDP
- `GET /v1/simulate/models` - Listar modelos PTG disponíveis

#### Detecção e Monitoramento de Deriva
- `GET /v1/drift/status` - Status atual de deriva em todas as métricas
- `POST /v1/drift/analyze` - Executar análise de deriva com limites personalizados
- `GET /v1/drift/alerts` - Obter alertas de deriva ativos
- `POST /v1/drift/alerts/{alert_id}/acknowledge` - Reconhecer alerta
- `GET /v1/drift/metrics/{metric_name}` - Obter métrica de deriva específica

#### Rastreamento de Métricas ML
- `POST /v1/ml-metrics/prediction` - Registrar previsão do modelo para rastreamento
- `POST /v1/ml-metrics/review` - Registrar métricas de decisão de revisão
- `POST /v1/ml-metrics/coverage-gap` - Registrar lacuna de cobertura
- `GET /v1/ml-metrics/performance` - Obter métricas de desempenho do modelo
- `GET /v1/ml-metrics/dashboard` - Exportar métricas do painel

#### Notificações
- `GET /v1/notifications/history` - Obter histórico de notificações
- `POST /v1/notifications/clear-history` - Limpar histórico de notificações
- `GET /v1/notifications/config` - Obter configuração de notificações
- `POST /v1/notifications/test` - Enviar notificação de teste

#### Gerenciamento de Atualização de Vetores
- `GET /v1/vectors/status` - Status do sistema de atualização de vetores
- `GET /v1/vectors/metrics` - Métricas detalhadas de atualização de vetores
- `POST /v1/vectors/update` - Acionar manualmente atualização de vetores
- `POST /v1/vectors/process-batch` - Forçar processamento em lote
- `DELETE /v1/vectors/queue` - Limpar fila de atualização pendente
- `GET /v1/vectors/health` - Verificação de saúde do sistema de vetores

#### Lista de Ignorar Entidades
- `GET /v1/ignorelist` - Obter status atual da lista de ignorar
- `POST /v1/ignorelist/add` - Adicionar entidade à lista de ignorar
- `DELETE /v1/ignorelist/remove` - Remover entidade da lista de ignorar
- `POST /v1/ignorelist/reload` - Recarregar lista de ignorar do disco

#### Revisão de Padrões Candidatos
- `GET /v1/review/candidates` - Listar padrões de ataque candidatos
- `POST /v1/review/candidates` - Criar padrão candidato
- `GET /v1/review/candidates/{id}` - Obter detalhes do candidato
- `POST /v1/review/candidates/{id}/approve` - Aprovar candidato
- `POST /v1/review/candidates/{id}/reject` - Rejeitar candidato
- `GET /v1/review/candidates/{id}/similar` - Encontrar padrões semelhantes
- `GET /v1/review/candidates/stats/summary` - Estatísticas de candidatos

### Documentação Completa da API

Acesse a documentação completa da API em:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- OpenAPI JSON: http://localhost:8000/openapi.json

## Arquitetura

### Estrutura do Projeto```
bandjacks/
├── bandjacks/
│   ├── analysis/         # Graph analysis & interdiction
│   │   ├── graph_analyzer.py
│   │   └── interdiction.py
│   ├── analytics/        # Co-occurrence & clustering
│   │   ├── clustering.py
│   │   ├── cooccurrence.py
│   │   └── detection_bundles.py
│   ├── cli/              # Command-line interface
│   │   ├── main.py       # CLI entry point
│   │   ├── batch_extract.py
│   │   ├── formatters.py
│   │   └── workflows.py
│   ├── config/           # Configuration files
│   │   └── entity_ignorelist.yaml
│   ├── core/             # Core utilities
│   │   ├── cache.py      # Redis caching
│   │   ├── connection_pool.py
│   │   └── query_optimizer.py
│   ├── llm/              # Extraction pipeline
│   │   ├── extraction_pipeline.py
│   │   ├── agents_v2.py  # Core extraction agents
│   │   ├── chunked_extractor.py
│   │   ├── optimized_chunked_extractor.py
│   │   ├── entity_extractor.py
│   │   ├── flow_builder.py
│   │   ├── cache.py      # LLM response caching
│   │   └── experimental/ # Experimental features
│   ├── loaders/          # Data loading & indexing
│   │   ├── attack_catalog.py
│   │   ├── attack_upsert.py
│   │   ├── opensearch_index.py
│   │   ├── hybrid_search.py
│   │   └── sigma_loader.py
│   ├── monitoring/       # Metrics & monitoring
│   │   ├── compliance_metrics.py
│   │   ├── defense_metrics.py
│   │   ├── drift_detector.py
│   │   └── ml_metrics.py
│   ├── services/         # API & services
│   │   ├── api/          # FastAPI application
│   │   │   ├── main.py
│   │   │   ├── routes/   # API route handlers
│   │   │   └── middleware/
│   │   ├── technique_cache.py
│   │   └── actor_cache.py
│   ├── simulation/       # Attack simulation
│   │   ├── attack_simulator.py
│   │   ├── mdp_solver.py
│   │   └── ptg_rollout.py
│   └── store/            # Data stores
│       ├── report_store.py
│       ├── candidate_store.py
│       └── review_store.py
├── ui/                   # Next.js frontend
│   ├── app/              # App Router pages
│   │   ├── reports/      # Report management
│   │   ├── analytics/    # Analytics dashboards
│   │   └── health/       # Health monitoring
│   ├── components/       # React components
│   └── hooks/            # Custom React hooks
├── tests/                # Test suite
├── samples/              # Sample reports
├── scripts/              # Utility scripts
└── docs/                 # Documentation

Componentes

  1. Pipeline de Extração (bandjacks/llm/)

    • extraction_pipeline.py - Orquestrador principal de extração
    • chunked_extractor.py - Processamento padrão em partes
    • optimized_chunked_extractor.py - Processamento otimizado avançado
    • agents_v2.py - Agentes principais de extração (SpanFinder, Mapper, Consolidator)
    • entity_extractor.py - Agente de reconhecimento de entidades
    • flow_builder.py - Geração de fluxo de ataque
    • memory.py - Memória de trabalho compartilhada
    • cache.py - Cache de respostas LLM
  2. Camada de Dados (bandjacks/loaders/)

    • Grafo de propriedades Neo4j para relacionamentos
    • OpenSearch para embeddings vetoriais
    • Modelo de dados STIX 2.1
  3. Camada de API (bandjacks/services/api/)

Desempenho

  • Velocidade de Extração: 12-40 segundos por relatório (94% mais rápido que v1)
  • Documentos Pequenos: 4-8 segundos com extração de passagem única
  • Taxa de Acertos no Cache: 87,5% de aceleração em extrações repetidas
  • Busca: <300ms para busca por similaridade vetorial
  • Consultas ao Grafo: <100ms para a maioria das travessias

Configuração

Seleção de Modelo

O sistema suporta LLMs em nuvem e qualquer API local compatível com OpenAI:```bash

In your .env file

--- Option A: Local inference (highest priority when set) ---

Works with vLLM, llama.cpp (server), Ollama, LocalAI, LM Studio,

text-generation-webui, or any server that exposes an /v1/chat/completions endpoint.

LOCAL_LLM_API_BASE=http://192.168.1.100:8080/v1 LOCAL_LLM_MODEL=mistral-nemo LOCAL_LLM_API_KEY=no-key # optional — most local servers don't require a key

--- Option B: Cloud providers ---

PRIMARY_LLM=gemini # "gemini" (default) or "openai" GOOGLE_API_KEY=your-key # Gemini OPENAI_API_KEY=your-key # OpenAI (used as fallback when Gemini is primary)

root@kitploit:~
**Prioridade do provedor:** API Local > Gemini > OpenAI > Proxy LiteLLM.
Quando um servidor local está configurado, provedores em nuvem são automaticamente adicionados como alternativas de fallback.

#### Exemplos comuns de servidores locais

| Servidor | `LOCAL_LLM_API_BASE` | `LOCAL_LLM_MODEL` |
|--------|---------------------|-------------------|
| vLLM | `http://host:8000/v1` | `mistralai/Mistral-Nemo-Instruct-2407` |
| llama.cpp | `http://host:8080/v1` | `mistral-nemo` |
| Ollama | `http://host:11434/v1` | `mistral-nemo` |
| LM Studio | `http://host:1234/v1` | `mistral-nemo` |
| LocalAI | `http://host:8080/v1` | `mistral-nemo` |

### Configuração de Extração

O sistema utiliza um único pipeline assíncrono de alto desempenho com opções configuráveis:```python
{
    "cache_llm_responses": True,         # Enable LLM caching (default: True)
    "single_pass_threshold": 500,        # Max words for single-pass (default: 500)
    "early_termination_confidence": 90,  # Skip verification above this (default: 90)
    "disable_discovery": False,          # Disable LLM discovery agent
    "max_spans": 20,                     # Maximum spans to process
    "span_score_threshold": 0.7,         # Minimum span quality
    "top_k": 5,                          # Candidates per span

    # Cost optimization options
    "max_spans_per_technique": 2,        # Pre-filter: max spans per candidate technique (0=disable, default=2)
    "enable_span_dedup": False,          # Text-based span dedup before mapping (default=False)
}

Otimização de Custos

O pipeline de extração rastreia os custos de LLM via litellm.completion_cost() com métricas por relatório e um endpoint agregado diário.

Controles de custo:

Monitoramento:```bash

Daily cost aggregate by model

curl http://localhost:8000/v1/costs/stats

Per-report cost in extraction metrics

curl http://localhost:8000/v1/reports/{id} # -> extraction.metrics.cost_usd

root@kitploit:~
### Limiares de Confiança

Controle a qualidade da extração:```python
{
    "confidence_threshold": 50.0,  # Minimum confidence (0-100)
    "auto_ingest": True            # Auto-add high-confidence results
}

Monitoramento de Saúde

A API oferece endpoints abrangentes de monitoramento de saúde para supervisão operacional e implantações Kubernetes:

Endpoints de Saúde```bash

Basic health check (always returns 200 if API is running)

curl http://localhost:8000/health

Kubernetes liveness probe (process alive check)

curl http://localhost:8000/health/live

Kubernetes readiness probe (full dependency checks)

curl http://localhost:8000/health/ready

Individual component health

curl http://localhost:8000/health/components/neo4j curl http://localhost:8000/health/components/opensearch curl http://localhost:8000/health/components/redis curl http://localhost:8000/health/components/caches curl http://localhost:8000/health/components/system

root@kitploit:~
### Exemplo de Resposta de Saúde```json
{
  "status": "healthy",
  "timestamp": "2025-01-28T17:43:30.184036Z",
  "version": "1.0.0",
  "components": {
    "neo4j": {
      "status": "healthy",
      "latency_ms": 5
    },
    "opensearch": {
      "status": "degraded",
      "cluster_status": "yellow",
      "indices": {
        "attack_nodes": false,
        "bandjacks_reports": true
      }
    },
    "redis": {
      "status": "healthy",
      "latency_ms": 2,
      "memory_mb": 1.69
    },
    "caches": {
      "status": "healthy",
      "technique_cache": {
        "count": 993,
        "loaded": true
      },
      "actor_cache": {
        "count": 145,
        "loaded": true
      }
    },
    "system": {
      "status": "healthy",
      "memory": {
        "available_gb": 8.84,
        "percent_used": 72.4
      },
      "disk": {
        "available_gb": 353.11,
        "percent_used": 2.9
      },
      "cpu": {
        "percent_used": 7.7
      }
    }
  }
}

Níveis de Status

  • saudável: Componente totalmente operacional
  • degradado: Parcialmente funcional (ex.: faltando alguns índices, mas operacional)
  • não saudável: Componente falhou ou inacessível

Integração com Kubernetes

Para implantações no Kubernetes, configure as sondas da seguinte forma:```yaml livenessProbe: httpGet: path: /health/live port: 8000 initialDelaySeconds: 30 periodSeconds: 10

readinessProbe: httpGet: path: /health/ready port: 8000 initialDelaySeconds: 45 periodSeconds: 5

root@kitploit:~
## Otimização de Desempenho

### Cache

O sistema inclui cache automático de respostas LLM para melhor desempenho:```python
# Check cache statistics
response = httpx.get("http://localhost:8000/v1/cache/stats")
stats = response.json()
print(f"Cache hit rate: {stats['hit_rate']}")

# Clear cache if needed
httpx.post("http://localhost:8000/v1/cache/clear")

Perfis de Desempenho

Escolha um perfil baseado nas suas necessidades:```python

Fast extraction (4-15 seconds)

fast_config = { "single_pass_threshold": 1000, "max_spans": 5, "skip_verification": True, "top_k": 3 }

Balanced (default, 12-40 seconds)

balanced_config = { "single_pass_threshold": 500, "max_spans": 10, "early_termination_confidence": 90, "top_k": 5 }

High quality (40-120 seconds)

quality_config = { "single_pass_threshold": 200, "max_spans": 20, "disable_discovery": False, "min_quotes": 3, "top_k": 10 }

root@kitploit:~
## Segurança

### Validação de Entrada

- **Prevenção de Injeção Cypher**: Todos os endpoints de consulta a grafos validam os parâmetros `relationship_types` fornecidos pelo usuário contra uma lista de permissões de tipos de relacionamento conhecidos (USES, MITIGATES, HAS_TACTIC, etc.) mais um padrão regex estrito (`^[A-Z][A-Z0-9_]*$`). Entrada inválida retorna 400 antes da construção da consulta.
- **Validação de Esquema JSON**: Respostas do LLM validadas contra esquemas JSON para impedir que dados malformados entrem no pipeline.
- **Validação ADM**: Todo conteúdo STIX deve passar pela validação do Modelo de Dados ATT&CK antes da ingestão.

### Autenticação & Autorização

- **Autenticação JWT**: Middleware opcional para autenticação de API (`JWTAuthMiddleware`)
- **Limitação de Taxa**: Limitação de taxa por endpoint com limites configuráveis
- **CORS**: Compartilhamento de recursos de origem cruzada configurável

## Funcionalidades Avançadas

### Rastreamento de Proveniência

Cada entidade extraída inclui proveniência completa:```python
# Get provenance for an object
response = httpx.get(
    "http://localhost:8000/v1/provenance/attack-pattern--abc123"
)

Aprendizagem Ativa

O sistema inclui uma fila de revisão para melhorar a extração:```python

Get next item for review

response = httpx.get("http://localhost:8000/v1/review_queue/next")

Submit feedback

response = httpx.post( "http://localhost:8000/v1/feedback/extraction", json={ "extraction_id": "ext-123", "correct": True, "corrections": [] } )

root@kitploit:~
### Análise de Cobertura

Analise sua cobertura de inteligência de ameaças:```python
# Get coverage analysis
response = httpx.get("http://localhost:8000/v1/analytics/coverage")
coverage = response.json()

print(f"Summary: {coverage['summary']}")
for tactic in coverage['tactics']:
    print(f"  {tactic['tactic']}: {tactic['coverage_percentage']}%")

Nota: A cobertura de plataformas (_analyze_platforms_coverage) atualmente retorna dados placeholder. A cobertura de táticas e grupos utiliza consultas reais do Neo4j.

Simulação de Ataque (Experimental)

O módulo de simulação fornece previsão de caminho de ataque baseada em MDP:```python

Note: This feature is experimental and may require additional setup

from bandjacks.simulation.attack_simulator import AttackSimulator from bandjacks.simulation.mdp_solver import MDPSolver

See bandjacks/simulation/ for implementation details

root@kitploit:~
## Status das Funcionalidades

Esta secção fornece transparência sobre o estado de implementação de várias funcionalidades:

### Totalmente Funcional ✅
- **Pipeline de Extração de Relatórios** - A extração de técnicas baseada em LLM funciona de ponta a ponta
- **Carregamento MITRE ATT&CK** - Carregar dados ATT&CK empresariais/móveis/ICS no Neo4j
- **Pesquisa Vetorial** - Pesquisa semântica baseada em OpenSearch para técnicas
- **Sistema de Revisão** - Fluxo de trabalho de revisão com intervenção humana via API e UI
- **Monitorização de Saúde** - Verificações de saúde dos componentes e sondas Kubernetes
- **Comandos CLI de Consulta/Administração** - Pesquisa, travessia de grafos, gestão de cache
- **Geração de Fluxos de Ataque** - Construção de fluxos baseada em co-ocorrência para conjuntos de intrusão
- **Simulação de Ataque** - Simulação de caminhos baseada em MDP via `/simulation/*` e `/simulate/*`
- **Relatórios de Cobertura** - Relatórios JSON para perspetivas executiva, técnica, tática, operacional

### Funcional com Dependências de Dados ⚠️
- **Análise de Co-ocorrência** - Requer nós `AttackEpisode` do processamento de relatórios
- **Análise de Atores** - Requer episódios atribuídos a conjuntos de intrusão
- **Pacotes de Técnicas** - Requer dados suficientes de episódios para mineração de padrões
- **Comandos CLI de Análise** - Funcionam mas retornam vazios se não existirem episódios

### Apenas API (Sem UI/CLI) 🔌
Estas são funcionalidades totalmente implementadas acessíveis apenas via REST API:
- **Simulação de Caminhos de Ataque** - Rotas `/simulation/*` para previsão de caminhos e análise "what-if"
- **Resolvedor de Políticas MDP** - `/simulate/mdp` para cálculo de política de defesa ótima
- **Detecção de Deriva** - Rotas `/drift/*` para monitorização de deriva na qualidade dos dados
- **Métricas ML** - `/ml-metrics/*` para acompanhamento do desempenho do modelo ao longo do tempo
- **Gestão de Vetores** - `/vectors/*` para gestão de embeddings vetoriais
- **Lista de Ignorar Entidades** - `/ignorelist/*` para filtrar entidades de falsos positivos
- **Padrões Candidatos** - `/review/candidates/*` para candidatos a novas técnicas
- **Notificações** - `/notifications/*` para configuração e histórico de alertas
- **Proveniência** - `/provenance/*` para rastreamento de linhagem de extração
- **Conformidade** - `/compliance/*` para relatórios de métricas de conformidade

### Experimental (em `llm/experimental/`) 🧪
- **PTG (Grafo de Ameaças Probabilístico)** - Lógica central implementada, testes limitados
- **Integração Judge** - Validação de sequências baseada em LLM
- **Simulador de Fluxo de Ataque** - Motor de simulação baseado em fluxos
- **Extrator de Sequências** - Extrair sequências de fluxos

### Removido/Limpo 🗑️
As seguintes funcionalidades fictícias foram removidas da API:
- ~~Análise de Cobertura de Plataforma~~ - Retornava dados fictícios fixos
- ~~Análise de Tendências~~ - Retornava dados sintéticos aleatórios
- ~~Exportação de Relatórios CSV/PDF~~ - Retornava 501; agora apenas JSON
- ~~Inferência de Sequências Gemini~~ - Era um stub 501; use `/sequence/propose` em vez disso

### Matriz de Conectividade

| Área de Funcionalidade | UI Frontend | CLI | REST API |
|------------------------|-------------|-----|----------|
| Gestão de Relatórios | ✅ | ✅ | ✅ |
| Fluxo de Revisão | ✅ | ✅ | ✅ |
| Pesquisa (TTX) | ✅ | ✅ | ✅ |
| Análise de Co-ocorrência | ✅ | ✅ | ✅ |
| Análise de Cobertura | ✅ | - | ✅ |
| Monitorização de Saúde | ✅ | - | ✅ |
| Deteções/Sigma | ✅ | - | ✅ |
| Fluxos de Ataque | ✅ | - | ✅ |
| Sobreposição de Defesa | ✅ | - | ✅ |
| Sequências/PTG | ✅ | - | ✅ |
| Atores | ✅ | - | ✅ |
| Simulação de Ataque | - | - | ✅ |
| Deteção de Deriva | - | - | ✅ |
| Métricas ML | - | - | ✅ |
| Gestão de Vetores | - | - | ✅ |
| Lista de Ignorar Entidades | - | - | ✅ |
| Padrões Candidatos | - | - | ✅ |
| Notificações | - | - | ✅ |
| Proveniência | - | - | ✅ |
| Conformidade | - | - | ✅ |

### Páginas do Frontend
| Página | Estado | Notas |
|--------|--------|-------|
| `/reports` | ✅ A funcionar | Listar, criar, ver relatórios |
| `/reports/[id]/review` | ✅ A funcionar | Fluxo de revisão completo |
| `/analytics/cooccurrence` | ⚠️ Dependente de dados | Mostra KPIs se existirem episódios |
| `/analytics/cooccurrence/pairs` | ⚠️ Dependente de dados | Chama API real |
| `/analytics/cooccurrence/bundles` | ⚠️ Dependente de dados | Chama API real |
| `/analytics/cooccurrence/actors` | ⚠️ Dependente de dados | Chama API real |
| `/health` | ✅ A funcionar | Estado de saúde em tempo real |

## Resolução de Problemas

### Problemas Comuns

1. **Falha na conexão com OpenSearch**
   - Certifique-se de que o OpenSearch está em execução: `curl http://localhost:9200`
   - Verifique se o índice existe: `curl http://localhost:9200/bandjacks_attack_nodes-v1`

2. **Falha na conexão com Neo4j**
   - Verifique se o Neo4j está em execução: `neo4j status`
   - Certifique-se de que `NEO4J_PASSWORD` está definido no ficheiro `.env`
   - Garanta que a palavra-passe corresponde à sua instância Neo4j
   - Se vir "NEO4J_PASSWORD environment variable is required", precisa defini-la no seu ficheiro `.env`

3. **Baixa precisão de extração**
   - Certifique-se de que está a usar o método `agentic_v2`
   - Verifique se a chave da API LLM é válida
   - Confirme que o nome do modelo está correto (gemini-flash-latest)

4. **Erros de timeout**
   - Aumente as definições de timeout para documentos grandes
   - Considere dividir relatórios muito grandes

5. **Frontend não está a conectar à API**
   - Certifique-se de que a API está em execução na porta 8000
   - Verifique as definições de CORS na configuração da API

### Modo de Depuração

Ativar registo detalhado:```python
import logging
logging.basicConfig(level=logging.DEBUG)

# Run extraction with debug output
result = run_agentic_v2(text, config)

Desenvolvimento

Executando Testes```bash

Unit tests

uv run pytest tests/unit

Integration tests

uv run pytest tests/integration

Specific test

uv run pytest tests/test_agentic_v2.py::test_extraction

With coverage

uv run pytest --cov=bandjacks

Frontend tests

cd ui && npm test cd ui && npm run test:coverage

root@kitploit:~
### Contribuindo

1. Faça um fork do repositório
2. Crie uma branch de funcionalidade
3. Faça suas alterações
4. Execute os testes: `uv run pytest`
5. Execute a verificação de lint: `uv run ruff check`
6. Envie um pull request

### Qualidade do Código```bash
# Format code
uv run ruff format

# Check linting
uv run ruff check

# Type checking
uv run mypy bandjacks

Licença

[Sua Licença Aqui]

Suporte

  • Início Rápido: docs/QUICKSTART.md
  • Configuração Completa: docs/SETUP.md
  • Documentação da API: http://localhost:8000/docs (quando em execução)
  • Issues do GitHub: [Reportar bugs ou solicitar funcionalidades]

Agradecimentos

  • Framework MITRE ATT&CK®
  • Ontologia D3FEND
  • Especificação STIX 2.1
Baixar ferramenta
  • Endpoints REST FastAPI
  • Suporte a WebSocket para atualizações em tempo real
  • Documentação OpenAPI abrangente
  • Frontend (ui/)

    • Next.js 15 com App Router
    • React Query para busca de dados
    • Radix UI + Tailwind para componentes
    • ReactFlow para visualização de grafos
  • OpçãoPadrãoEfeitoImpacto na Qualidade
    MAX_MAPPER_BATCH_SIZE (env var)10Spans por chamada do mapeador LLM (reduzido de 25 em 2026-05; respostas em nuvem limitam a ~800 tokens, ~12% dos lotes maiores estavam retornando JSON truncado)None
    max_spans_per_technique (config)2Pré-filtro: melhores N spans por técnica candidata~19% menos técnicas, maior confiança
    enable_span_dedup (config)falseRemove texto de span duplicado antes do mapeamento~15% menos técnicas