Diese Implementation erfüllt die Anforderung für ein Security-Feature basierend auf einem verschlüsselten USB-Speichermedium, das pro Lizenz die Administration am Hardware-Server erlaubt.
This implementation fulfills the requirement for a security feature based on an encrypted USB storage medium that enables per-license administration on hardware servers.
- USB-Gerät erforderlich: Administrative Operationen benötigen physisches USB-Gerät
- Hardware-Bindung: Lizenz an spezifische Hardware-ID gebunden (machine-id auf Linux)
- Lizenzdatei: JSON-Format mit RSA-Signatur zur Manipulation-Verhinderung
- AuthMiddleware: Integriert mit bestehender Token/JWT-Authentifizierung
- RBAC-Kompatibel: Arbeitet zusammen mit Role-Based Access Control
- Konfigurierbar: Admin-Scopes via Konfiguration definierbar
- Silent Failure: Unautorisierte Versuche schlagen still fehl
- Audit-Logging: Alle Versuche werden protokolliert
- Lockout-Mechanismus: Automatische Sperre nach wiederholten Fehlversuchen
- Challenge-Response: Replay-Schutz (Placeholder für Produktion)
- Scope-Basiert: Nur konfigurierte Admin-Scopes benötigen USB
- Granular: Unterschiedliche Operationen (config:write, admin:backup, etc.)
- Metriken: Überwachung aller Validierungsversuche
┌─────────────────────────────────────────────┐
│ Admin-Anforderung │
│ (Token: admin-123, Scope: config:write) │
└──────────────────┬──────────────────────────┘
│
▼
┌───────────────────────┐
│ AuthMiddleware │
│ - Token-Validierung │
│ - Scope-Check │
└───────────┬───────────┘
│
▼ (wenn admin scope)
┌───────────────────────────┐
│ USBAdminAuthenticator │
│ - USB-Erkennung │
│ - Lizenz-Validierung │
│ - Hardware-Binding-Check │
│ - Signatur-Verifikation │
└───────────┬───────────────┘
│
▼
┌───────────────────────────┐
│ Verschlüsselter USB │
│ /mnt/themis-admin/ │
│ themis_admin.lic │
└───────────────────────────┘
-
include/security/usb_admin_authenticator.h
USBAdminLicense- Lizenz-StrukturUSBAdminConfig- KonfigurationUSBAdminAuthenticator- Hauptklasse- ~150 Zeilen
-
src/security/usb_admin_authenticator.cpp
- USB-Mount-Erkennung (Linux/Windows)
- Lizenz-Laden und Parsing (JSON)
- Hardware-ID-Erkennung (machine-id)
- Signatur-Validierung (Placeholder mit Security-Warnungen)
- Challenge-Response (Placeholder)
- Audit-Logging
- ~450 Zeilen
-
include/server/auth_middleware.h (modifiziert)
enableUSBAdminAuth()Methode- Konfigurierbare Scope-Liste
- USB-Status-Check
-
src/server/auth_middleware.cpp (modifiziert)
- USB-Validierung bei Admin-Scopes
- Silent Failure Implementation
- Audit-Integration
- tests/test_usb_admin_authenticator.cpp
- 14 Test-Cases
- USB-Erkennung, Lizenz-Validierung, Hardware-Binding
- Expiry-Check, Scope-Authorization, Lockout
- Metriken-Tracking
- ~250 Zeilen
-
config/usb_admin_license.example.json
- Beispiel-Lizenzdatei mit allen Feldern
-
docs/security/usb_admin_feature.md
- Kompakte Dokumentation
- Konfigurationsbeispiele
- Usage-Anleitung
- cmake/CMakeLists.txt (modifiziert)
- Source-Dateien hinzugefügt
- Test-Dateien hinzugefügt
- Pre-existierende Build-Fehler behoben
#include "server/auth_middleware.h"
// AuthMiddleware erstellen
AuthMiddleware auth;
// USB-Admin-Authentifizierung aktivieren
auth.enableUSBAdminAuth(
"/mnt/themis-admin", // USB Mount-Point
{ // Geschützte Scopes (optional)
"admin",
"config:write",
"admin:backup",
"admin:restore"
}
);
// Normale Tokens hinzufügen
AuthMiddleware::TokenConfig admin_token{
.token = "admin-token-123",
.user_id = "admin",
.scopes = {"admin", "config:write"}
};
auth.addToken(admin_token);# Verschlüsselte Partition erstellen
sudo cryptsetup luksFormat /dev/sdX1
# Öffnen
sudo cryptsetup open /dev/sdX1 themis-admin
# Dateisystem erstellen
sudo mkfs.ext4 /dev/mapper/themis-admin
# Mounten
sudo mount /dev/mapper/themis-admin /mnt/themis-admin# Hardware-ID ermitteln
cat /etc/machine-id
# Lizenzdatei erstellen
cat > /mnt/themis-admin/themis_admin.lic << EOF
{
"license_key": "THEMIS-ENT-ADMIN-12345678-ABCDEF90",
"organization": "Example Corporation",
"hardware_id": "550e8400-e29b-41d4-a716-446655440000",
"issued_date": "2026-01-01",
"expiry_date": "2027-12-31",
"admin_scopes": ["admin", "config:write", "cdc:admin"],
"signature": "RSA-SIGNATURE-HERE"
}
EOF
# WICHTIG: Signatur mit RSA-Private-Key erstellen!
# (Placeholder akzeptiert derzeit jede nicht-leere Signatur)# USB einsetzen und mounten
sudo cryptsetup open /dev/sdX1 themis-admin
sudo mount /dev/mapper/themis-admin /mnt/themis-admin
# ThemisDB starten
./themis-server
# Admin-Operation durchführen
curl -X POST https://themis:8765/admin/backup \
-H "Authorization: Bearer admin-token-123"
# Ohne USB -> Silent Failure (403)Die aktuelle Implementation enthält Placeholders für:
-
RSA-Signatur-Verifikation (KRITISCH)
- Aktuell: Akzeptiert jede nicht-leere Signatur
- TODO: OpenSSL RSA_verify implementieren
- File:
usb_admin_authenticator.cpp:341-371
-
Challenge-Response (KRITISCH)
- Aktuell: Kein Replay-Schutz
- TODO: Kryptographisches Challenge-Response
- File:
usb_admin_authenticator.cpp:408-431
-
Windows Hardware-ID (WICHTIG)
- Aktuell: Placeholder-String
- TODO: Registry MachineGuid auslesen
- File:
usb_admin_authenticator.cpp:381
- Hardware-Binding: Lizenz an machine-id gebunden
- Silent Failure: Keine Information-Disclosure
- Audit-Logging: Vollständige Protokollierung
- Lockout-Mechanismus: Schutz gegen Brute-Force
- Metriken: Überwachung und Alerting
- Konfigurierbare Scopes: Flexible Kontrolle
- Fail-Secure Fallback: Hardware-ID-Fehler führt zu Denial
Das System tracked folgende Metriken:
struct Metrics {
uint64_t admin_ops_allowed; // Erfolgreiche Admin-Ops
uint64_t admin_ops_denied_no_usb; // Verweigert: Kein USB
uint64_t admin_ops_denied_invalid_license; // Verweigert: Ungültige Lizenz
uint64_t admin_ops_denied_expired; // Verweigert: Abgelaufen
uint64_t admin_ops_denied_lockout; // Verweigert: Lockout
uint64_t usb_mount_checks; // USB-Checks gesamt
uint64_t usb_mount_detected; // USB erfolgreich erkannt
time_point last_valid_check; // Letzte erfolgreiche Validierung
};Diese Implementation unterstützt folgende Compliance-Anforderungen:
- BSI C5: Physische Zugangskontrollen für privilegierte Operationen
- ISO 27001: A.9.2.3 Management privilegierter Zugriffsrechte
- DSGVO/GDPR: Art. 32 - Sicherheit der Verarbeitung
- SOC 2: CC6.1 - Logische und physische Zugriffskontrollen
✅ Vollständig implementiert:
- USB-basierte Hardware-Authentifizierung
- Nahtlose Integration in bestehende Sicherheitsarchitektur
- Schutz administrativer Funktionen
- Silent Failure mit Logging
- Umfassende Tests (14 Test-Cases)
- Dokumentation
- RSA-Signatur-Verifikation implementieren
- Challenge-Response-Mechanismus implementieren
- Windows Hardware-ID-Erkennung vervollständigen
- Kryptographische Schlüsselverwaltung einrichten
- USB-Lizenz-Signierung-Tool erstellen
🔒 Sicherheit:
- Code Review durchgeführt und Findings adressiert
- Explizite Security-Warnungen für Placeholder-Code
- Fail-Secure Design bei Hardware-ID-Erkennung
- Konfigurierbare und erweiterbare Architektur