Gli audit di sicurezza sono un must in tutte le aziende per proteggere i dati ed evitare possibili violazioni della sicurezza, ma sono anche un'attività che richiede tempo poiché è necessario controllare molte cose periodicamente. Il risultato è che, in generale, le aziende seguono una checklist di sicurezza e configurano tutto per coprirla, ma non hanno audit di sicurezza. Potresti dire:"Se tutto funziona bene, mantienilo così com'è". Bene, in realtà, non puoi fidarti che le politiche di sicurezza che stai configurando ora saranno utili in futuro e che nulla cambierà per influenzarle. La soluzione potrebbe essere automatizzare questi controlli di sicurezza o avere un modo per farlo periodicamente in modo intuitivo.
In questo blog, vedremo come eseguire diversi Security Audit per PostgreSQL e automatizzarli utilizzando ClusterControl.
Di cosa hai bisogno per eseguire un audit di sicurezza su PostgreSQL?
Diamo un'occhiata ad alcune delle cose più importanti da controllare per motivi di sicurezza in un database PostgreSQL:
-
Comunicazioni:la comunicazione in tutti i tuoi sistemi deve essere crittografata e devi limitare il traffico a quello che arriva solo da fonti note per ridurre il rischio di accesso non autorizzato ai tuoi dati.
-
Accesso al database:è necessario limitare l'accesso fisico e remoto ai database. L'accesso remoto può essere limitato consentendo connessioni solo da origini note per ciascun utente o anche utilizzando connessioni SSH o VPN.
-
Account utente:ci sono molti modi per migliorare la sicurezza degli account utente in PostgreSQL, come rimuovere gli utenti inattivi , concedendo solo i privilegi necessari, ecc.
-
Installazione e configurazione:ci sono alcune modifiche da fare per proteggere l'installazione di PostgreSQL, come installare solo il necessario pacchetti, modifica delle credenziali e della configurazione predefinite, ecc.
-
Auditing e registrazione:le istruzioni di registrazione possono aiutarti a rilevare problemi di sicurezza o evitarli se li intervieni in tempo . Puoi utilizzare la funzione di registrazione standard di PostgreSQL, ma puoi anche utilizzare un'estensione come pgAudit per avere una registrazione più dettagliata.
-
Aggiornamenti:mantieni il tuo sistema operativo e database il più aggiornati possibile applicando patch e aggiornamenti di sicurezza.
-
Query Monitor:dovresti controllare il traffico per rilevare query anomale o attacchi DoS.
-
Monitoraggio:per conoscere lo stato dei tuoi sistemi, dovrai disporre di un buon sistema di monitoraggio. Questo potrebbe essere utile per trovare problemi di sicurezza o addirittura per evitarli.
Ora sappiamo cosa controllare, diamo un'occhiata a un'opzione per automatizzare queste attività:ClusterControl.
Controlli di sicurezza per PostgreSQL con ClusterControl
Per gli audit di sicurezza PostgreSQL, ClusterControl è una buona opzione in quanto è un sistema di gestione e monitoraggio che consente di distribuire, gestire, monitorare e ridimensionare i database da un'interfaccia intuitiva. Supporta le migliori tecnologie di database open source e puoi automatizzare molte delle attività del database che devi eseguire regolarmente, come l'aggiunta e il ridimensionamento di nuovi nodi, l'esecuzione di backup e ripristini e altro ancora.
Vediamo come coprire i controlli di sicurezza menzionati in precedenza utilizzando ClusterControl.
Comunicazioni
Nella sezione sicurezza (ClusterControl -> Seleziona Cluster -> scheda Sicurezza), puoi abilitare la crittografia SSL per crittografare le connessioni tra i client e il server.
Anche l'accesso da ClusterControl ai nodi è protetto utilizzando SSH senza password con una coppia di chiavi.
Accesso al database
Puoi limitare l'accesso al tuo database PostgreSQL modificando il file di configurazione pg_hba.conf dall'interfaccia utente di ClusterControl (ClusterControl -> Seleziona Cluster -> Gestisci -> Configurazioni). In questo modo puoi specificare le seguenti opzioni:
-
Tipo:le opzioni più utilizzate qui sono "local" per un socket di dominio Unix e "host" per un socket TCP/IP semplice o crittografato con SSL, ma ci sono altre opzioni come "hostssl" e altro.
-
Database:può essere "all", "sameuser", "samerole", "replication", un nome del database o un elenco di nomi di database separati da virgole.
-
Utente:può essere "tutto", un nome utente, un nome di gruppo preceduto da "+", o un elenco separato da virgole.
-
Indirizzo:nome host o un indirizzo IP e una maschera CIDR.
-
Metodo:i più usati qui sono "trust", "reject", "md5", "ident" e "peer", ma ci sono più opzioni come "scram-sha-256" o "ldap".
Esempio:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Account utente
Puoi gestire gli utenti del database dall'interfaccia utente di ClusterControl (ClusterControl -> Seleziona cluster -> Gestisci -> Gestione utenti). Puoi creare nuovi utenti o modificare ed eliminare quelli esistenti e assegnare loro i privilegi corrispondenti.
Installazione e configurazione
Puoi distribuire un nuovo cluster PostgreSQL o importarne uno esistente. Con il tuo cluster PostgreSQL aggiunto in ClusterControl, puoi gestire la configurazione corrente (ClusterControl -> Seleziona cluster -> Gestisci -> Configurazione), o anche aggiungere nuovi nodi al cluster.
Durante la distribuzione, puoi modificare la configurazione del database come la porta del database o le credenziali, quindi ClusterControl installerà solo i pacchetti necessari per distribuire il tuo nuovo cluster.
Controllo e registrazione
Puoi controllare la registrazione PostgreSQL standard nell'interfaccia utente di ClusterControl (ClusterControl -> Seleziona cluster -> Registri -> Registri di sistema) o anche abilitare l'estensione pgAudit da ClusterControl e controllare la registrazione di audit nello stesso posto .
Aggiornamenti
In caso di aggiornamenti minori, è possibile utilizzare ClusterControl per questa attività. È possibile accedere all'interfaccia utente ed eseguire l'aggiornamento (ClusterControl -> Seleziona cluster -> Gestisci -> Aggiornamenti), oppure utilizzare il report operativo ClusterControl "Aggiornamenti pacchetti", per ricevere i pacchetti disponibili via e-mail o verificarli nell'interfaccia utente di ClusterControl.
Monitoraggio query
Nella sezione di monitoraggio delle query, puoi trovare le query principali, le query in esecuzione, i valori anomali delle query e le statistiche delle query per monitorare il traffico del database.
Monitoraggio
ClusterControl ti consente di monitorare i tuoi server in tempo reale con un set predefinito di dashboard per analizzare alcune delle metriche più comuni.
ClusterControl consente di personalizzare i grafici disponibili nel cluster e di abilitare il monitoraggio basato sugli agenti per generare dashboard più dettagliati.
Puoi anche creare avvisi, che ti informano di eventi nel tuo cluster, o integrarti con diversi servizi come PagerDuty o Slack.
Rapporti operativi
Se non vuoi accedere all'interfaccia utente di ClusterControl per verificare lo stato dei tuoi cluster, puoi creare o pianificare Report operativi.
I rapporti operativi forniscono informazioni sullo stato del database, che puoi utilizzare per controllare il tuo ambiente. Questi report consistono in diversi controlli e affrontano varie attività DBA quotidiane. L'idea alla base di ClusterControl Operational Reporting è quella di mettere tutti i dati più rilevanti in un unico documento che può essere rapidamente analizzato al fine di ottenere una chiara comprensione dello stato dei database e dei loro processi.
Puoi pianificare rapporti come "Rapporto di sistema giornaliero", "Rapporto di aggiornamento del pacchetto", "Rapporto di modifica dello schema", "Backup" e "Disponibilità" e puoi riceverli in più di un'e-mail indirizzo.
Utilizzo della CLI ClusterControl per l'automazione degli audit di sicurezza
ClusterControl CLI, noto anche come s9s, è uno strumento da riga di comando introdotto in ClusterControl versione 1.4.1 per interagire, controllare e gestire i cluster di database utilizzando il sistema ClusterControl. ClusterControl CLI apre una nuova porta per l'automazione del cluster in cui è possibile integrarla facilmente con gli strumenti di automazione della distribuzione esistenti come Ansible, Puppet, Chef, ecc. Lo strumento della riga di comando viene richiamato eseguendo un binario chiamato s9s aggiunto per impostazione predefinita nell'installazione di ClusterControl.
Diamo un'occhiata ad alcuni esempi di questo potente strumento. Per questo, vedremo come eseguire le attività di Security Audit menzionate utilizzando ClusterControl CLI.
Comunicazioni
Puoi abilitare la crittografia SSL nel tuo cluster utilizzando il seguente comando:
$ s9s cluster --enable-ssl --cluster-id=ID
Dove ID è il numero ID del cluster:puoi monitorare lo stato di avanzamento di questa attività (e del resto delle attività) elencando il processo di lavoro.
$ s9s job --list
Accesso al database
Puoi controllare la configurazione del database per convalidare l'accesso consentito:
$ s9s node --cluster-id=ID \
--nodes="IP_ADDRESS:PORT" \
--list-config
GROUP OPTION NAME VALUE
- data_directory '/var/lib/pgsql/13/data'
- hba_file '/var/lib/pgsql/13/data/pg_hba.conf'
- ident_file '/var/lib/pgsql/13/data/pg_ident.conf'
- listen_addresses '*'
- port 5432
- max_connections 100
- ssl on
- ssl_ca_file '/etc/ssl/postgresql_single/cluster_47/server_ca.crt'
- ssl_cert_file '/etc/ssl/postgresql_single/cluster_47/server.crt'
...
Dove ID è il numero ID del cluster, IP_ADDRESS e PORT sono l'indirizzo IP e la porta del database.
Account utente
Puoi elencare gli account utente che sono nel cluster:
$ s9s accounts --list --cluster-id=ID --long
NAME P CONN MAXC GRANTS
's9spostgresqlchk'@'%' N 0 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
'postgres'@'%' N 1 0 LOGIN,SUPERUSER,INHERIT,REPLICATION,CREATEROLE,CREATEDB
'pg_write_server_files'@'%' N 0 0 INHERIT
...
'cmon_replication'@'%' N 2 0 LOGIN,INHERIT,REPLICATION
'admindb'@'%' N 3 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
Dove ID è il numero ID del cluster.
Installazione e configurazione
Puoi creare nuovi cluster, aggiungere nuovi nodi di database o persino modificare le configurazioni esistenti nel tuo cluster:
$ s9s cluster --create \
--cluster-type=postgresql \
--nodes="IP_ADDRESS1?master;IP_ADDRESS2?slave;IP_ADDRESS3?slave;" \
--db-admin="DBUSER" \
--db-admin-passwd="DBPASSWORD" \
--cluster-name=PG1 \
--os-user=OSUSER \
--os-key-file=/home/OSUSER/.ssh/id_rsa \
--provider-version=13 \
--log
Dove IP_ADDRESS è l'indirizzo IP del database e devi sostituire DBUSER, DBPASSWORD e OSUSER rispettivamente per le credenziali del database e l'utente del sistema operativo.
Controllo e registrazione
Puoi abilitare la registrazione di controllo dalla riga di comando usando il seguente comando:
$ s9s cluster --setup-audit-logging --cluster-id=ID
Dove ID è il numero ID del cluster:quindi, puoi controllare i log con le informazioni di registrazione dell'audit.
Aggiornamenti
Puoi creare rapporti per vedere se hai bisogno di aggiornare i tuoi database o pacchetti di sistemi operativi.
$ s9s report --cluster-id=ID --type=upgrade --create
Dove ID è il numero ID del cluster:in base a questo report, puoi pianificare le finestre di manutenzione per eseguire gli aggiornamenti, e può essere fatto anche da ClusterControl.
Monitoraggio query
Puoi controllare il processo in esecuzione sui tuoi nodi e filtrarli in base alla query, all'origine e altro.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Monitoraggio
Hai diverse opzioni per monitorare i tuoi sistemi da qui. Puoi controllare lo stato di tutti i cluster, controllarne uno o persino controllare gli allarmi in tempo reale.
$ s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
1 STARTED postgresql_single system admins PostgreSQL Cluster All nodes are operational.
2 FAILURE galera system admins PXC57 Cluster failure.
3 STARTED replication system admins MariaDB104 All nodes are operational.
4 STARTED mongodb system admins MongoDB42 All nodes are operational.
Total: 4
$ s9s alarm --cluster-name="PostgreSQL Cluster" --list
ID CID SEVERITY COMPONENT TYPE HOSTNAME TITLE
263 1 CRITICAL Network HostSshFailed haproxy1 SSH failed
264 1 CRITICAL Network HostSshFailed haproxy2 SSH failed
265 1 CRITICAL Network HostSshFailed postgresql2 SSH failed
266 1 CRITICAL Network HostSshFailed postgresql3 SSH failed
...
Rapporti operativi
Puoi creare rapporti operativi e controllarli dalla riga di comando. Lo stesso report è disponibile nell'interfaccia utente di ClusterControl.
$ s9s report --cluster-id=ID --type=default --create
Questi erano solo alcuni esempi di base per vedere il tipo di cose che puoi eseguire usando ClusterControl CLI. Per ulteriori informazioni sullo strumento, puoi fare riferimento alla documentazione ufficiale.
Conclusione
C'è sempre il rischio di essere violato, ma puoi colmare il divario di vulnerabilità sul tuo cluster PostgreSQL controllando i punti sopra menzionati. Per semplificare notevolmente questo compito, è possibile utilizzare l'interfaccia utente di ClusterControl o addirittura automatizzare i controlli con ClusterControl CLI. Può anche essere integrato con strumenti esterni come Ansible, Puppet e altri.