Zum Hauptinhalt springen

🔐 Sicherheit

Einführung​

Sicherheit hat in Semaphore UI höchste Priorität. Ob Sie kritische Infrastrukturaufgaben automatisieren oder den Teamzugriff auf sensible Systeme verwalten – Semaphore UI ist darauf ausgelegt, von Haus aus einen robusten und sicheren Betrieb zu bieten. Dieser Abschnitt beschreibt, wie Semaphore mit Sicherheit umgeht und was Sie beim Einsatz in der Produktion beachten sollten.

Authentifizierung & Autorisierung​

Semaphore unterstützt sichere Authentifizierung und flexible Autorisierungsmechanismen:

  • Anmeldemethoden:

    • Benutzername/Passwort
      Standardmethode mit Anmeldedaten, die in der Semaphore-Datenbank gespeichert sind. Passwörter werden niemals im Klartext gespeichert; sie werden mit Argon2id gehasht (siehe Passwort-Hashing).

    • LDAP
      Ermöglicht die Integration mit Unternehmensverzeichnisdiensten. Unterstützt Benutzer-/Gruppenfilterung und sichere Verbindungen über LDAPS.

    • OpenID Connect (OIDC)
      Ermöglicht Single Sign-on mit Identitätsanbietern wie Google, Azure AD oder Keycloak. Unterstützt benutzerdefinierte Claims und Gruppenzuordnungen.

  • Zwei-Faktor-Authentifizierung (2FA)
    TOTP-basierte 2FA ist verfügbar und wird für alle Benutzer empfohlen. Sie kann pro Benutzer aktiviert werden und unterstützt optionale Wiederherstellungscodes. Siehe die Konfigurationsoptionen mfa.totp.enabled und mfa.totp.allow_recovery.

  • Rollenbasierte Zugriffskontrolle
    Sie können Benutzern unterschiedliche Rollen wie Admin, Maintainer oder Viewer zuweisen und so den Zugriff entsprechend der Verantwortung einschränken.

  • Sitzungsverwaltung
    Sitzungen werden durch sichere HTTP-Cookies geschützt. Sitzungsablauf und Abmeldemechanismen sorgen für eine minimale Angriffsfläche.

Passwort-Hashing​

Seit v2.20

Argon2id-Passwort-Hashing ist seit Semaphore 2.20 verfügbar. Frühere Versionen verwenden bcrypt.

Passwörter lokaler Benutzer werden mit Argon2id gehasht, dem von OWASP für die Passwortspeicherung empfohlenen Algorithmus. Semaphore verwendet die OWASP-Mindestparameter:

ParameterWert
Speicher19 MiB (m=19456)
Iterationen2 (t=2)
Parallelität1 (p=1)
Salt16 zufällige Bytes pro Passwort
Hash-Länge32 Bytes

Hashes werden im standardisierten PHC-String-Format gespeichert, zum Beispiel $argon2id$v=19$m=19456,t=2,p=1$<salt>$<hash>, sodass die für jeden Hash verwendeten Parameter gemeinsam mit ihm festgehalten werden.

Das gilt für jede Art, ein Passwort zu setzen: die Weboberfläche, die API und die CLI-Befehle semaphore user add, semaphore user change-by-login und semaphore setup.

Upgrade von Versionen vor 2.20. Versionen vor 2.20 haben Passwörter mit bcrypt gehasht. Ein Migrationsschritt ist nicht erforderlich:

  • Bestehende bcrypt-Hashes werden bei der Anmeldung weiterhin akzeptiert, sodass alle Benutzer nach dem Upgrade weiterarbeiten können.
  • Bei der ersten erfolgreichen Anmeldung wird das Passwort transparent mit Argon2id neu gehasht und der bcrypt-Hash ersetzt.
  • Wenn die Argon2id-Parameter von Semaphore in einer künftigen Version verstärkt werden, werden mit den älteren Parametern erzeugte Hashes bei der nächsten Anmeldung auf dieselbe Weise aktualisiert.

Da das erneute Hashen nur bei der Anmeldung erfolgt, behalten Benutzer, die sich nie wieder anmelden, ihren bcrypt-Hash. Um ein Upgrade für solche Konten zu erzwingen, setzen Sie deren Passwort mit semaphore user change-by-login --password ... oder über die Admin-Oberfläche zurück.

hinweis

Wiederherstellungscodes für die Zwei-Faktor-Authentifizierung sind keine Benutzerpasswörter und verwenden weiterhin bcrypt.

Geheimnisse & Anmeldedaten​

Die sichere Verwaltung von Geheimnissen ist eine Kernfunktion:

  • Verschlüsselter Schlüsselspeicher
    Anmeldedaten und geheime Variablen werden im Ruhezustand mit AES-Verschlüsselung verschlüsselt.

  • Umgebungsisolation
    Geheimnisse werden Jobs nur zur Laufzeit übergeben und nicht direkt in der Container-Umgebung offengelegt.

  • SSH-Schlüssel und Token
    Benutzer sind dafür verantwortlich, gültige SSH-Schlüssel und Token hochzuladen. Diese werden verschlüsselt und nur beim Ausführen von Tasks verwendet.

  • HashiCorp-Vault-Integration (Pro)
    Geheimnisse können in einer externen Vault-Instanz gespeichert werden. Wählen Sie den Speicherort pro Geheimnis beim Erstellen oder Bearbeiten eines Geheimnisses.

Datenverschlüsselung​

Sensible Daten werden in verschlüsselter Form in der Datenbank gespeichert. Sie sollten die Konfigurationsoption access_key_encryption in der Konfigurationsdatei setzen, um die Verschlüsselung der Access Keys zu aktivieren. Der Schlüssel muss mit folgendem Befehl generiert werden:

head -c32 /dev/urandom | base64

Ausführen von nicht vertrauenswürdigem Code / Playbooks​

Semaphore führt benutzerdefinierte Playbooks und Befehle aus, was riskant sein kann:

  • Container-Isolation
    Tasks werden in isolierten Docker-Containern ausgeführt. Diese Container haben keinen Zugriff auf das Hostsystem.

  • Execution-Isolation
    Standardmäßig ist ein Task ein gewöhnlicher Prozess auf dem Semaphore-Server und hat dessen Dateisystem- und Netzwerkzugriff. Isolation ist optional: Geben Sie den Task an einen Runner mit dem docker- oder k8s-Executor, und jeder Task erhält einen frischen Container bzw. Pod, der nach dem Ende verworfen wird.

  • Minimale Rechte
    Mit dem Docker- und dem Kubernetes-Executor wählen Sie Image, Netzwerk und Service-Account selbst, sodass ein Task nur das bekommt, was er braucht.

  • Prozessbenutzer für Tasks
    Tasks können unter einem dedizierten Systembenutzer ohne Root-Rechte (z. B. semaphore) ausgeführt werden, um die Auswirkungen potenzieller Exploits zu verringern. Dies ist optional und kann entsprechend den Systemrichtlinien konfiguriert werden.

Sichere Bereitstellung​

Um sicherzustellen, dass Semaphore sicher bereitgestellt wird:

  • HTTPS verwenden
    Semaphore unterstützt HTTPS sowohl über die integrierte TLS-Unterstützung als auch über einen Reverse-Proxy wie Nginx. Es wird dringend empfohlen, HTTPS in der Produktion zu aktivieren.

    Um die integrierte HTTPS-Unterstützung zu aktivieren, fügen Sie folgenden Block zur config.json hinzu:

    {
    ...
    "tls": {
    "enabled": true,
    "cert_file": "/path/to/cert/example.com.cert",
    "key_file": "/path/to/key/example.com.key"
    }
    ...
    }
  • Hinter einer Firewall betreiben
    Beschränken Sie den Zugriff auf Semaphore UI und die Datenbank auf vertrauenswürdige IP-Adressen.

  • Datenbanksicherheit
    Verwenden Sie starke Passwörter und beschränken Sie den Datenbankzugriff ausschließlich auf Semaphore.

Updates & Patch-Management​

Sicherheitsupdates werden regelmäßig veröffentlicht:

  • Aktuell bleiben
    Verwenden Sie immer die neueste stabile Version.

  • Changelog
    Prüfen Sie die Änderungen auf GitHub, bevor Sie aktualisieren.

  • Automatische Updates
    Wenn Sie Docker verwenden, ziehen Sie Automatisierungs-Pipelines für regelmäßige Updates in Betracht.

Melden von Schwachstellen​

Sie haben eine Schwachstelle gefunden? Helfen Sie uns, Semaphore sicher zu halten:

Zielfristen für die Behebung von Schwachstellen​

Wir streben an, gemeldete Schwachstellen innerhalb der folgenden Zeitfenster zu beheben:

  • Kritisch: innerhalb von 30 Tagen
  • Hoch: innerhalb von 60 Tagen
  • Mittel: innerhalb von 90 Tagen
  • Niedrig: nach bestem Bemühen, in der Regel innerhalb von 180 Tagen

Für aktiv ausgenutzte Probleme, die die neuesten stabilen Versionen betreffen, können außerplanmäßige Patches veröffentlicht werden.

Werkzeuge für die Codesicherheit​

Wir verwenden CodeQL, Codacy, Snyk und Renovate, um den Code und die Abhängigkeiten zu analysieren und Abhängigkeitsupdates zu automatisieren.

  • Keine öffentlichen Exploits
    Veröffentlichen Sie Schwachstellen nicht, bevor sie gepatcht sind.

  • Danksagungen
    Sicherheitsforscher können auf Wunsch in den Versionshinweisen genannt werden.