Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
bandjacks — Cyber-Bedrohungsabwehr-Weltmodellierung | Kitploit
Tools/GitHubGitHub/blevene/bandjacks
OSINT (Open-Source-Intelligence)AufklärungBedrohungsfeeds & AggregatorenSchwachstellenanalyseInformationsbeschaffungBedrohungsanalyseMaschinelles LernenLernen & BildungKuratierte RessourcenLog-Analyse
GitHubblevene/bandjacks
2545vor 3 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

bandjacks

Cyber-Bedrohungsabwehr-Weltmodellierung

Repository anzeigen

Bandjacks

Cyber Threat Defense World Modeling System

Übersicht

Bandjacks ist ein umfassendes Cyber-Bedrohungsinformationssystem (CTI), das:

  • MITRE ATT&CK-Techniken aus Bedrohungsberichten in 12-40 Sekunden extrahiert
  • Einen Wissensgraphen von Bedrohungsakteuren, Techniken und Abwehrmaßnahmen erstellt
  • STIX 2.1-konforme Bündel mit vollständiger Herkunftsverfolgung generiert
  • Die D3FEND-Ontologie für Abwehrempfehlungen integriert
  • Vektorsuche und Graphanalytik-Funktionen bereitstellt
  • Ko-Vorkommensanalysen berechnet, um Technikmuster zu identifizieren
  • 94% schnellere Extraktion als frühere Versionen mit LLM-Antwort-Caching
  • Ein Next.js-Frontend zur Berichtsprüfung und Visualisierung von Analysen enthält

📚 Dokumentation

AnleitungBeschreibung
SchnellstartIn 5 Minuten einsatzbereit
Vollständige EinrichtungVollständige Umgebungseinrichtung
CLI-NutzungBefehlszeilen-Anleitung
API-ReferenzREST-API-Dokumentation
Ko-VorkommensanalysenDokumentation der Analysen
AttackFlow-GenerierungAnleitung zur Flussgenerierung
ÜberprüfungssystemÜberprüfung mit menschlichem Eingriff

Architektur-Highlights

TechniqueCache

  • In-Memory-Cache aller MITRE ATT&CK-Techniken, die beim Start geladen werden
  • O(1)-Lookups nach external_id (z.B. T1557) für sofortige Namensauflösung
  • 1376 Techniken zwischengespeichert mit vollständigen Metadaten (Name, Beschreibung, Taktiken, Plattformen)
  • Konsistente Benennung stellt sicher, dass die Überprüfungs-Benutzeroberfläche immer menschenlesbare Techniknamen anzeigt

ActorCache

  • In-Memory-Cache aller Intrusion Sets und Bedrohungsakteure
  • Schnelle Lookups für die Namensauflösung und Suche von Akteuren
  • Unterstützt Alias-Abgleich und unscharfe Suche

Schnellstart

Voraussetzungen

  • Python 3.11+
  • Neo4j 5.x (Graphdatenbank)
  • OpenSearch 2.x (Vektorspeicher)
  • Redis (optional, für Caching)
  • Node.js 18+ (für Frontend)
  • LLM-Zugriff: Cloud-API-Schlüssel (Gemini oder OpenAI) oder ein lokaler OpenAI-kompatibler Server

Installation```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:~
### Umgebungseinrichtung

**WICHTIG:** Sie müssen Umgebungsvariablen konfigurieren, bevor Sie die Anwendung starten. Die Anwendung benötigt `NEO4J_PASSWORD`.

Erstellen Sie eine `.env`-Datei im Projektstammverzeichnis:```bash
# Copy the sample file
cp infra/env.sample .env

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

Erforderliche Konfiguration 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:~
**Hinweis:** Die Anwendung wird nicht starten, wenn `NEO4J_PASSWORD` nicht gesetzt ist. Siehe [Environment Variables Fix](https://github.com/blevene/bandjacks/blob/main/ENV_VARIABLES_FIX.md) für Details.

### Starten der Dienste```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

Command-Line Interface (CLI)

Bandjacks enthält eine umfassende CLI für Bedrohungsintelligenz-Operationen:```bash

Show all available commands

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

root@kitploit:~
> **Hinweis:** Die CLI erfordert das Setzen von Umgebungsvariablen (NEO4J_PASSWORD, usw.). Führen Sie das Skript vom Projektstammverzeichnis aus, in dem sich `.env` befindet.

### Abfragebefehle```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

Verwaltung der Überprüfungswarteschlange```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:~
### Dokumentenextraktion```bash
# Extract CTI from a document
uv run python -m bandjacks.cli.main extract document ./report.pdf --confidence-threshold 80 --show-evidence

Analytics-Befehle

Hinweis: Analytics-Befehle benötigen AttackEpisode-Daten in Neo4j, um Ergebnisse zurückzugeben.```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:~
### Workflow-Befehle```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/

Administratorbefehle```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:~
## Frontend-Benutzeroberfläche

Das Next.js-Frontend bietet eine moderne Schnittstelle für die Arbeit mit dem System.

### Berichtsverwaltung (`/reports`)
- **Berichtsliste**: Alle importierten Berichte mit Status und Technikzahlen anzeigen
- **Neuer Bericht** (`/reports/new`): PDF-/TXT-Dateien hochladen oder Berichtsinhalt einfügen
- **Berichtsdetail** (`/reports/[id]`): Extrahierte Techniken, Entitäten und Beweise anzeigen
- **Überprüfungsschnittstelle** (`/reports/[id]/review`): Human-in-the-Loop-Prüfworkflow

### Co-Occurrence-Analysen (`/analytics/cooccurrence`)

> **Hinweis:** Diese Seiten erfordern `AttackEpisode`-Daten in Neo4j. Verarbeiten Sie Berichte zuerst durch die Extraktionspipeline oder verwenden Sie `POST /v1/flows/build`, um Episoden aus Angriffssatzdaten zu generieren.

- **Übersichtsseite**: Übersicht mit Episoden-/Techniken-/Akteurzahlen
- **Top-Paare** (`/pairs`): Gleichzeitig auftretende Technikpaare mit NPMI/Lift-Metriken
- **Bedingt** (`/conditional`): Bedingte Wahrscheinlichkeiten P(B|A)
- **Bündel** (`/bundles`): Häufig gleichzeitig auftretende Technikbündel
- **Akteure** (`/actors`): Akteursspezifische Technikmuster
- **Brücken** (`/bridging`): Techniken, die über mehrere Akteure hinweg verwendet werden

### Systemzustand (`/health`)
- Echtzeit-Status aller Komponenten (Neo4j, OpenSearch, Redis)
- Cache-Statistiken und Speicherauslastung
- Kubernetes-kompatible Health-Endpunkte

### Frontend starten```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

Anwendungsleitfaden

1. Laden von MITRE ATT&CK-Daten

Laden Sie zunächst das MITRE ATT&CK-Framework in Ihren Wissensgraphen:```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. Techniken aus Berichten extrahieren

Extrahieren Sie MITRE ATT&CK-Techniken aus Berichten zur Bedrohungsanalyse:```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. Direkte Python-Nutzung

Für programmatischen Zugriff ohne die 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:~
## Architektur der Extraktions-Pipeline

Die Bandjacks-Extraktions-Pipeline verwendet eine Multi-Agenten-Architektur zur Extraktion strukturierter Bedrohungsinformationen:

### Pipeline-Komponenten

Die Extraktions-Pipeline verwendet 9 spezialisierte Agenten in sequenzieller Reihenfolge:

#### 1. **EntityExtractionAgent** - Entitätserkennung
- Extrahiert Bedrohungsakteure, Malware, Tools und Kampagnen
- Läuft zuerst, um Kontext für die Technik-Extraktion bereitzustellen
- Verwendet Few-Shot-Prompting mit JSON-Schema-Validierung
- Verarbeitet chunkierte Dokumente mit progressiver, fensterbasierter Extraktion

#### 2. **SpanFinderAgent** - Erkennung verhaltensbezogener Texte
- Erkennt Textabschnitte, die Bedrohungsverhalten enthalten, anhand von 14 taktik-spezifischen Regex-Mustern
- Identifiziert explizite Technik-IDs (T1566.001) und Verhaltensmuster
- Bewertet Textabschnitte nach Konfidenz mit Keyword-Index-Boosting
- Keine LLM-Aufrufe – reines Pattern-Matching für Geschwindigkeit

#### 3. **BatchRetrieverAgent** - Kandidatenabruf
- Verwendet OpenSearch KNN-Vektorsuche, um Kandidatentechniken pro Textabschnitt zu finden
- Dedupliziert identische Textabschnitte vor der Kodierung, um redundante Embeddings zu vermeiden
- Gibt für jeden Textabschnitt die Top-k-Kandidaten mit Ähnlichkeitswerten zurück

#### 4. **Pre-filter** - Abschnittsreduzierung
- Begrenzt Textabschnitte auf `max_spans_per_technique` (Standard 2) pro Kandidatentechnik
- Behält die am höchsten bewerteten Abschnitte pro Kandidat bei, um die Beweisqualität zu erhalten
- Reduziert Mapper-LLM-Aufrufe um ~46 % bei minimalem Technikverlust

#### 5. **DiscoveryAgent** - LLM-Erkennung (bedingt)
- Wird ausgelöst, wenn die Abrufkonfidenz niedrig ist (<0,7 Durchschnitt)
- Verwendet LLM, um Techniken zu entdecken, die die Vektorsuche übersehen hat
- Einzelner Batch-Aufruf für alle Abschnitte mit niedriger Konfidenz

#### 6. **BatchMapperAgent** - Technik-Mapping (LLM)
- Verarbeitet Textabschnitte in Batches von bis zu 10 (`MAX_MAPPER_BATCH_SIZE`, Standard seit 2026-05 von 25 reduziert, um Cloud-LLM-Abschneiden zu begrenzen)
- Extrahiert ALLE relevanten Techniken pro Abschnitt mit Konfidenzwerten
- Verwendet JSON-Schema-Validierung für strukturierte Ausgabe

#### 7. **EvidenceVerifierAgent** - Beweisvalidierung
- Musterbasierte Überprüfung von Zitaten und Zeilenreferenzen
- Bewertet die Beweisqualität auf einer 40-100-Punkte-Skala
- Keine LLM-Aufrufe – Regex- und Textabgleich

#### 8. **ConsolidatorAgent** - Beweiskonsolidierung
- Führt doppelte Techniken zusammen, die in mehreren Abschnitten gefunden wurden
- Aggregiert Beweise mittels Jaccard-Ähnlichkeit (>85 % Schwelle)
- Erzeugt endgültige Technikliste mit konsolidierten Konfidenzwerten

#### 9. **AttackFlowSynthesizer** - Sequenzgenerierung (LLM)
- Analysiert zeitliche Marker („zuerst“, „dann“, „nachdem“)
- Leitet kausale Beziehungen aus der Erzählung ab
- Erstellt STIX-Attack-Flow-Objekte mit probabilistischen Kanten
- Fällt auf Co-Occurrence-Modellierung zurück, wenn die Sequenz unklar ist

### Leistungsoptimierungen

- **Smart Chunking**: Dokumente in 2KB-Chunks mit Überlappung aufgeteilt
- **Batch-Verarbeitung**: Mapper verarbeitet bis zu 25 Textabschnitte pro LLM-Aufruf
- **Parallele Verarbeitung**: Chunks werden gleichzeitig über Worker-Threads verarbeitet
- **Response-Caching**: LLM-Antworten werden zwischengespeichert, um doppelte Aufrufe zu vermeiden
- **Früher Abbruch**: Hochkonfidente Extraktionen überspringen die Verifikation
- **TechniqueCache**: Alle ATT&CK-Techniken werden beim Start geladen für O(1)-Lookups
- **Pre-filter**: Begrenzt Textabschnitte pro Kandidatentechnik vor dem LLM-Mapper (46 % weniger Aufrufe)
- **Batch-Embedding**: Technik-Embeddings werden in Batches generiert (2-5x schneller)
- **Verbindungspooling**: Gemeinsame Neo4j/OpenSearch-Verbindungen über verschiedene Anfragen hinweg
- **UNWIND-Batches**: Neo4j-Schreibvorgänge werden über UNWIND in Batches zusammengefasst (30-40 Abfragen → 6-7)
- **Modell-Vorwärmen**: Embedding-Modell wird beim Start geladen, um Kaltstartverzögerungen zu vermeiden

### Verarbeitungszeiten

| Dokumentengröße | Verarbeitungszeit | Extrahierte Techniken |
|--------------|-----------------|---------------------|
| Klein (<5KB) | 10-20 Sekunden | 5-10 Techniken |
| Mittel (5-15KB) | 20-40 Sekunden | 10-15 Techniken |
| Groß (>15KB) | 30-60 Sekunden | 15-25 Techniken |

## Co-Occurrence-Analyse

Bandjacks bietet Analysen zum Verständnis von Technikbeziehungen. 

> **Hinweis:** Analysen erfordern `AttackEpisode`- und `AttackAction`-Daten in Neo4j. Diese werden erstellt, wenn:
> - Berichte durch die Extraktions-Pipeline verarbeitet werden
> - Angriffsflüsse über `/v1/flows/build` erstellt werden
> - STIX-Bundles mit Angriffsepisoden importiert werden
>
> Wenn keine Episoden vorhanden sind, geben die Analysen leere Ergebnisse zurück.

### Globale Co-Occurrence

Berechne, welche Techniken häufig gemeinsam in allen Angriffsepisoden auftauchen:```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}")

Bedingte Wahrscheinlichkeit

Berechne P(B|A) - gegeben technique A wurde verwendet, wie hoch ist die Wahrscheinlichkeit von technique B:```python response = httpx.get( "http://localhost:8000/v1/analytics/cooccurrence/conditional", params={"technique_id": "attack-pattern--abc123", "limit": 25} )

root@kitploit:~
### Technikbündel

Identifizieren Sie häufig gemeinsam auftretende Technikbündel (3-5 Techniken):```python
response = httpx.post(
    "http://localhost:8000/v1/analytics/cooccurrence/bundles",
    json={"min_support": 3, "min_size": 3, "max_size": 5}
)

Akteursspezifische Analyse

Analysieren Sie Technikmuster für bestimmte Bedrohungsakteure:```python response = httpx.post( "http://localhost:8000/v1/analytics/cooccurrence/actor", json={"intrusion_set_id": "intrusion-set--xyz789", "min_support": 1} )

root@kitploit:~
## Human-in-the-Loop-Überprüfungssystem

Bandjacks umfasst ein umfassendes Überprüfungssystem zur Validierung extrahierter Informationen:

### Einheitliche Überprüfungsoberfläche

Das Überprüfungssystem präsentiert alle extrahierten Elemente in einer einzigen Oberfläche:```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

Überprüfungsfunktionen

  • Beweislinks: Direkte Links zum Quelltext mit Zeilennummern
  • Konfidenzanpassung: Konfidenzwerte basierend auf Analystenwissen ändern
  • Massenoperationen: Mehrere Elemente für Stapelgenehmigung/-ablehnung auswählen
  • Tastaturkürzel: A (genehmigen), R (ablehnen), E (bearbeiten), Leertaste (nächstes)
  • Fortschrittsverfolgung: Visuelle Indikatoren des Überprüfungsabschlusses
  • Filtern: Nach Typ, Konfidenzniveau oder Status filtern

API-Integration```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. Suche nach Techniken

Suche nach ATT&CK-Techniken mit natürlicher Sprache:```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. Graph-Abfragen

Durchsuchen Sie den Wissensgraph nach Beziehungen:```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. Erstellen von AttackFlow Modellen

Erstellen Sie Ko-Vorkommensmodelle, die zeigen, wie Bedrohungsakteure Techniken gemeinsam einsetzen:```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'])}")

Massen-Generierung: Generieren Sie Flows für alle Bedrohungsakteure mit Techniken:```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-Modelle verwenden **Ko-Vorkommen** anstelle einer sequenziellen Reihenfolge, da Angriffssätze keine inhärenten Sequenzinformationen enthalten. Techniken werden verbunden durch:
- **Intra-Taktik-Kanten**: Zwischen Techniken innerhalb derselben Kill-Chain-Taktik
- **Cross-Taktik-Kanten**: Zwischen Techniken über benachbarte Taktiken hinweg
- **Hub-Spoke-Muster**: Für große Technikmengen, um Kantenexplosion zu vermeiden

Siehe den [AttackFlow Generation Guide](https://github.com/blevene/bandjacks/blob/main/docs/ATTACKFLOW_GENERATION.md) für detaillierte Nutzung.

## Unterstützte Eingabeformate

Die Extraktionspipeline unterstützt mehrere Eingabeformate:

- **Plain Text** - Direkter Textinhalt
- **Markdown** - Formatierte Markdown-Dokumente
- **PDF** - Über pdfplumber-Extraktion
- **HTML** - Über BeautifulSoup-Parsing
- **JSON** - Strukturierte Datenextraktion

### Aus Plain Text extrahieren```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
}))

Auszug aus 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:~
### Auszug aus 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")

Stapelverarbeitungsberichte```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:~
### Erstellen von Angriffsflüssen```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")

Tests

Führen Sie die Testsuite aus, um Ihre Installation zu überprüfen:```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:~
## API-Endpunkte

### Kern-Endpunkte

- `POST /v1/stix/load/attack` - Lade MITRE ATT&CK-Daten
- `POST /v1/reports/ingest` - Synchrones Berichts-Einlesen (<5KB)
- `POST /v1/reports/ingest_async` - Asynchrones Berichts-Einlesen (>5KB)
- `POST /v1/reports/ingest/upload` - PDF/TXT-Dateien hochladen
- `GET /v1/reports/jobs/{id}/status` - Jobstatus prüfen
- `POST /v1/reports/{id}/unified-review` - Überprüfungsentscheidungen einreichen
- `POST /v1/search/ttx` - Nach Techniken suchen
- `GET /v1/graph/technique/{id}` - Technikdetails abrufen

### Angriffsflüsse

- `POST /v1/flows/build` - Generiere AttackFlow-Kooccurrenz-Modelle
- `GET /v1/flows/{flow_id}` - Rufe spezifische AttackFlow-Details ab
- `POST /v1/flows/search` - Suche nach ähnlichen Angriffsflüssen
- `GET /v1/flows/dump` - Massenexport von Flüssen mit Paginierung und Filterung

### Analysen

- `GET /v1/analytics/cooccurrence/global` - Globale Kooccurrenz-Metriken
- `GET /v1/analytics/cooccurrence/conditional` - Bedingte Wahrscheinlichkeiten
- `GET /v1/analytics/cooccurrence/bundles` - Technikbündel
- `GET /v1/analytics/cooccurrence/actor` - Akteur-spezifische Muster
- `GET /v1/coverage/gaps` - Technik-Abdeckungslücken

### Verteidigung & Erkennung

- `GET /v1/defense/technique/{id}` - Verteidigungsempfehlungen abrufen
- `GET /v1/detections/technique/{id}` - Erkennungsstrategien
- `POST /v1/sigma/validate` - Sigma-Regeln validieren

### Überwachung

- `GET /health` - Basis-Gesundheitscheck
- `GET /health/live` - Kubernetes-Liveness-Probe
- `GET /health/ready` - Kubernetes-Readiness-Probe
- `GET /health/components/{component}` - Einzelne Komponenten-Gesundheit
- `GET /v1/costs/stats` - LLM-Kostenverfolgung (tägliche Aggregation nach Modell)
- `GET /v1/cache/stats` - LLM-Cache-Statistiken abrufen
- `POST /v1/cache/clear` - LLM-Cache leeren
- `GET /v1/compliance/report` - Compliance-Metriken
- `GET /v1/drift/status` - Drift-Erkennungsstatus
- `GET /v1/ml-metrics/performance` - ML-Modellmetriken

### Akteure & Herkunft

- `GET /v1/actors` - Bedrohungsakteure auflisten
- `GET /v1/actors/{id}` - Akteurdetails abrufen
- `GET /v1/provenance/{object_id}` - Objekt-Herkunft
- `GET /v1/provenance/{object_id}/lineage` - Vollständige Abstammungskette
- `GET /v1/provenance/{object_id}/evidence` - Beweisschnipsel

### Nur-API-Funktionen (Keine UI/CLI)

Diese Endpunkte sind voll funktionsfähig, werden aber nur über die REST-API aufgerufen (keine Frontend-Seiten oder CLI-Befehle):

#### Angriffspfad-Simulation
- `POST /v1/simulation/paths` - Simuliere Angriffspfade von einer Starttechnik/-gruppe
- `POST /v1/simulation/predict` - Sage die nächsten wahrscheinlichen Techniken basierend auf dem aktuellen Zustand voraus
- `POST /v1/simulation/whatif` - Was-wäre-wenn-Analyse für Verteidigungsszenarien
- `POST /v1/simulation/scenario` - Simuliere aus Gruppen/Software/Techniken-Sets
- `GET /v1/simulation/statistics/{technique_id}` - Techniknutzungsstatistiken
- `GET /v1/simulation/groups/{group_id}/patterns` - Gruppenangriffsmuster
- `POST /v1/simulation/compare` - Vergleiche mehrere Angriffspfade

#### MDP-Richtlinie & Rollout
- `POST /v1/simulate/rollout` - PTG-Rollout-Simulation
- `POST /v1/simulate/mdp` - Berechne die optimale MDP-Verteidigungsrichtlinie
- `GET /v1/simulate/models` - Liste verfügbare PTG-Modelle auf

#### Drift-Erkennung & Überwachung
- `GET /v1/drift/status` - Aktueller Drift-Status über alle Metriken
- `POST /v1/drift/analyze` - Drift-Analyse mit benutzerdefinierten Schwellwerten ausführen
- `GET /v1/drift/alerts` - Aktive Drift-Warnungen abrufen
- `POST /v1/drift/alerts/{alert_id}/acknowledge` - Warnung bestätigen
- `GET /v1/drift/metrics/{metric_name}` - Spezifische Drift-Metrik abrufen

#### ML-Metrikverfolgung
- `POST /v1/ml-metrics/prediction` - Modellvorhersage zur Nachverfolgung aufzeichnen
- `POST /v1/ml-metrics/review` - Metriken zu Überprüfungsentscheidungen aufzeichnen
- `POST /v1/ml-metrics/coverage-gap` - Abdeckungslücke aufzeichnen
- `GET /v1/ml-metrics/performance` - Modellleistungsmetriken abrufen
- `GET /v1/ml-metrics/dashboard` - Dashboard-Metriken exportieren

#### Benachrichtigungen
- `GET /v1/notifications/history` - Benachrichtigungsverlauf abrufen
- `POST /v1/notifications/clear-history` - Benachrichtigungsverlauf löschen
- `GET /v1/notifications/config` - Benachrichtigungskonfiguration abrufen
- `POST /v1/notifications/test` - Testbenachrichtigung senden

#### Vektoraktualisierungsmanagement
- `GET /v1/vectors/status` - Status des Vektoraktualisierungssystems
- `GET /v1/vectors/metrics` - Detaillierte Vektoraktualisierungsmetriken
- `POST /v1/vectors/update` - Vektoraktualisierung manuell auslösen
- `POST /v1/vectors/process-batch` - Batch-Verarbeitung erzwingen
- `DELETE /v1/vectors/queue` - Ausstehende Aktualisierungswarteschlange leeren
- `GET /v1/vectors/health` - Gesundheitscheck des Vektorsystems

#### Entitäts-Ignorierliste
- `GET /v1/ignorelist` - Aktuellen Ignorierlistenstatus abrufen
- `POST /v1/ignorelist/add` - Entität zur Ignorierliste hinzufügen
- `DELETE /v1/ignorelist/remove` - Entität aus der Ignorierliste entfernen
- `POST /v1/ignorelist/reload` - Ignorierliste von der Festplatte neu laden

#### Kandidatenmuster-Überprüfung
- `GET /v1/review/candidates` - Kandidaten-Angriffsmuster auflisten
- `POST /v1/review/candidates` - Kandidatenmuster erstellen
- `GET /v1/review/candidates/{id}` - Kandidatendetails abrufen
- `POST /v1/review/candidates/{id}/approve` - Kandidaten genehmigen
- `POST /v1/review/candidates/{id}/reject` - Kandidaten ablehnen
- `GET /v1/review/candidates/{id}/similar` - Ähnliche Muster finden
- `GET /v1/review/candidates/stats/summary` - Kandidatenstatistiken

### Vollständige API-Dokumentation

Greifen Sie auf die vollständige API-Dokumentation zu unter:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- OpenAPI JSON: http://localhost:8000/openapi.json

## Architektur

### Projektstruktur```
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

Komponenten

  1. Extraktions-Pipeline (bandjacks/llm/)

    • extraction_pipeline.py - Hauptorchestrator für Extraktionen
    • chunked_extractor.py - Standard-Chunked-Verarbeitung
    • optimized_chunked_extractor.py - Fortgeschrittene optimierte Verarbeitung
    • agents_v2.py - Kern-Extraktions-Agenten (SpanFinder, Mapper, Consolidator)
    • entity_extractor.py - Entity-Erkennungs-Agent
    • flow_builder.py - Angriffsablauf-Generierung
    • memory.py - Gemeinsamer Arbeitsspeicher
    • cache.py - Zwischenspeicherung von LLM-Antworten
  2. Datenschicht (bandjacks/loaders/)

    • Neo4j-Eigenschaftsgraph für Beziehungen
    • OpenSearch für Vektor-Embeddings
    • STIX 2.1-Datenmodell
  3. API-Schicht (bandjacks/services/api/)

Leistung

  • Extraktionsgeschwindigkeit: 12-40 Sekunden pro Bericht (94 % schneller als v1)
  • Kleine Dokumente: 4-8 Sekunden mit Einzeldurchlauf-Extraktion
  • Cache-Trefferquote: 87,5 % Beschleunigung bei wiederholten Extraktionen
  • Suche: <300 ms für Vektor-Ähnlichkeitssuche
  • Graph-Abfragen: <100 ms für die meisten Traversierungen

Konfiguration

Modellauswahl

Das System unterstützt Cloud-LLMs und jede lokale, OpenAI-kompatible API:```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ät der Anbieter:** Local API > Gemini > OpenAI > LiteLLM Proxy.
Wenn ein lokaler Server konfiguriert ist, werden Cloud-Anbieter automatisch als Fallbacks hinzugefügt.

#### Allgemeine Beispiele für lokale Server

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

### Extraktionskonfiguration

Das System verwendet eine einzelne leistungsstarke asynchrone Pipeline mit konfigurierbaren Optionen:```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)
}

Kostenoptimierung

Die Extraktionspipeline verfolgt die LLM-Kosten über litellm.completion_cost() mit Metriken pro Bericht und einem täglichen aggregierten Endpunkt.

Kostenkontrollen:

Überwachung:```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:~
### Konfidenzschwellen

Steuern Sie die Extraktionsqualität:```python
{
    "confidence_threshold": 50.0,  # Minimum confidence (0-100)
    "auto_ingest": True            # Auto-add high-confidence results
}

Gesundheitsüberwachung

Die API bietet umfassende Endpunkte zur Gesundheitsüberwachung für die Betriebsaufsicht und Kubernetes-Bereitstellungen:

Gesundheitsendpunkte```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:~
### Beispiel für eine Gesundheitsantwort```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
      }
    }
  }
}

Statusstufen

  • gesund: Komponente voll funktionsfähig
  • beeinträchtigt: Teilweise funktionsfähig (z. B. fehlende Indizes, aber betriebsbereit)
  • ungesund: Komponente ausgefallen oder nicht erreichbar

Kubernetes-Integration

Für Kubernetes-Bereitstellungen konfigurieren Sie die Probes wie folgt:```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:~
## Leistungsoptimierung

### Caching

Das System beinhaltet automatisches LLM-Antwort-Caching für verbesserte Leistung:```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")

Leistungsprofile

Wählen Sie ein Profil basierend auf Ihren Anforderungen:```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:~
## Sicherheit

### Eingabevalidierung

- **Prävention von Cypher-Injection**: Alle Graph-Abfrage-Endpunkte validieren benutzerseitig bereitgestellte `relationship_types`-Parameter gegen eine Whitelist bekannter Beziehungstypen (USES, MITIGATES, HAS_TACTIC, etc.) sowie ein strenges Regex-Muster (`^[A-Z][A-Z0-9_]*$`). Ungültige Eingaben geben 400 zurück, bevor die Abfrage erstellt wird.
- **JSON-Schema-Validierung**: LLM-Antworten werden gegen JSON-Schemata validiert, um fehlerhafte Daten am Eintritt in die Pipeline zu hindern.
- **ADM-Validierung**: Alle STIX-Inhalte müssen vor der Aufnahme die ATT&CK-Datenmodell-Validierung bestehen.

### Authentifizierung & Autorisierung

- **JWT-Authentifizierung**: Optionale Middleware für die API-Authentifizierung (`JWTAuthMiddleware`)
- **Ratenbegrenzung**: Pro-Endpunkt-Ratenbegrenzung mit konfigurierbaren Schwellenwerten
- **CORS**: Konfigurierbares Cross-Origin Resource Sharing

## Erweiterte Funktionen

### Herkunftsverfolgung

Jede extrahierte Entität enthält die vollständige Herkunft:```python
# Get provenance for an object
response = httpx.get(
    "http://localhost:8000/v1/provenance/attack-pattern--abc123"
)

Aktives Lernen

Das System enthält eine Überprüfungswarteschlange zur Verbesserung der Extraktion:```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:~
### Abdeckungsanalysen

Analysieren Sie Ihre Threat-Intelligence-Abdeckung:```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']}%")

Hinweis: Plattformabdeckung (_analyze_platforms_coverage) gibt derzeit Platzhalterdaten zurück. Taktik- und Gruppenabdeckung verwenden echte Neo4j-Abfragen.

Angriffssimulation (Experimentell)

Das Simulationsmodul bietet MDP-basierte Angriffspfadvorhersage:```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:~
## Feature Status

Dieser Abschnitt bietet Transparenz über den Implementierungsstatus verschiedener Funktionen:

### Voll funktionsfähig ✅
- **Report Extraction Pipeline** - LLM-basierte Technik-Extraktion funktioniert durchgängig
- **MITRE ATT&CK Loading** - Lädt Enterprise/Mobile/ICS ATT&CK-Daten in Neo4j
- **Vector Search** - OpenSearch-basierte semantische Suche nach Techniken
- **Review System** - Human-in-the-Loop-Review-Workflow über API und UI
- **Health Monitoring** - Komponenten-Gesundheitschecks und Kubernetes-Probes
- **CLI Query/Admin Commands** - Suche, Graph-Traversal, Cache-Verwaltung
- **Attack Flow Generation** - Ko-Okkurrenz-basierte Flow-Erstellung für Intrusion-Sets
- **Attack Simulation** - MDP-basierte Pfadsimulation über `/simulation/*` und `/simulate/*`
- **Coverage Reports** - JSON-Berichte für Executive, Technical, Tactical, Operational Views

### Funktional mit Datenabhängigkeiten ⚠️
- **Co-occurrence Analytics** - Benötigt `AttackEpisode`-Knoten aus der Report-Verarbeitung
- **Actor Analytics** - Benötigt Episoden, die Intrusion-Sets zugeordnet sind
- **Technique Bundles** - Benötigt ausreichende Episodendaten für Mustererkennung
- **CLI Analytics Commands** - Funktioniert, gibt aber leer zurück, wenn keine Episoden existieren

### Nur API (keine UI/CLI) 🔌
Diese Funktionen sind vollständig implementiert und nur über die REST-API zugänglich:
- **Attack Path Simulation** - `/simulation/*`-Routen für Pfadvorhersage und Was-wäre-wenn-Analyse
- **MDP Policy Solver** - `/simulate/mdp` zur optimalen Berechnung von Abwehrstrategien
- **Drift Detection** - `/drift/*`-Routen zur Überwachung von Datenqualitätsdrift
- **ML Metrics** - `/ml-metrics/*` zur Verfolgung der Modellleistung im Zeitverlauf
- **Vector Management** - `/vectors/*` zur Verwaltung von Vektor-Embeddings
- **Entity Ignorelist** - `/ignorelist/*` zum Filtern von False-Positive-Entitäten
- **Candidate Patterns** - `/review/candidates/*` für neuartige Technikkandidaten
- **Notifications** - `/notifications/*` zur Alarmkonfiguration und -historie
- **Provenance** - `/provenance/*` zur Nachverfolgung der Extraktionsherkunft
- **Compliance** - `/compliance/*` zur Berichterstattung von Compliance-Kennzahlen

### Experimentell (in `llm/experimental/`) 🧪
- **PTG (Probabilistic Threat Graph)** - Kernlogik implementiert, begrenzte Tests
- **Judge Integration** - LLM-basierte Sequenzvalidierung
- **Attack Flow Simulator** - Flow-basierte Simulationsengine
- **Sequence Extractor** - Sequenzen aus Flows extrahieren

### Entfernt/Bereinigt 🗑️
Die folgenden Stub-Funktionen wurden aus der API entfernt:
- ~~Platform Coverage Analysis~~ - Gab hartcodierte Stub-Daten zurück
- ~~Trend Analysis~~ - Gab zufällige synthetische Daten zurück
- ~~CSV/PDF Report Export~~ - Gab 501 zurück; jetzt nur noch JSON
- ~~Gemini Sequence Inference~~ - War 501-Stub; stattdessen `/sequence/propose` verwenden

### Konnektivitätsmatrix

| Feature Area | Frontend UI | CLI | REST API |
|--------------|-------------|-----|----------|
| Report Management | ✅ | ✅ | ✅ |
| Review Workflow | ✅ | ✅ | ✅ |
| Search (TTX) | ✅ | ✅ | ✅ |
| Co-occurrence Analytics | ✅ | ✅ | ✅ |
| Coverage Analytics | ✅ | - | ✅ |
| Health Monitoring | ✅ | - | ✅ |
| Detections/Sigma | ✅ | - | ✅ |
| Attack Flows | ✅ | - | ✅ |
| Defense Overlay | ✅ | - | ✅ |
| Sequences/PTG | ✅ | - | ✅ |
| Actors | ✅ | - | ✅ |
| Attack Simulation | - | - | ✅ |
| Drift Detection | - | - | ✅ |
| ML Metrics | - | - | ✅ |
| Vector Management | - | - | ✅ |
| Entity Ignorelist | - | - | ✅ |
| Candidate Patterns | - | - | ✅ |
| Notifications | - | - | ✅ |
| Provenance | - | - | ✅ |
| Compliance | - | - | ✅ |

### Frontend-Seiten
| Seite | Status | Anmerkungen |
|------|--------|-------|
| `/reports` | ✅ Funktioniert | Reports auflisten, erstellen, anzeigen |
| `/reports/[id]/review` | ✅ Funktioniert | Vollständiger Review-Workflow |
| `/analytics/cooccurrence` | ⚠️ Datenabhängig | Zeigt KPIs, wenn Episoden existieren |
| `/analytics/cooccurrence/pairs` | ⚠️ Datenabhängig | Ruft echte API auf |
| `/analytics/cooccurrence/bundles` | ⚠️ Datenabhängig | Ruft echte API auf |
| `/analytics/cooccurrence/actors` | ⚠️ Datenabhängig | Ruft echte API auf |
| `/health` | ✅ Funktioniert | Echtzeit-Gesundheitsstatus |

## Fehlerbehebung

### Häufige Probleme

1. **OpenSearch-Verbindung fehlgeschlagen**
   - Stellen Sie sicher, dass OpenSearch läuft: `curl http://localhost:9200`
   - Überprüfen Sie, ob der Index existiert: `curl http://localhost:9200/bandjacks_attack_nodes-v1`

2. **Neo4j-Verbindung fehlgeschlagen**
   - Überprüfen Sie, ob Neo4j läuft: `neo4j status`
   - Stellen Sie sicher, dass `NEO4J_PASSWORD` in der `.env`-Datei gesetzt ist
   - Stellen Sie sicher, dass das Passwort mit Ihrer Neo4j-Instanz übereinstimmt
   - Falls "NEO4J_PASSWORD environment variable is required" angezeigt wird, setzen Sie es in Ihrer `.env`-Datei

3. **Niedriger Extraktions-Recall**
   - Stellen Sie sicher, dass Sie die Methode `agentic_v2` verwenden
   - Überprüfen Sie, ob der LLM-API-Key gültig ist
   - Überprüfen Sie, ob der Modellname korrekt ist (`gemini-flash-latest`)

4. **Timeout-Fehler**
   - Erhöhen Sie die Timeout-Einstellungen für große Dokumente
   - Erwägen Sie, sehr große Reports in Chunks aufzuteilen

5. **Frontend verbindet sich nicht mit der API**
   - Stellen Sie sicher, dass die API auf Port 8000 läuft
   - Überprüfen Sie die CORS-Einstellungen in der API-Konfiguration

### Debug-Modus

Aktivieren Sie detailliertes Logging:```python
import logging
logging.basicConfig(level=logging.DEBUG)

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

Entwicklung

Tests ausführen```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:~
### Mitwirken

1. Repository forken
2. Feature-Branch erstellen
3. Änderungen vornehmen
4. Tests ausführen: `uv run pytest`
5. Linting ausführen: `uv run ruff check`
6. Pull-Request einreichen

### Codequalität```bash
# Format code
uv run ruff format

# Check linting
uv run ruff check

# Type checking
uv run mypy bandjacks

Lizenz

[Ihre Lizenz hier]

Unterstützung

  • Schnellstart: docs/QUICKSTART.md
  • Vollständige Einrichtung: docs/SETUP.md
  • API-Dokumentation: http://localhost:8000/docs (wenn die Anwendung läuft)
  • GitHub Issues: [Fehler melden oder Funktionen anfragen]

Danksagungen

  • MITRE ATT&CK®-Framework
  • D3FEND-Ontologie
  • STIX 2.1-Spezifikation
Tool herunterladen
  • FastAPI-REST-Endpunkte
  • WebSocket-Unterstützung für Echtzeit-Updates
  • Umfassende OpenAPI-Dokumentation
  • Frontend (ui/)

    • Next.js 15 mit App Router
    • React Query für Datenabruf
    • Radix UI + Tailwind für Komponenten
    • ReactFlow für Graphenvisualisierung
  • OptionStandardEffektQualitätsauswirkung
    MAX_MAPPER_BATCH_SIZE (env var)10Spans pro LLM-Mapper-Aufruf (gesenkt von 25 im Mai 2026; Cloud-Antworten begrenzen auf ~800 Token, ~12% der größeren Batches lieferten abgeschnittenes JSON zurück)Keine
    max_spans_per_technique (config)2Vorfilter: beste N Spans pro Kandidatentechnik~19% weniger Techniken, höhere Konfidenz
    enable_span_dedup (config)falseEntfernen von doppelten Span-Texten vor dem Mapping~15% weniger Techniken