Le credenziali dei database sono tra i segreti aziendali più preziosi. Un nome utente e una password esposti possono rendere accessibili dati dei clienti, informazioni finanziarie, dati applicativi o un intero sistema di produzione. Le stringhe di connessione possono rivelare host, porta, nome del database e metodo di autenticazione anche quando la password non è immediatamente visibile.
Il rischio non riguarda solo il codice sorgente dell'applicazione. Le credenziali possono comparire nei file di configurazione, nei ticket di assistenza, nei log di distribuzione, nelle immagini dei container, negli strumenti di monitoraggio, nei backup dei server e nei messaggi delle chat. Le agenzie devono affrontare anche una difficoltà aggiuntiva: diversi ambienti dei clienti possono essere gestiti dallo stesso team, ma ogni cliente necessita di una separazione chiara degli accessi, delle responsabilità e delle evidenze.
La sicurezza delle credenziali del database è quindi un processo, non un singolo prodotto. Combina gestione dei segreti, separazione degli ambienti, account con privilegi minimi, cifratura, auditing, rotazione e accessi di emergenza progettati con attenzione.
Mappa i punti in cui le credenziali del database possono fuoriuscire
Prima di scegliere gli strumenti, identifica ogni luogo in cui una credenziale può essere creata, copiata, elaborata o archiviata. Questa attività spesso rivela un'esposizione maggiore del previsto, perché le credenziali seguono il flusso di lavoro di un sistema, non solo quello dell'applicazione.
- Codice sorgente: durante i test, gli sviluppatori possono inserire direttamente password, chiavi API o stringhe di connessione complete e dimenticare di rimuoverle prima del commit.
- File di configurazione: le impostazioni dell'applicazione, la configurazione del web server e i manifest di distribuzione possono contenere segreti in chiaro.
- Ticket e chat: un tecnico può incollare una password o una stringa di connessione per accelerare la risoluzione dei problemi, lasciandola nella cronologia ricercabile della conversazione.
- Log: i messaggi relativi a connessioni fallite, l'output di debug, le istruzioni SQL e i trace delle eccezioni possono includere nomi utente, host o parametri di connessione.
- Backup: un backup del server può contenere insieme file di configurazione, directory dell'applicazione, script, database, archivi di credenziali e log.
- Immagini dei container: i segreti copiati in un Dockerfile, in un layer dell'immagine o in un artefatto di build possono rimanere disponibili anche dopo l'eliminazione del file visibile.
- Sistemi CI/CD: le variabili delle pipeline, l'output dei job, gli spazi di lavoro memorizzati nella cache e gli artefatti di build possono esporre le credenziali a utenti o servizi che non ne hanno bisogno.
Crea un inventario per ogni applicazione e database. Registra per cosa viene usato il segreto, a quale ambiente appartiene, chi può accedervi, dove è archiviato, come viene ruotato e come potrebbe essere revocato. Tratta l'inventario come documentazione sensibile: deve descrivere il segreto senza riprodurlo.
Usa la gestione dei segreti invece di configurazioni sparse
Password e chiavi devono essere archiviate in un sistema progettato per i segreti, non in un repository, in un foglio di calcolo o in un'unità condivisa generica. Un gestore dei segreti può offrire accesso controllato, cifratura, registri di audit, gestione delle versioni e recupero automatico durante la distribuzione o a runtime. L'applicazione riceve il valore necessario senza che gli sviluppatori debbano copiarlo nel codice sorgente.
Gli approcci alla gestione dei segreti variano. Alcune organizzazioni usano un vault dedicato, altre un servizio gestito dal provider cloud e altre ancora un meccanismo di configurazione cifrato integrato nella piattaforma di distribuzione. Quando confronti le diverse opzioni, ricerca gli strumenti per la gestione dei segreti delle credenziali del database e confronta i relativi modelli di accesso, audit e rotazione con le tue reali esigenze operative.
Un design adeguato dovrebbe rispondere a domande pratiche:
- L'accesso può essere assegnato a un'identità del workload invece che a una password condivisa di lunga durata?
- I permessi possono essere limitati per applicazione, cliente, ambiente e database?
- Letture e modifiche vengono registrate in una traccia di audit?
- Un segreto può essere versionato e revocato senza ricostruire ogni sistema?
- L'accesso può essere negato automaticamente quando una persona lascia un progetto o un'integrazione viene dismessa?
- Gli sviluppatori possono lavorare con credenziali di test sicure senza visualizzare i valori di produzione?
La gestione dei segreti non è automaticamente sicura solo perché dispone di un'interfaccia vault. Anche l'account amministratore del vault, le chiavi di recupero, i token di integrazione e le policy di accesso devono essere protetti. Limita il numero di persone con ampi permessi di lettura dei segreti, usa un'autenticazione forte, verifica regolarmente gli accessi ed evita che una singola pipeline o un amministratore possa recuperare tutte le credenziali dei clienti.
Separa ambienti, clienti e responsabilità
Sviluppo, staging e produzione non devono condividere le credenziali del database. Un'applicazione di test non dovrebbe potersi connettere a un database di produzione solo perché utilizza lo stesso modello di configurazione. Usa account database, segreti e, quando possibile, istanze o server di database separati.
Lo stesso principio si applica ai diversi clienti. Un'agenzia non dovrebbe usare un unico account database per più clienti, anche se è comodo per l'assistenza. Ogni ambiente del cliente dovrebbe avere credenziali, policy di accesso e traccia di audit proprie. Questo limita l'impatto di una fuga e consente di identificare quale sistema è stato utilizzato.
Documenta la suddivisione delle responsabilità. Un cliente può essere proprietario del database e approvare gli accessi privilegiati, mentre l'agenzia gestisce l'applicazione ed esegue la manutenzione. In alternativa, l'agenzia può amministrare il server ma richiedere l'approvazione del cliente prima di modificare le credenziali. Entrambi i modelli possono funzionare, se sono espliciti.
Definisci:
- Chi è proprietario del database e dei relativi dati
- Chi può creare, leggere, ruotare e revocare le credenziali
- Chi approva l'accesso alla produzione
- Quale personale di assistenza può accedere a ciascun ambiente del cliente
- Come viene rimosso l'accesso alla fine di un contratto o progetto
- Come viene richiesto, registrato e verificato l'accesso di emergenza
Non confondere la responsabilità operativa con l'accesso senza restrizioni. Un ruolo di hosting, sviluppo o assistenza può dover gestire un'applicazione senza poter leggere ogni tabella del database o esportare tutti i dati.
Applica il principio del privilegio minimo agli account del database
Il controllo degli accessi al database dovrebbe iniziare con account separati per funzioni separate. Un account applicativo normalmente necessita solo dei permessi richiesti dall'applicazione. Un servizio di reportistica può aver bisogno dell'accesso in lettura a determinate viste, mentre un processo di migrazione può richiedere temporaneamente permessi per modificare lo schema. Nessuno dei due dovrebbe usare l'account proprietario del database per le attività ordinarie.
Confini utili per gli account
- Account applicativo: limitato al database, allo schema, alle tabelle, alle procedure o alle viste necessarie.
- Account di migrazione: abilitato solo durante attività di distribuzione approvate e limitato o disabilitato successivamente.
- Account di reportistica: di sola lettura, preferibilmente su viste controllate o su una replica per la reportistica.
- Account di assistenza: accesso individuale con limiti temporali e traccia di audit, non una password amministrativa condivisa e permanente.
- Account di backup: limitato all'operazione di backup e impossibilitato a modificare i dati applicativi, quando la piattaforma lo consente.
Verifica i permessi quando l'applicazione cambia. I vecchi grant spesso rimangono attivi molto tempo dopo la rimozione di una funzionalità, di un collaboratore o di un'integrazione. Testa i permessi usando l'identità dell'applicazione, non solo un account amministratore; altrimenti gli accessi eccessivi possono rimanere nascosti.
Proteggi le credenziali in transito e a riposo
La cifratura in transito è essenziale quando un'applicazione si connette a un database attraverso una rete. Configura database e client per usare TLS, quando supportato, valida correttamente i certificati ed evita impostazioni che si limitano a cifrare il traffico senza verificare la destinazione. Una stringa di connessione che contiene una password rimane sensibile anche quando la connessione è cifrata.
Quando sono a riposo, i segreti devono essere cifrati dal sistema che li archivia, con accesso limitato alle sole identità che ne hanno bisogno. La cifratura non elimina la necessità del controllo degli accessi. Chiunque possa decifrare un segreto, accedere alla chiave o recuperare un'esportazione non protetta potrebbe comunque ottenere la credenziale.
Non dare per scontato che eliminare una riga dal file di configurazione corrente la rimuova dalla cronologia. I repository Git conservano i commit precedenti, i registri dei container conservano i layer delle immagini, i sistemi di ticket conservano gli allegati e i sistemi di backup conservano le versioni precedenti. Se un segreto è stato sottoposto a commit o condiviso, trattalo come esposto e ruotalo, anche se la copia visibile è stata rimossa.
Ruota e revoca le credenziali in modo deliberato
La rotazione deve essere pianificata prima di un incidente. Decidi come verranno cambiate ogni password del database, chiave API e certificato, dove verrà archiviato il nuovo valore e come le applicazioni lo riceveranno. Se un servizio non supporta due credenziali valide durante la transizione, pianifica una finestra di manutenzione controllata e conferma un piano di rollback che non ripristini indefinitamente il vecchio segreto.
Dai priorità alle credenziali a breve durata o alla rotazione automatica, quando la tecnologia lo consente. Le password di lunga durata richiedono controlli operativi più rigorosi, perché possono rimanere nei vecchi backup, nei laptop degli sviluppatori, nelle cache di build o in script dimenticati.
La revoca è diversa dalla rotazione. La rotazione sostituisce una credenziale, mentre quella precedente può rimanere temporaneamente valida; la revoca interrompe l'accesso. Revoca immediatamente una credenziale quando sospetti che sia stata esposta, quando un dipendente o un fornitore non necessita più dell'accesso o quando un'integrazione viene dismessa. Dopo la revoca, esamina i log per verificare l'uso della vecchia credenziale e assicurati che i servizi dipendenti funzionino con quella sostitutiva.
Tieni i segreti fuori dai flussi di sviluppo e distribuzione
Un file locale .env può essere comodo per lo sviluppo, ma non deve essere inserito in un repository, caricato in un pacchetto di assistenza o copiato in un'immagine di produzione. Fornisci un file di esempio sicuro, contenente i nomi delle variabili ma non valori reali, e applica regole di esclusione e scansione dei segreti nel repository.
Le pipeline CI/CD richiedono la stessa disciplina. Archivia le variabili sensibili nella funzione protetta per i segreti della pipeline oppure recuperale da un vault a runtime. Maschera i valori nell'output, impedisci per quanto possibile la comparsa dei segreti negli argomenti della riga di comando, limita chi può modificare le definizioni delle pipeline e proteggi i branch di distribuzione. Esamina artefatti di build e cache, perché un segreto può fuoriuscire attraverso una configurazione generata anche quando il log della pipeline appare pulito.
Le immagini dei container meritano un controllo specifico. Non usare gli argomenti di build o le istruzioni environment come archivio permanente di segreti. Ispeziona la cronologia e i layer delle immagini, usa l'iniezione a runtime, mantieni privati i registri e rimuovi le immagini compromesse dopo aver revocato le credenziali. Un container che può leggere un segreto deve anche essere impedito dal leggere segreti non correlati di altri clienti o ambienti.
Gestisci ticket, log e attività di troubleshooting in sicurezza
I team di assistenza hanno bisogno di uno standard per richiedere informazioni diagnostiche. Chiedi configurazioni oscurate, codici di errore, timestamp e identificativi delle risorse invece di stringhe di connessione complete. Definisci i campi che devono essere sempre rimossi: password, token, chiavi private, cookie di sessione e intestazioni di autenticazione complete.
Il logging deve essere testato, non considerato sicuro per impostazione predefinita. Cerca nei log dell'applicazione, nei log del web server, nei log di audit del database, nell'output CI e negli avvisi di monitoraggio campi simili a password, pattern di token, schemi di stringhe di connessione e nomi host dei database. Le regole di oscuramento devono coprire sia i campi strutturati sia i messaggi di eccezione non strutturati.
Non inviare mai credenziali tramite chat o email ordinarie. Se condividere una credenziale di emergenza è inevitabile, usa un canale sicuro approvato con accesso limitato e scadenza definita, quindi ruota la credenziale dopo l'uso. Una password pubblicata in una stanza privata del team viene comunque copiata su più dispositivi, conservata da un fornitore di servizi e potenzialmente resa visibile alle persone che entreranno nella stanza in seguito.
Considera le credenziali contenute nei backup dei server
I backup dei server contengono spesso credenziali perché acquisiscono la configurazione dell'applicazione e i file del sistema operativo. La protezione dei backup contribuisce quindi alla sicurezza delle credenziali del database, ma non sostituisce un gestore dei segreti o una buona pratica di rotazione. Un backup può conservare una vecchia password molto tempo dopo che l'applicazione è passata a una nuova, e chiunque possa ripristinarlo potrebbe riuscire a esaminare i file.
Per i server controllati dal cliente, valuta insieme la cifratura del backup, la custodia delle chiavi, il periodo di conservazione e i permessi di ripristino. Safenix offre backup off-site per i server aziendali, con dati archiviati in Germania, cifrati tramite una chiave che Safenix non detiene e immutabili per tutta la durata del periodo di conservazione selezionato. Queste protezioni di cifratura dei backup e custodia delle chiavi sotto il controllo del cliente contribuiscono a ridurre il rischio che un backup rubato diventi una fonte di credenziali del database.
Questa protezione richiede comunque decisioni operative. Decidi chi può richiedere un ripristino, chi può accedere ai file ripristinati, se il ripristino viene eseguito in un ambiente isolato e come vengono gestite successivamente le credenziali ripristinate. Un server ripristinato non dovrebbe diventare automaticamente una via di accesso alla produzione. Se possibile, esegui il ripristino per l'analisi in una rete limitata, monta i dati del backup in sola lettura e rimuovi o ruota le credenziali trovate nella copia ripristinata.
Safenix protegge i server controllati dal cliente; non è un piano di backup per siti web che operano su hosting condiviso. Il cliente o il suo fornitore di servizi rimane responsabile della configurazione di gestione dei segreti del server, dei permessi di accesso e delle decisioni relative a ciò che deve essere incluso in un backup.
Utilizza una procedura di emergenza sicura
Quando una credenziale potrebbe essere fuoriuscita, la rapidità è importante, ma modifiche affrettate possono causare un'interruzione o distruggere le evidenze. Mantieni disponibile una procedura breve e testata per gli incidenti, destinata alle persone che potrebbero dover intervenire.
- Contieni l'esposizione: limita l'accesso a repository, ticket, chat, pipeline o archivi e conserva i record pertinenti.
- Classifica il segreto: identifica database, cliente, ambiente, permessi e sistemi che possono utilizzarlo.
- Revoca o ruota: disabilita la credenziale esposta ed emetti una sostitutiva tramite il processo approvato di gestione dei segreti.
- Verifica l'utilizzo: esamina i log di autenticazione del database, i log dell'applicazione, i record VPN, gli accessi al repository e gli eventi di audit cloud o del server.
- Rimuovi le copie: elimina, quando appropriato, ticket, artefatti, immagini o file esposti, conservando in modo sicuro le evidenze dell'incidente.
- Esamina i backup: identifica quali versioni del backup contengono il vecchio segreto e assicurati che l'accesso al ripristino sia limitato.
- Conferma il ripristino: testa l'applicazione con la nuova credenziale e verifica che quella precedente non funzioni più.
- Migliora il controllo: documenta la causa e aggiungi una verifica preventiva, come la scansione dei segreti, un oscuramento migliore o una durata più breve delle credenziali.
Non usare il ripristino di un backup come prima risposta a una password fuoriuscita. Il ripristino di un server precedente potrebbe ripristinare anche la credenziale compromessa, software vulnerabile o regole di accesso obsolete. I backup servono al ripristino; la risposta alle credenziali deve essere gestita tramite revoca, analisi e nuova distribuzione controllata.
Controlli pratici per agenzie e aziende
Esegui questi controlli durante l'onboarding, in occasione delle distribuzioni principali e dopo cambiamenti nel personale o nei fornitori:
- Cerca nei repository, nella cronologia dei commit, negli script di distribuzione e nei layer dei container password, token e pattern di stringhe di connessione.
- Verifica se file .env, esportazioni di configurazione o dump del database sono pubblicamente raggiungibili o inclusi nei pacchetti di assistenza.
- Esamina log e output CI/CD alla ricerca di campi di autenticazione, errori SQL, argomenti dei comandi e variabili non mascherate.
- Elenca ogni account del database di produzione e conferma proprietario, scopo, privilegi, ultima rotazione e ultimo utilizzo.
- Verifica che i sistemi di sviluppo e staging non possano autenticarsi alla produzione con le loro normali credenziali.
- Controlla quali dipendenti, collaboratori, account di servizio e operatori dei backup possono recuperare segreti o ripristinare i dati del server.
- Assicurati che le connessioni al database convalidino i certificati di cifratura e non ripieghino sul trasporto non cifrato.
- Esamina la conservazione dei backup e i permessi di ripristino, incluso chi può accedere ai file di configurazione ripristinati.
- Testa la revoca e la sostituzione senza dipendere da una password amministrativa non documentata.
Per ogni credenziale, poni un'ultima domanda: se questo valore comparisse oggi in un repository pubblico, con quale rapidità si potrebbe bloccare l'accesso, come si identificherebbe l'ambiente interessato e chi sarebbe responsabile della risposta? Se la risposta dipende dal trovare una persona che ricorda una vecchia procedura, il controllo non è ancora affidabile.