Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
bandjacks — Modellazione del mondo per la difesa dalle minacce informatiche | Kitploit
Strumenti/GitHubGitHub/blevene/bandjacks
OSINT (Open Source Intelligence)RicognizioneFeed e Aggregatori di MinacceAnalisi delle VulnerabilitàRaccolta InformazioniThreat IntelligenceMachine LearningApprendimento e FormazioneRisorse CurateAnalisi dei Log
GitHubblevene/bandjacks
2543 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

bandjacks

Modellazione del mondo per la difesa dalle minacce informatiche

Vedi Repository

Bandjacks

Sistema di modellazione mondiale della difesa dalle minacce informatiche

Panoramica

Bandjacks è un sistema completo di intelligence sulle minacce informatiche (CTI) che:

  • Estrae le tecniche MITRE ATT&CK dai report sulle minacce in 12-40 secondi
  • Costruisce un grafo della conoscenza di attori delle minacce, tecniche e difese
  • Genera bundle conformi a STIX 2.1 con tracciamento completo della provenienza
  • Integra l'ontologia D3FEND per raccomandazioni difensive
  • Fornisce funzionalità di ricerca vettoriale e analisi dei grafi
  • Calcola analisi di co-occorrenza per identificare modelli di tecniche
  • Offre un'estrazione più veloce del 94% rispetto alle versioni precedenti con la cache delle risposte LLM
  • Include un frontend Next.js per la revisione dei report e la visualizzazione delle analisi

📚 Documentazione

GuidaDescrizione
Avvio rapidoAvvio in 5 minuti
Configurazione completaConfigurazione completa dell'ambiente
Uso CLIGuida all'interfaccia a riga di comando
Riferimento APIDocumentazione delle API REST
Analisi di co-occorrenzaDocumentazione delle analisi
Generazione AttackFlowGuida alla generazione dei flussi
Sistema di revisioneRevisione human-in-the-loop

Punti salienti dell'architettura

TechniqueCache

  • Cache in memoria di tutte le tecniche MITRE ATT&CK caricate all'avvio
  • Ricerca O(1) tramite external_id (ad es., T1557) per la risoluzione immediata dei nomi
  • 1376 tecniche in cache con metadati completi (nome, descrizione, tattiche, piattaforme)
  • Denominazione coerente garantisce che l'interfaccia di revisione mostri sempre nomi di tecniche leggibili

ActorCache

  • Cache in memoria di tutti gli intrusion set e gli attori delle minacce
  • Ricerca rapida per la risoluzione dei nomi degli attori e per la ricerca
  • Supporta la corrispondenza degli alias e la ricerca fuzzy

Avvio rapido

Prerequisiti

  • Python 3.11+
  • Neo4j 5.x (database a grafi)
  • OpenSearch 2.x (archivio vettoriale)
  • Redis (opzionale, per la cache)
  • Node.js 18+ (per il frontend)
  • Accesso LLM: chiavi API cloud (Gemini o OpenAI) oppure un server locale compatibile con OpenAI

Installazione```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:~
### Configurazione dell'ambiente

**IMPORTANTE:** È necessario configurare le variabili d'ambiente prima di avviare l'applicazione. L'applicazione richiede che `NEO4J_PASSWORD` sia impostata.

Crea un file `.env` nella root del progetto:```bash
# Copy the sample file
cp infra/env.sample .env

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

Configurazione richiesta in .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:** L'applicazione non si avvierà se `NEO4J_PASSWORD` non è impostata. Vedere [Correzione delle variabili d'ambiente](https://github.com/blevene/bandjacks/blob/HEAD/ENV_VARIABLES_FIX.md) per i dettagli.

### Avvio dei servizi```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

Interfaccia a riga di comando (CLI)

Bandjacks include una CLI completa per le operazioni di threat intelligence:```bash

Show all available commands

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

root@kitploit:~
> **Nota:** La CLI richiede che le variabili d'ambiente siano impostate (NEO4J_PASSWORD, ecc.). Eseguire dalla root del progetto dove si trova `.env`.

### Comandi di query```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

Gestione della coda di revisione```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:~
### Estrazione dei documenti```bash
# Extract CTI from a document
uv run python -m bandjacks.cli.main extract document ./report.pdf --confidence-threshold 80 --show-evidence

Comandi di analisi

Nota: I comandi di analisi richiedono dati AttackEpisode in Neo4j per restituire risultati.```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:~
### Comandi del flusso di lavoro```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/

Comandi di amministrazione```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:~
## Interfaccia frontend

Il frontend Next.js fornisce un'interfaccia moderna per lavorare con il sistema.

### Gestione dei report (`/reports`)
- **Elenco report**: Visualizza tutti i report acquisiti con stato e conteggi delle tecniche
- **Nuovo report** (`/reports/new`): Carica file PDF/TXT oppure incolla il contenuto del report
- **Dettaglio report** (`/reports/[id]`): Visualizza tecniche, entità ed evidenze estratte
- **Interfaccia di revisione** (`/reports/[id]/review`): Flusso di lavoro di revisione human-in-the-loop

### Analisi di co-occorrenza (`/analytics/cooccurrence`)

> **Nota:** Queste pagine richiedono dati `AttackEpisode` in Neo4j. Prima processa i report tramite la pipeline di estrazione, oppure usa `POST /v1/flows/build` per generare episodi dai dati degli intrusion set.

- **Pagina Hub**: Panoramica con conteggi di episodi/tecniche/attori
- **Coppie principali** (`/pairs`): Coppie di tecniche co-occorrenti con metriche NPMI/Lift
- **Condizionale** (`/conditional`): Probabilità condizionali P(B|A)
- **Bundle** (`/bundles`): Bundle di tecniche frequentemente co-occorrenti
- **Attori** (`/actors`): Modelli di tecniche specifici per attore
- **Collegamenti** (`/bridging`): Tecniche utilizzate da più attori

### Stato del sistema (`/health`)
- Stato di salute in tempo reale di tutti i componenti (Neo4j, OpenSearch, Redis)
- Statistiche della cache e utilizzo della memoria
- Endpoint di health compatibili con Kubernetes

### Avvio del 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

Guida all'uso

1. Caricamento dei dati MITRE ATT&CK

Innanzitutto, carica il framework MITRE ATT&CK nel tuo grafo della conoscenza:```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. Estrazione delle Tecniche dai Report

Estrai le tecniche MITRE ATT&CK dai report di threat intelligence:```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. Utilizzo diretto di Python

Per l'accesso programmatico senza 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:~
## Extraction Pipeline Architecture

La pipeline di estrazione di Bandjacks utilizza un'architettura multi-agente per estrarre intelligence strutturata sulle minacce:

### Componenti della pipeline

La pipeline di estrazione utilizza 9 agenti specializzati in sequenza:

#### 1. **EntityExtractionAgent** - Riconoscimento delle entità
- Estrae attori delle minacce, malware, strumenti e campagne
- Viene eseguito per primo per fornire contesto all'estrazione delle tecniche
- Utilizza few-shot prompting con validazione dello schema JSON
- Gestisce documenti in chunk con estrazione progressiva a finestre

#### 2. **SpanFinderAgent** - Rilevamento di testo comportamentale
- Rileva porzioni di testo (span) contenenti comportamenti di minaccia utilizzando 14 pattern regex specifici per tattica
- Identifica ID di tecniche espliciti (T1566.001) e pattern comportamentali
- Valuta gli span in base alla confidenza con potenziamento dell'indice di parole chiave
- Nessuna chiamata LLM — puro pattern matching per la velocità

#### 3. **BatchRetrieverAgent** - Recupero candidati
- Utilizza la ricerca vettoriale KNN di OpenSearch per trovare tecniche candidate per ogni span
- Deduplica i testi degli span identici prima della codifica per evitare embedding ridondanti
- Restituisce i top-k candidati con punteggi di similarità per ogni span

#### 4. **Pre-filter** - Riduzione degli span
- Limita gli span a `max_spans_per_technique` (default 2) per tecnica candidata
- Mantiene gli span con punteggio più alto per candidato per preservare la qualità delle evidenze
- Riduce le chiamate LLM del mapper di circa il 46% con una perdita minima di tecniche

#### 5. **DiscoveryAgent** - Scoperta LLM (condizionale)
- Attivato quando la confidenza del retriever è bassa (media <0.7)
- Utilizza l'LLM per scoprire tecniche che la ricerca vettoriale non ha rilevato
- Una singola chiamata batch per tutti gli span a bassa confidenza

#### 6. **BatchMapperAgent** - Mappatura delle tecniche (LLM)
- Elabora in batch gli span in gruppi fino a 10 (`MAX_MAPPER_BATCH_SIZE`, default ridotto da 25 a 10 nel 2026-05 per limitare il troncamento del cloud-LLM)
- Estrae TUTTE le tecniche rilevanti per ogni span con punteggi di confidenza
- Utilizza la validazione dello schema JSON per un output strutturato

#### 7. **EvidenceVerifierAgent** - Validazione delle evidenze
- Verifica basata su pattern di citazioni e riferimenti di riga
- Valuta la qualità delle evidenze su una scala da 40 a 100 punti
- Nessuna chiamata LLM — regex e corrispondenza testuale

#### 8. **ConsolidatorAgent** - Consolidamento delle evidenze
- Unisce le tecniche duplicate trovate in più span
- Aggrega le evidenze utilizzando la similarità di Jaccard (soglia >85%)
- Produce l'elenco finale delle tecniche con punteggi di confidenza consolidati

#### 9. **AttackFlowSynthesizer** - Generazione di sequenze (LLM)
- Analizza i marcatori temporali ("first", "then", "after")
- Inferisce relazioni causali dalla narrazione
- Crea oggetti STIX Attack Flow con archi probabilistici
- Torna al modello di co-occorrenza quando la sequenza non è chiara

### Ottimizzazioni delle prestazioni

- **Smart Chunking**: documenti divisi in chunk da 2KB con sovrapposizione
- **Elaborazione batch**: il mapper elabora fino a 25 span per chiamata LLM
- **Elaborazione parallela**: i chunk vengono elaborati in parallelo su thread di lavoro
- **Caching delle risposte**: le risposte LLM vengono memorizzate nella cache per evitare chiamate duplicate
- **Terminazione anticipata**: le estrazioni ad alta confidenza saltano la verifica
- **TechniqueCache**: tutte le tecniche ATT&CK caricate all'avvio per ricerche O(1)
- **Pre-filter**: limita gli span per tecnica candidata prima del mapper LLM (46% di chiamate in meno)
- **Embedding in batch**: embedding delle tecniche generati in batch (2-5 volte più veloce)
- **Pool di connessioni**: connessioni Neo4j/OpenSearch condivise tra le richieste
- **Batch UNWIND**: scritture Neo4j raggruppate tramite UNWIND (30-40 query → 6-7)
- **Pre-riscaldamento del modello**: modello di embedding caricato all'avvio per evitare la latenza di cold-start

### Tempi di elaborazione

| Dimensione documento | Tempo di elaborazione | Tecniche estratte |
|--------------|-----------------|---------------------|
| Piccolo (<5KB) | 10-20 secondi | 5-10 tecniche |
| Medio (5-15KB) | 20-40 secondi | 10-15 tecniche |
| Grande (>15KB) | 30-60 secondi | 15-25 tecniche |

## Analisi di co-occorrenza

Bandjacks fornisce analisi per comprendere le relazioni tra le tecniche.

> **Nota:** L'analisi richiede dati `AttackEpisode` e `AttackAction` in Neo4j. Questi vengono creati quando:
> - I report vengono elaborati attraverso la pipeline di estrazione
> - I flussi di attacco vengono creati tramite `/v1/flows/build`
> - I bundle STIX con episodi di attacco vengono importati
>
> Se non esistono episodi, l'analisi restituirà risultati vuoti.

### Co-occorrenza globale

Calcola quali tecniche compaiono frequentemente insieme in tutti gli episodi di attacco:```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}")

Probabilità condizionata

Calcola P(B|A) - dato che è stata usata la tecnica A, qual è la probabilità della tecnica B:```python response = httpx.get( "http://localhost:8000/v1/analytics/cooccurrence/conditional", params={"technique_id": "attack-pattern--abc123", "limit": 25} )

root@kitploit:~
### Pacchetti di tecniche

Identifica i pacchetti di tecniche che co-occorrono frequentemente (3-5 tecniche):```python
response = httpx.post(
    "http://localhost:8000/v1/analytics/cooccurrence/bundles",
    json={"min_support": 3, "min_size": 3, "max_size": 5}
)

Analisi specifica per attore

Analizza i pattern di tecniche per specifici attori di minaccia:```python response = httpx.post( "http://localhost:8000/v1/analytics/cooccurrence/actor", json={"intrusion_set_id": "intrusion-set--xyz789", "min_support": 1} )

root@kitploit:~
## Sistema di Revisione Human-in-the-Loop

Bandjacks include un sistema di revisione completo per la validazione delle informazioni estratte:

### Interfaccia di Revisione Unificata

Il sistema di revisione presenta tutti gli elementi estratti in un'unica interfaccia:```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

Funzionalità di Revisione

  • Collegamenti alle Prove: Collegamenti diretti al testo sorgente con numeri di riga
  • Regolazione della Confidenza: Modifica i punteggi di confidenza in base alle conoscenze dell'analista
  • Operazioni Massive: Seleziona più elementi per approvazione/rifiuto in batch
  • Scorciatoie da Tastiera: A (approva), R (rifiuta), E (modifica), Spazio (successivo)
  • Monitoraggio del Progresso: Indicatori visivi del completamento della revisione
  • Filtri: Filtra per tipo, livello di confidenza o stato

Integrazione 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. Ricerca delle Tecniche

Cerca le tecniche ATT&CK utilizzando il linguaggio naturale:```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. Query sul grafo

Interroga il grafo della conoscenza per le relazioni:```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. Generazione dei modelli AttackFlow

Crea modelli di co-occorrenza che mostrano come gli attori delle minacce utilizzano le tecniche insieme:```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'])}")

Generazione in blocco: Genera flussi per tutti gli attori delle minacce con tecniche:```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:~
I modelli AttackFlow usano la **co-occorrenza** piuttosto che l'ordinamento sequenziale, poiché gli intrusion set non dispongono di informazioni intrinseche sulla sequenza. Le tecniche sono collegate da:
- **Archi intra-tattici**: Tra tecniche nella stessa tattica della kill chain
- **Archi inter-tattici**: Tra tecniche appartenenti a tattiche adiacenti
- **Pattern hub-spoke**: Per insiemi di tecniche di grandi dimensioni, per evitare l'esplosione degli archi

Consulta la [Guida alla generazione di AttackFlow](https://github.com/blevene/bandjacks/blob/HEAD/docs/ATTACKFLOW_GENERATION.md) per un uso dettagliato.

## Formati di Input Supportati

La pipeline di estrazione supporta molteplici formati di input:

- **Testo semplice** - Contenuto testuale diretto
- **Markdown** - Documenti markdown formattati
- **PDF** - Tramite estrazione con pdfplumber
- **HTML** - Tramite parsing con BeautifulSoup
- **JSON** - Estrazione di dati strutturati

### Estrazione da Testo Semplice```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
}))

Estratto da 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:~
### Estratto da 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")

Report di elaborazione batch```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:~
### Costruire flussi di attacco```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")

Test

Esegui la suite di test per verificare l'installazione:```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:~
## Endpoint API

### Endpoint principali

- `POST /v1/stix/load/attack` - Carica i dati MITRE ATT&CK
- `POST /v1/reports/ingest` - Ingestione report sincrona (<5KB)
- `POST /v1/reports/ingest_async` - Ingestione report asincrona (>5KB)
- `POST /v1/reports/ingest/upload` - Carica file PDF/TXT
- `GET /v1/reports/jobs/{id}/status` - Controlla lo stato del job
- `POST /v1/reports/{id}/unified-review` - Invia le decisioni di revisione
- `POST /v1/search/ttx` - Cerca tecniche
- `GET /v1/graph/technique/{id}` - Ottieni i dettagli della tecnica

### Flussi di attacco

- `POST /v1/flows/build` - Genera modelli di co-occorrenza AttackFlow
- `GET /v1/flows/{flow_id}` - Recupera i dettagli di uno specifico AttackFlow
- `POST /v1/flows/search` - Cerca flussi di attacco simili
- `GET /v1/flows/dump` - Esportazione in blocco dei flussi con paginazione e filtri

### Analisi

- `GET /v1/analytics/cooccurrence/global` - Metriche globali di co-occorrenza
- `GET /v1/analytics/cooccurrence/conditional` - Probabilità condizionate
- `GET /v1/analytics/cooccurrence/bundles` - Bundle di tecniche
- `GET /v1/analytics/cooccurrence/actor` - Pattern specifici per attore
- `GET /v1/coverage/gaps` - Lacune nella copertura delle tecniche

### Difesa e rilevamento

- `GET /v1/defense/technique/{id}` - Ottieni raccomandazioni difensive
- `GET /v1/detections/technique/{id}` - Strategie di rilevamento
- `POST /v1/sigma/validate` - Valida regole Sigma

### Monitoraggio

- `GET /health` - Controllo di integrità di base
- `GET /health/live` - Sonda di liveness per Kubernetes
- `GET /health/ready` - Sonda di readiness per Kubernetes
- `GET /health/components/{component}` - Integrità del singolo componente
- `GET /v1/costs/stats` - Tracciamento dei costi LLM (aggregato giornaliero per modello)
- `GET /v1/cache/stats` - Ottieni statistiche cache LLM
- `POST /v1/cache/clear` - Svuota la cache LLM
- `GET /v1/compliance/report` - Metriche di conformità
- `GET /v1/drift/status` - Stato del rilevamento di deriva
- `GET /v1/ml-metrics/performance` - Metriche del modello ML

### Attori e provenienza

- `GET /v1/actors` - Elenca gli attori delle minacce
- `GET /v1/actors/{id}` - Ottieni i dettagli dell'attore
- `GET /v1/provenance/{object_id}` - Provenienza dell'oggetto
- `GET /v1/provenance/{object_id}/lineage` - Catena completa di discendenza
- `GET /v1/provenance/{object_id}/evidence` - Estratti di prove

### Funzionalità solo API (nessuna UI/CLI)

Questi endpoint sono pienamente funzionali ma sono accessibili esclusivamente tramite API REST (nessuna pagina frontend o comando CLI):

#### Simulazione dei percorsi di attacco
- `POST /v1/simulation/paths` - Simula percorsi di attacco a partire da tecnica/gruppo iniziale
- `POST /v1/simulation/predict` - Prevede le prossime tecniche più probabili dato lo stato attuale
- `POST /v1/simulation/whatif` - Analisi what-if per scenari difensivi
- `POST /v1/simulation/scenario` - Simula a partire da insiemi di gruppi/software/tecniche
- `GET /v1/simulation/statistics/{technique_id}` - Statistiche di utilizzo della tecnica
- `GET /v1/simulation/groups/{group_id}/patterns` - Pattern di attacco del gruppo
- `POST /v1/simulation/compare` - Confronta più percorsi di attacco

#### Politica MDP e rollout
- `POST /v1/simulate/rollout` - Simulazione di rollout PTG
- `POST /v1/simulate/mdp` - Calcola la politica difensiva ottimale MDP
- `GET /v1/simulate/models` - Elenca i modelli PTG disponibili

#### Rilevamento deriva e monitoraggio
- `GET /v1/drift/status` - Stato attuale della deriva su tutte le metriche
- `POST /v1/drift/analyze` - Esegui analisi della deriva con soglie personalizzate
- `GET /v1/drift/alerts` - Ottieni gli avvisi di deriva attivi
- `POST /v1/drift/alerts/{alert_id}/acknowledge` - Conferma avviso
- `GET /v1/drift/metrics/{metric_name}` - Ottieni una specifica metrica di deriva

#### Tracciamento metriche ML
- `POST /v1/ml-metrics/prediction` - Registra la previsione del modello per il tracciamento
- `POST /v1/ml-metrics/review` - Registra le metriche delle decisioni di revisione
- `POST /v1/ml-metrics/coverage-gap` - Registra una lacuna di copertura
- `GET /v1/ml-metrics/performance` - Ottieni le metriche di prestazione del modello
- `GET /v1/ml-metrics/dashboard` - Esporta le metriche della dashboard

#### Notifiche
- `GET /v1/notifications/history` - Ottieni la cronologia delle notifiche
- `POST /v1/notifications/clear-history` - Svuota la cronologia delle notifiche
- `GET /v1/notifications/config` - Ottieni la configurazione delle notifiche
- `POST /v1/notifications/test` - Invia notifica di test

#### Gestione aggiornamento vettori
- `GET /v1/vectors/status` - Stato del sistema di aggiornamento vettori
- `GET /v1/vectors/metrics` - Metriche dettagliate di aggiornamento vettori
- `POST /v1/vectors/update` - Attiva manualmente l'aggiornamento vettori
- `POST /v1/vectors/process-batch` - Forza l'elaborazione batch
- `DELETE /v1/vectors/queue` - Svuota la coda di aggiornamenti in sospeso
- `GET /v1/vectors/health` - Controllo di integrità del sistema vettori

#### Ignorelist entità
- `GET /v1/ignorelist` - Ottieni lo stato attuale della ignorelist
- `POST /v1/ignorelist/add` - Aggiungi entità alla ignorelist
- `DELETE /v1/ignorelist/remove` - Rimuovi entità dalla ignorelist
- `POST /v1/ignorelist/reload` - Ricarica la ignorelist dal disco

#### Revisione dei pattern candidati
- `GET /v1/review/candidates` - Elenca i pattern di attacco candidati
- `POST /v1/review/candidates` - Crea un pattern candidato
- `GET /v1/review/candidates/{id}` - Ottieni i dettagli del candidato
- `POST /v1/review/candidates/{id}/approve` - Approva il candidato
- `POST /v1/review/candidates/{id}/reject` - Rifiuta il candidato
- `GET /v1/review/candidates/{id}/similar` - Trova pattern simili
- `GET /v1/review/candidates/stats/summary` - Statistiche dei candidati

### Documentazione API completa

Accedi alla documentazione API completa all'indirizzo:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- OpenAPI JSON: http://localhost:8000/openapi.json

## Architettura

### Struttura del progetto```
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

Componenti

  1. Pipeline di estrazione (bandjacks/llm/)

    • extraction_pipeline.py - Orchestratore principale di estrazione
    • chunked_extractor.py - Elaborazione standard a chunk
    • optimized_chunked_extractor.py - Elaborazione avanzata ottimizzata
    • agents_v2.py - Agenti di estrazione core (SpanFinder, Mapper, Consolidator)
    • entity_extractor.py - Agente di riconoscimento entità
    • flow_builder.py - Generazione del flusso di attacco
    • memory.py - Memoria di lavoro condivisa
    • cache.py - Cache delle risposte LLM
  2. Livello dati (bandjacks/loaders/)

    • Grafo a proprietà Neo4j per le relazioni
    • OpenSearch per gli embedding vettoriali
    • Modello dati STIX 2.1
  3. Livello API (bandjacks/services/api/)

Performance

  • Velocità di estrazione: 12-40 secondi per report (94% più veloce della v1)
  • Documenti piccoli: 4-8 secondi con estrazione a passaggio singolo
  • Tasso di hit della cache: accelerazione dell'87,5% su estrazioni ripetute
  • Ricerca: <300ms per la ricerca di similarità vettoriale
  • Query sul grafo: <100ms per la maggior parte delle traversate

Configurazione

Selezione del Modello

Il sistema supporta LLM cloud e qualsiasi API locale compatibile con 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:~
**Priorità provider:** API locale > Gemini > OpenAI > proxy LiteLLM.
Quando è configurato un server locale, i provider cloud vengono automaticamente aggiunti come fallback.

#### Esempi comuni di server locali

| Server | `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` |

### Configurazione dell'estrazione

Il sistema utilizza una singola pipeline asincrona ad alte prestazioni con opzioni configurabili:```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)
}

Ottimizzazione dei Costi

La pipeline di estrazione traccia i costi LLM tramite litellm.completion_cost() con metriche per report e un endpoint aggregato giornaliero.

Controlli dei costi:

Monitoraggio:```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:~
### Soglie di confidenza

Controlla la qualità dell'estrazione:```python
{
    "confidence_threshold": 50.0,  # Minimum confidence (0-100)
    "auto_ingest": True            # Auto-add high-confidence results
}

Monitoraggio dello Stato

L'API fornisce endpoint completi di monitoraggio dello stato per la supervisione operativa e i deployment Kubernetes:

Endpoint di Stato```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:~
### Esempio di risposta di salute```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
      }
    }
  }
}

Livelli di stato

  • healthy: Componente pienamente operativo
  • degraded: Parzialmente funzionale (ad es., mancano alcuni indici ma operativo)
  • unhealthy: Componente non riuscito o non raggiungibile

Integrazione Kubernetes

Per le distribuzioni Kubernetes, configura le probe come segue:```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:~
## Performance Optimization

### Caching

Il sistema include la memorizzazione nella cache automatica delle risposte LLM per migliorare le prestazioni:```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")

Profili di prestazioni

Scegli un profilo in base alle tue esigenze:```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:~
## Sicurezza

### Validazione dell'input

- **Prevenzione dell'iniezione Cypher**: Tutti gli endpoint di query sui grafi validano i parametri `relationship_types` forniti dall'utente rispetto a un'allowlist di tipi di relazione noti (USES, MITIGATES, HAS_TACTIC, ecc.) oltre a un pattern regex rigoroso (`^[A-Z][A-Z0-9_]*$`). L'input non valido restituisce 400 prima della costruzione della query.
- **Validazione JSON Schema**: Le risposte LLM vengono validate rispetto agli schemi JSON per impedire che dati malformati entrino nella pipeline.
- **Validazione ADM**: Tutti i contenuti STIX devono superare la validazione del modello dati ATT&CK prima dell'ingestione.

### Autenticazione e autorizzazione

- **Autenticazione JWT**: Middleware opzionale per l'autenticazione API (`JWTAuthMiddleware`)
- **Limitazione della frequenza**: Limitazione della frequenza per endpoint con soglie configurabili
- **CORS**: Condivisione delle risorse cross-origin configurabile

## Funzionalità avanzate

### Tracciamento della provenienza

Ogni entità estratta include la provenienza completa:```python
# Get provenance for an object
response = httpx.get(
    "http://localhost:8000/v1/provenance/attack-pattern--abc123"
)

Apprendimento Attivo

Il sistema include una coda di revisione per migliorare l'estrazione:```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:~
### Analisi della copertura

Analizza la copertura della tua threat intelligence:```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: La copertura delle piattaforme (_analyze_platforms_coverage) attualmente restituisce dati segnaposto. La copertura di tattiche e gruppi utilizza query Neo4j reali.

Simulazione degli Attacchi (Sperimentale)

Il modulo di simulazione fornisce la previsione del percorso di attacco basata su 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:~
## Stato delle Funzionalità

Questa sezione fornisce trasparenza sullo stato di implementazione delle varie funzionalità:

### Pienamente Funzionanti ✅
- **Pipeline di estrazione dei report** - L'estrazione delle tecniche basata su LLM funziona end-to-end
- **Caricamento MITRE ATT&CK** - Carica i dati ATT&CK enterprise/mobile/ICS in Neo4j
- **Ricerca vettoriale** - Ricerca semantica basata su OpenSearch per le tecniche
- **Sistema di revisione** - Flusso di lavoro di revisione con intervento umano tramite API e UI
- **Monitoraggio della salute** - Controlli di salute dei componenti e probe Kubernetes
- **Comandi CLI di query/amministrazione** - Ricerca, traversal del grafo, gestione della cache
- **Generazione di flussi di attacco** - Costruzione di flussi basata su co-occorrenze per set di intrusioni
- **Simulazione di attacchi** - Simulazione di percorsi basata su MDP tramite `/simulation/*` e `/simulate/*`
- **Report di copertura** - Report JSON per viste esecutiva, tecnica, tattica e operativa

### Funzionali con Dipendenze dai Dati ⚠️
- **Analisi di co-occorrenze** - Richiede nodi `AttackEpisode` dalla lavorazione dei report
- **Analisi degli attori** - Richiede episodi attribuiti a set di intrusioni
- **Bundle di tecniche** - Richiede dati di episodi sufficienti per il pattern mining
- **Comandi CLI di analisi** - Funzionano ma restituiscono dati vuoti se non esistono episodi

### Solo API (Nessuna UI/CLI) 🔌
Queste sono funzionalità completamente implementate accessibili solo tramite API REST:
- **Simulazione del percorso di attacco** - Route `/simulation/*` per previsione del percorso e analisi what-if
- **Risolutore di policy MDP** - `/simulate/mdp` per il calcolo della policy di difesa ottimale
- **Rilevamento del drift** - Route `/drift/*` per monitorare il drift di qualità dei dati
- **Metriche ML** - `/ml-metrics/*` per tracciare le prestazioni del modello nel tempo
- **Gestione dei vettori** - `/vectors/*` per la gestione degli embedding vettoriali
- **Ignorelist delle entità** - `/ignorelist/*` per filtrare le entità falso positive
- **Pattern candidati** - `/review/candidates/*` per i candidati di nuove tecniche
- **Notifiche** - `/notifications/*` per configurazione e cronologia degli avvisi
- **Provenienza** - `/provenance/*` per il tracciamento della discendenza dell'estrazione
- **Conformità** - `/compliance/*` per il reporting delle metriche di conformità

### Sperimentale (in `llm/experimental/`) 🧪
- **PTG (Probabilistic Threat Graph)** - Logica principale implementata, test limitati
- **Integrazione Judge** - Validazione delle sequenze basata su LLM
- **Simulatore di flussi di attacco** - Motore di simulazione basato su flussi
- **Estrattore di sequenze** - Estrae sequenze dai flussi

### Rimossi/Puliti 🗑️
Le seguenti funzionalità stub sono state rimosse dall'API:
- ~~Analisi della copertura della piattaforma~~ - Restituiva dati stub hardcoded
- ~~Analisi delle tendenze~~ - Restituiva dati sintetici casuali
- ~~Esportazione report CSV/PDF~~ - Restituiva 501; ora solo JSON
- ~~Inferenza di sequenze Gemini~~ - Era uno stub 501; usa invece `/sequence/propose`

### Matrice di Connettività

| Area funzionale | Frontend UI | CLI | API REST |
|--------------|-------------|-----|----------|
| Gestione dei report | ✅ | ✅ | ✅ |
| Flusso di revisione | ✅ | ✅ | ✅ |
| Ricerca (TTX) | ✅ | ✅ | ✅ |
| Analisi di co-occorrenze | ✅ | ✅ | ✅ |
| Analisi di copertura | ✅ | - | ✅ |
| Monitoraggio della salute | ✅ | - | ✅ |
| Rilevamenti/Sigma | ✅ | - | ✅ |
| Flussi di attacco | ✅ | - | ✅ |
| Overlay difensivo | ✅ | - | ✅ |
| Sequenze/PTG | ✅ | - | ✅ |
| Attori | ✅ | - | ✅ |
| Simulazione di attacchi | - | - | ✅ |
| Rilevamento del drift | - | - | ✅ |
| Metriche ML | - | - | ✅ |
| Gestione dei vettori | - | - | ✅ |
| Ignorelist delle entità | - | - | ✅ |
| Pattern candidati | - | - | ✅ |
| Notifiche | - | - | ✅ |
| Provenienza | - | - | ✅ |
| Conformità | - | - | ✅ |

### Pagine del Frontend
| Pagina | Stato | Note |
|------|--------|-------|
| `/reports` | ✅ Funzionante | Elenca, crea, visualizza report |
| `/reports/[id]/review` | ✅ Funzionante | Flusso di revisione completo |
| `/analytics/cooccurrence` | ⚠️ Dipende dai dati | Mostra KPI se esistono episodi |
| `/analytics/cooccurrence/pairs` | ⚠️ Dipende dai dati | Chiama l'API reale |
| `/analytics/cooccurrence/bundles` | ⚠️ Dipende dai dati | Chiama l'API reale |
| `/analytics/cooccurrence/actors` | ⚠️ Dipende dai dati | Chiama l'API reale |
| `/health` | ✅ Funzionante | Stato di salute in tempo reale |

## Risoluzione dei Problemi

### Problemi Comuni

1. **Connessione OpenSearch fallita**
   - Assicurati che OpenSearch sia in esecuzione: `curl http://localhost:9200`
   - Verifica che l'indice esista: `curl http://localhost:9200/bandjacks_attack_nodes-v1`

2. **Connessione Neo4j fallita**
   - Verifica che Neo4j sia in esecuzione: `neo4j status`
   - Controlla che `NEO4J_PASSWORD` sia impostata nel file `.env`
   - Assicurati che la password corrisponda alla tua istanza Neo4j
   - Se vedi "NEO4J_PASSWORD environment variable is required", devi impostarla nel tuo file `.env`

3. **Bassa recall di estrazione**
   - Assicurati di usare il metodo `agentic_v2`
   - Verifica che la chiave API LLM sia valida
   - Verifica che il nome del modello sia corretto (gemini-flash-latest)

4. **Errori di timeout**
   - Aumenta le impostazioni di timeout per documenti di grandi dimensioni
   - Considera di suddividere in chunk i report molto grandi

5. **Il frontend non si connette all'API**
   - Assicurati che l'API sia in esecuzione sulla porta 8000
   - Controlla le impostazioni CORS nella configurazione dell'API

### Modalità Debug

Abilita la registrazione dettagliata:```python
import logging
logging.basicConfig(level=logging.DEBUG)

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

Sviluppo

Esecuzione dei test```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:~
### Contribuire

1. Fai un fork del repository
2. Crea un feature branch
3. Apporta le tue modifiche
4. Esegui i test: `uv run pytest`
5. Esegui il linting: `uv run ruff check`
6. Invia una pull request

### Qualità del codice```bash
# Format code
uv run ruff format

# Check linting
uv run ruff check

# Type checking
uv run mypy bandjacks

Licenza

[La tua licenza qui]

Supporto

  • Avvio rapido: docs/QUICKSTART.md
  • Configurazione completa: docs/SETUP.md
  • Documentazione API: http://localhost:8000/docs (quando è in esecuzione)
  • Problemi GitHub: [Segnala bug o richiedi funzionalità]

Riconoscimenti

  • framework MITRE ATT&CK®
  • ontologia D3FEND
  • specifica STIX 2.1
Scarica lo strumento
  • Endpoint REST FastAPI
  • Supporto WebSocket per aggiornamenti in tempo reale
  • Documentazione OpenAPI completa
  • Frontend (ui/)

    • Next.js 15 con App Router
    • React Query per il recupero dei dati
    • Radix UI + Tailwind per i componenti
    • ReactFlow per la visualizzazione dei grafi
  • OpzionePredefinitoEffettoImpatto sulla Qualità
    MAX_MAPPER_BATCH_SIZE (env var)10Span per chiamata al mapper LLM (ridotto da 25 nel 2026-05; le risposte cloud hanno un limite di ~800 token, ~12% dei batch più grandi restituivano JSON troncato)Nessuno
    max_spans_per_technique (config)2Pre-filtro: migliori N span per tecnica candidata~19% in meno di tecniche, maggiore confidenza
    enable_span_dedup (config)falseRimuovi testo span duplicato prima della mappatura~15% in meno di tecniche