Passa al contenuto principale

🔐 Sicurezza

Introduzione

La sicurezza è una priorità assoluta in Semaphore UI. Che si tratti di automatizzare attività critiche sull'infrastruttura o di gestire l'accesso del team a sistemi sensibili, Semaphore UI è progettato per offrire operazioni robuste e sicure fin da subito. Questa sezione descrive come Semaphore gestisce la sicurezza e cosa considerare quando viene distribuito in produzione.

Autenticazione e autorizzazione

Semaphore supporta meccanismi di autenticazione sicura e di autorizzazione flessibile:

  • Metodi di accesso:

    • Nome utente/password
      Metodo predefinito che utilizza le credenziali memorizzate nel database di Semaphore. Le password vengono sottoposte a hash con un algoritmo robusto (bcrypt).

    • LDAP
      Consente l'integrazione con i servizi di directory aziendali. Supporta il filtraggio di utenti/gruppi e connessioni sicure tramite LDAPS.

    • OpenID Connect (OIDC)
      Abilita il single sign-on con identity provider come Google, Azure AD o Keycloak. Supporta claim personalizzati e mappatura dei gruppi.

  • Autenticazione a due fattori (2FA)
    È disponibile la 2FA basata su TOTP, consigliata per tutti gli utenti. Può essere abilitata per singolo utente e supporta codici di recupero opzionali. Vedere le opzioni di configurazione auth.totp.enabled e auth.totp.allow_recovery.

  • Controllo degli accessi basato sui ruoli
    È possibile assegnare agli utenti ruoli diversi, come Admin, Maintainer o Viewer, limitando l'accesso in base alle responsabilità.

  • Gestione delle sessioni
    Le sessioni sono protette con cookie HTTP sicuri. I meccanismi di scadenza della sessione e di logout garantiscono un'esposizione minima.

Segreti e credenziali

La gestione sicura dei segreti è una funzionalità fondamentale:

  • Key store cifrato
    Le credenziali e le variabili segrete sono cifrate a riposo con la cifratura AES.

  • Isolamento dell'ambiente
    I segreti vengono passati ai job solo in fase di esecuzione e non sono esposti direttamente all'ambiente del container.

  • Chiavi SSH e token
    Gli utenti sono responsabili del caricamento di chiavi SSH e token validi. Questi vengono cifrati e utilizzati solo durante l'esecuzione delle attività.

  • Integrazione con HashiCorp Vault (Pro)
    I segreti possono essere memorizzati in un'istanza Vault esterna. Scegliere lo storage per ogni singolo segreto durante la creazione o la modifica.

Cifratura dei dati

I dati sensibili sono memorizzati nel database in forma cifrata. È necessario impostare l'opzione di configurazione access_key_encryption nel file di configurazione per abilitare la cifratura delle Access Key. Deve essere generata con il comando:

head -c32 /dev/urandom | base64

Esecuzione di codice / playbook non attendibili

Semaphore esegue playbook e comandi definiti dagli utenti, il che può comportare dei rischi:

  • Isolamento tramite container
    Le attività vengono eseguite in container Docker isolati. Questi container non hanno accesso al sistema host.

  • Privilegio minimo
    I container vengono eseguiti con permessi minimi e possono essere ulteriormente limitati tramite i flag di Docker.

  • Esecuzione in chroot
    Semaphore può eseguire le attività all'interno di una chroot jail per isolare ulteriormente l'ambiente di esecuzione dal sistema host.

  • Utente del processo delle attività
    Le attività possono essere eseguite con un utente di sistema dedicato non root (ad esempio semaphore) per ridurre l'impatto di eventuali exploit. Questa opzione è facoltativa e può essere configurata in base alle policy di sistema.

Distribuzione sicura

Per garantire che Semaphore venga distribuito in modo sicuro:

  • Usare HTTPS
    Semaphore supporta HTTPS sia tramite il supporto TLS integrato sia tramite un reverse proxy come Nginx. Si consiglia vivamente di abilitare HTTPS in produzione.

    Per abilitare il supporto HTTPS integrato, aggiungere il seguente blocco a config.json:

    {
    ...
    "tls": {
    "enabled": true,
    "cert_file": "/path/to/cert/example.com.cert",
    "key_file": "/path/to/key/example.com.key"
    }
    ...
    }
  • Eseguire dietro un firewall
    Limitare l'accesso a Semaphore UI e al database ai soli IP attendibili.

  • Sicurezza del database
    Usare password robuste e limitare l'accesso al database al solo Semaphore.

Aggiornamenti e gestione delle patch

Gli aggiornamenti di sicurezza vengono pubblicati regolarmente:

  • Rimanere aggiornati
    Utilizzare sempre l'ultima release stabile.

  • Changelog
    Esaminare le modifiche su GitHub prima di aggiornare.

  • Aggiornamenti automatici
    Se si utilizza Docker, valutare pipeline di automazione per aggiornamenti regolari.

Segnalazione delle vulnerabilità

Avete trovato una vulnerabilità? Aiutateci a mantenere Semaphore sicuro:

Tempi obiettivo per la risoluzione delle vulnerabilità

Puntiamo a risolvere le vulnerabilità segnalate entro le seguenti finestre temporali:

  • Critica: entro 30 giorni
  • Alta: entro 60 giorni
  • Media: entro 90 giorni
  • Bassa: best effort, in genere entro 180 giorni

Per i problemi attivamente sfruttati che riguardano le ultime release stabili possono essere pubblicate patch fuori ciclo.

Strumenti per la sicurezza del codice

Utilizziamo CodeQL, Codacy, Snyk e Renovate per analizzare il codice sorgente e le dipendenze e per automatizzare l'aggiornamento delle dipendenze.

  • Nessun exploit pubblico
    Non divulgare pubblicamente le vulnerabilità finché non sono state corrette.

  • Riconoscimenti
    I ricercatori di sicurezza possono essere citati nelle note di rilascio, se lo desiderano.