Dokumentation

Willkommen zur Sentinel Scan Dokumentation. Diese Anleitung deckt alles ab – von der Ersteinrichtung bis zur erweiterten API-Nutzung und benutzerdefinierten Regelkonfiguration.

API →Integriere Scan-Cases, Reports, Webhooks und Guard-Bridge-Endpunkte. Die Live-OpenAPI-UI liefert das volle Schema — dieser Hub deckt Quickstart, Auth und Detection Engine V2 ab.

Schnellstart

Die Einrichtung von Sentinel Scan dauert etwa 5 Minuten:

1

Account erstellen

Registriere dich über Discord OAuth oder E-Mail auf der Login-Seite. Dein erster Tenant (Community) wird automatisch erstellt.

2

Discord konfigurieren

Gehe zu Einstellungen → Discord und gib deine Guild-ID und den gewünschten Report-Kanal ein. Der Bot wird mit den nötigen Berechtigungen auf deinen Server eingeladen.

3

Agent bereitstellen

Lade den Scan-Agent über dein Dashboard herunter. Konfiguriere ihn mit deinem API-Key und Server-Endpoint. Der Agent läuft auf Spieler-PCs, wenn er ausgelöst wird.

4

Ergebnisse prüfen

Scan-Ergebnisse erscheinen in deinem Dashboard und Discord-Kanal. Überprüfe Fälle, bestätige Bans oder entlaste Spieler.

Installation

Sentinel Scan ist eine Cloud-gehostete SaaS-Plattform — kein Self-Hosting nötig. Erstelle einfach einen Account und konfiguriere deinen Tenant.

1

Systemanforderungen

Der Scan-Agent erfordert Windows 10+ (64-Bit). Das Dashboard funktioniert in jedem modernen Browser.

2

Agent-Download

Lade den Agent über dein Dashboard oder direkt über die API herunter. Der Agent ist digital signiert und läuft mit minimalen Berechtigungen.

3

Netzwerk-Anforderungen

Der Agent kommuniziert über HTTPS (Port 443) mit der Sentinel Scan API. Stelle sicher, dass ausgehende Verbindungen zu sentinelscan.de erlaubt sind.

Konfiguration

Konfiguriere deine Tenant-Einstellungen, um Sentinel Scan für deine Community anzupassen.

1

Discord-Integration

Verbinde deinen Discord-Server, um Scan-Ergebnisse, Fall-Updates zu erhalten und Scans über Bot-Befehle zu verwalten. Navigiere zu Einstellungen → Discord.

2

API-Keys

Generiere API-Keys unter Einstellungen → API-Keys für programmatischen Zugriff. Keys nutzen das sk_-Präfix und werden über den Authorization-Header gesendet.

3

txAdmin-Integration

Verbinde deine txAdmin-Instanz, um Spieler nachzuschlagen und Bans direkt aus dem Dashboard auszustellen. Navigiere zu Einstellungen → txAdmin.

4

Server

Füge deine Gameserver unter Einstellungen → Server hinzu. Jeder Fall kann einem bestimmten Server zugeordnet werden.

API-Authentifizierung

Alle API-Anfragen erfordern eine Authentifizierung über:

  • JWT Token: JWT-Token: Erhalten über /auth/login oder /auth/discord/callback
  • API Key: API-Key: Generiert unter Einstellungen → API-Keys. Senden als Authorization: Bearer sk_...

Alle Anfragen müssen den Tenant-Header enthalten:

GET /api/v1/cases
Authorization: Bearer eyJhbG...
X-Tenant-ID: your-tenant-uuid

Cases API

GET/api/v1/cases

Fälle mit Paginierung und Filterung auflisten

Query Parameters:
  limit    - Number of results (default: 25, max: 100)
  offset   - Pagination offset
  status   - Filter: pending, in_review, confirmed, cleared, appealed
  search   - Search by Steam ID or player name
  sort     - Sort field: created_at, final_score, status
  order    - Sort order: asc, desc
POST/api/v1/cases

Neuen Fall erstellen und Scan-Token generieren

Body: {
  "player_id": "steam:...",
  "player_name": "Player",
  "reason_type": "suspicious_activity",
  "scan_scope": "full"
}
Response: { id, token, scan_url }
GET/api/v1/cases/:id

Einzelnen Fall per ID abrufen

Response: { id, steam_id, player_name, final_score, status, ... }
PATCH/api/v1/cases/:id/status

Fall-Status aktualisieren

Body: { "status": "confirmed" | "cleared" | "in_review" | "appealed" }
PATCH/api/v1/cases/:id/assign

Fall einem Analysten zuweisen

Body: { "analyst_id": "uuid" }
POST/api/v1/cases/:id/token

Neuen Scan-Token für bestehenden Fall generieren

Response: { token, expires_at, scan_url }
DELETE/api/v1/cases/:id

Fall löschen

Response: 204 No Content
GET/api/v1/cases/stats

Aggregierte Fall-Statistiken abrufen

Response: { total, pending, confirmed, cleared, ... }
POST/api/v1/cases/bulk-delete

Mehrere Fälle gleichzeitig löschen

Body: { "case_ids": ["uuid1", "uuid2"] }
POST/api/v1/cases/bulk-clear

Fälle nach Status massenhaft bereinigen

Body: { "status": "pending" }

Reports API

POST/api/v1/reports

Scan-Bericht einreichen (Agent → Server)

Body: {
  "token": "scan-token-here",
  "result_json": { ... },
  "score_components": "yara:20,hash:10",
  "final_score": 30
}
GET/api/v1/cases/:id/reports

Berichte für einen Fall auflisten

Response: { reports: [...] }

Tenants API

GET/api/v1/tenant

Aktuelle Tenant-Infos und Live-Zähler abrufen

Response: { id, name, slug, plan, member_count, case_count, ... }
PATCH/api/v1/tenant

Tenant-Einstellungen aktualisieren (Name, Akzentfarbe, Einstellungen)

Body: { "name": "My Community", "accent_color": "#5865F2", "settings": {} }
GET/api/v1/tenant/members

Teammitglieder auflisten

Response: { members: [{ user_id, username, role, ... }] }
POST/api/v1/tenant/members

Teammitglied hinzufügen

Body: { "user_id": "uuid", "role": "analyst" }
DELETE/api/v1/tenant/members/:user_id

Teammitglied entfernen

Response: 204 No Content
GET/api/v1/tenant/servers

Tenant-Server auflisten

Response: { servers: [{ id, name, game }] }
POST/api/v1/tenant/servers

Server hinzufügen

Body: { "name": "Server 1", "game": "fivem" }
GET/api/v1/tenant/api-keys

API-Keys auflisten

Response: { api_keys: [{ id, name, prefix, created_at }] }
POST/api/v1/tenant/api-keys

Neuen API-Key erstellen

Body: { "name": "My API Key" }
Response: { key: "sk_..." }
DELETE/api/v1/tenant/api-keys/:key_id

API-Key löschen

Response: 204 No Content
GET/api/v1/tenant/audit-log

Tenant Audit-Log einsehen

Query: limit, offset
Response: { entries: [{ action, actor, created_at, details }] }
GET/api/v1/tenant/plan

Aktuelle Plan-Details und Nutzung abrufen

Response: { plan, limits, usage, features }

Analysen

Zugriff auf Dashboard-Statistiken und Erkennungsmetriken.

GET/api/v1/analytics/dashboard

Dashboard-Statistiken abrufen (Fälle, Scans, Trends)

Response: { total_cases, total_scans, confirmed_rate, trends, ... }
GET/api/v1/analytics/dashboard/enhanced

Erweiterte Analysen mit detaillierten Aufschlüsselungen (Enterprise)

Response: { ... detailed breakdowns by server, time, detection type }
GET/api/v1/detection/stats

Statistiken der Erkennungs-Engine (Regel-Treffer, Trefferquoten)

Response: { rule_matches, hit_rates, top_rules, ... }
GET/api/v1/detection/reputation-stats

Hash-Reputations-Statistiken

Response: { total_hashes, malicious, benign, unknown }

Bewertungsgewichte

Die Bewertungs-Engine verwendet konfigurierbare Gewichte zur Berechnung des finalen Bedrohungs-Scores. Jeder Erkennungstyp trägt einen gewichteten Score bei.

GET/api/v1/scoring-weights

Aktuelle globale Bewertungsgewichte abrufen

Response: { weights: { yara: 30, hash_deny: 25, loader: 20, keyword: 10, ... } }
POST/api/v1/feedback

Bewertungs-Feedback für einen Fall einreichen, um die Genauigkeit zu verbessern

Body: {
  "case_id": "uuid",
  "scanner_score": 75,
  "analyst_score": 90,
  "scanner_verdict": "suspicious",
  "analyst_verdict": "confirmed",
  "feedback_type": "score_correction"
}
POST/api/v1/feedback/finding

Per-Finding Feedback einreichen (Falsch-Positiv / Bestätigt)

Body: {
  "code": "YARA_MATCH",
  "path": "C:\\...",
  "case_id": "uuid",
  "action": "false_positive" | "confirmed"
}

Discord Bot Einrichtung

Der Discord-Bot ermöglicht automatisierte Fallerstellung und Scan-Befehle direkt in deinem Server.

  1. Gehe zu Einstellungen → Discord in deinem Dashboard
  2. Gib deine Discord Guild (Server) ID ein
  3. Gib die Kanal-ID an, in der Scan-Berichte gepostet werden sollen
  4. Optional: Eigenen Bot-Token angeben oder den geteilten Sentinel Scan Bot nutzen
  5. "Auto-Scan bei neuen Beitritten" für automatisches Scannen aktivieren

Bot-Befehle:

  • /scan <steamid> — Scan für einen Spieler auslösen
  • /case <steamid> — Bestehende Fälle nachschlagen
  • /stats — Community Scan-Statistiken anzeigen

Eigene YARA-Regeln

YARA ist eine Evidence-Quelle in Detection Engine V2 — nicht der alleinige Decision-Kern. Signierte, versionierte Rule-Bundles treffen bekannte Cheat-Tools und Injektoren; schwache Treffer allein erzeugen keine Findings.

rule DetectCheatLoader {
    meta:
        description = "Detects common cheat loader pattern"
        severity = "high"
        score = 30
    strings:
        $inject = "inject.dll" nocase
        $loader = "loader.exe" nocase
    condition:
        any of them
}

Lade eigene Regeln über die Threat-Intel-Seite oder die API hoch unter POST /api/v1/intel/sources

GET/api/v1/rules/yara

Aktuelle YARA-Regeln abrufen

Response: { rules: "rule ... { ... }" }
PUT/api/v1/rules/yara

YARA-Regeln aktualisieren

Body: { "rules": "rule ... { ... }" }
GET/api/v1/rules/versions

Regel-Versionshistorie einsehen

Query: type=yara
Response: { versions: [{ id, created_at, type }] }
POST/api/v1/rules/test

Regeln live gegen einen Bericht testen

Body: { "report": { ... } }
Response: { matches: [...], score: 42 }

Bedrohungsintelligenz

Verwalte externe Threat-Intelligence-Quellen. Quellen werden automatisch synchronisiert und in die Erkennungs-Engine integriert.

GET/api/v1/intel/sources

Threat-Intel-Quellen auflisten (eigene + globale)

Response: { sources: [{ id, name, source_type, url, last_synced }] }
GET/api/v1/intel/items

Threat-Intel-Einträge auflisten

Query: limit, source_id
Response: { items: [...] }
POST/api/v1/intel/sources

Neue Threat-Intel-Quelle hinzufügen

Body: { "name": "My Intel", "source_type": "yara_repo", "url": "https://..." }
POST/api/v1/intel/sources/:id/sync

Bestimmte Intel-Quelle synchronisieren

Response: { synced_items: 42 }
POST/api/v1/intel/sync

Alle aktiven Intel-Quellen synchronisieren

Response: { queued: true }

Whitelist

Verwalte Whitelist-Einträge, um bekanntermaßen sichere Dateien, Prozesse oder Spieler von der Erkennung auszuschließen.

GET/api/v1/whitelist

Whitelist-Einträge auflisten (nach Typ filtern)

Query: type=hash|process|player
Response: { entries: [...] }
POST/api/v1/whitelist

Whitelist-Eintrag hinzufügen

Body: { "entry_type": "hash", "value": "abc123...", "reason": "Known safe" }
DELETE/api/v1/whitelist/:entry_id

Whitelist-Eintrag entfernen

Response: 204 No Content

Spieler-Historie

Verfolge die Scan-Historie eines Spielers über mehrere Fälle hinweg.

GET/api/v1/player-history

Spieler-Historie per Discord-ID, Lizenz oder Spieler-ID nachschlagen

Query: discord_id | license | player_id
Response: { history: [{ case_id, status, score, created_at }] }

Massen-Scan-Warteschlange

Stelle mehrere Spieler gleichzeitig zum Scannen in die Warteschlange.

GET/api/v1/bulk-queue

Massen-Scan-Warteschlange auflisten

Response: { queue: [{ id, player_id, status, created_at }] }
POST/api/v1/bulk-queue

Spieler zur Warteschlange hinzufügen

Body: { "player_id": "steam:...", "discord_id": "123", "license": "abc" }
PATCH/api/v1/bulk-queue/:queue_id

Warteschlangen-Element aktualisieren

Body: { "status": "completed" }
DELETE/api/v1/bulk-queue/:queue_id

Spieler aus der Warteschlange entfernen

Response: 204 No Content