Problematiche di sicurezza su database
PostgreSQL

I database mantengono i principali dati aziendali e debbono essere adeguatamente protetti.
Questa breve pagina riporta le problematiche piu' diffuse per quanto riguarda le basi dati ed i piu' comuni errori sulla sicurezza dei database ma sopratutto... indica come risolverle con il database PostgreSQL!

Nel seguito sono riportate le informazioni di interesse organizzate in paragrafi specifici: Introduzione, Matrice delle soluzioni, Controllo accessi, Controllo SQL, Protezione dati, Configurazione sicura, Varie ed eventuali.

Introduzione

Le piu' recenti normative per la sicurezza dei dati hanno posto l'attenzione di tutte le aziende sulla protezione dei dati: GDPR (General Data Protection Regulation, per la protezione dei dati personali), SOX (Sarbanes-Oxley Act of 2002, per la protezione dei dati finanziari), PCI-DSS (Payment Card Industry Data Security Standard, standard internazionale a protezione dei dati delle carte di credito), HIPAA (Health Insurance Portability and Accountability Act, legge USA a protezione dei dati personali e sanitari), ...

Problematiche sicurezza database I database mantengono i principali dati aziendali e debbono essere adeguatamente protetti. Questo documento presenta quelli che sono le problematiche di sicurezza piu' comuni relativamente ai database e come possono essere risolte. A seconda dei casi verranno presentate soluzioni introducendo Best Practice di programmazione o di progettazione, utilizzando funzionalita' standard PostgreSQL o utilizzando strumenti e pacchetti esterni.

Tra i molti elenchi di problematiche da cui partire... ne abbiamo scelto uno italiano che ha anche il pregio di avere le virtu' Calviniane dell'esattezza e della rapidita'. L'elenco sulle problematiche di sicurezza piu' comuni per i database e' quello contenuto nel Rapporto 2016 preparato dal Clusit (Associazione Italiana per la Sicurezza Informatica) su aziende italiane ed e' quindi uno specchio reale della situazione presente nella maggioranza delle imprese.

Le problematiche emerse nella ricerca sono state suddivise nelle seguenti categorie:

Nel resto del documento analizzeremo le tecnologie disponibili in PostgreSQL per risolvere le problematiche di sicurezza dei dati su ciascuna delle categorie citate.

Matrice delle soluzioni

La tabella seguente riporta come approcciare le diverse problematiche di sicurezza con PostgreSQL. Nella tabella si fa riferimento alle funzionalita' presenti nell'ultima versione 10.x [NdA il documento e' stato aggiornato alla versione 15.x] ma quando significativo si citeranno anche le versioni precedenti ed edizioni commerciali.
La matrice e' volutamente sintetica e riassuntiva. E' importante sottolineare che molte problematiche non possono essere solo risolte a livello di tecnologia ma richiedono un preciso processo aziendale. La tabella riporta se il DB fornisce un supporto per gestire la problematica, quanto il supporto e' completo e se sono necessari componenti esterni o opzionali.

# Problematica Supporto DB Opzioni, estensioni, strumenti esterni Note
ACDB Access Control Controllo accessi

Definizione dell'accesso ai dati ai soli utenti autorizzati e controllo di quando, dove e come i dati sono acceduti.

AC1No distinction between Application User and Schema Owner Full PostgreSQL fornisce i GRANT SQL standard ed ha una logica orientata agli oggetti: la separazione tra i ruoli risulta naturale anche se non sempre applicata dalle applicazioni. Postgres supporta la row-level security e le SECURITY LABEL.
AC2 Application user credential not protected in the application server External Funzionalita' esterna rispetto all'RDBMS.
AC3 Developers use application user credential External Processo esterno all'RDBMS.
AC4 DBAs do not have personal accounts and use technical accounts External Processo esterno all'RDBMS, PostgreSQL non presenta alcun vincolo per la creazione di utenze personali.
AC5 Technical accounts defined with a human algorithm and never changed External Processo esterno all'RDBMS.
AC6 End users have direct access to the DB bypassing the application External Processo esterno all'RDBMS. Con PostgreSQL e' facile verificare gli accessi correnti e storici alla base dati.
AC7No lifecycle management for DB users Partial PostgreSQL gestisce la scadenza delle password.
AC8OS administrators can escalate their privileges to DBA Partial Le utenze di OS e del database sono separate con PostgreSQL ma l'utente unix postgres ha tipicamente privilegi amministrativi.
AC9DBAs have full access to users' data Partial Di norma i DBA hanno accesso a tutti i dati. Per evitarlo e' necessario implementare una crittografazione applicativa.
LGMonitoring / Blocking and Audit Controllo SQL

Analisi delle transazioni che avvengono sulla base dati ed visualizzazione le attivita' correnti e storiche.

LG1No preventive SQL controls Partial Con proxy esterni e' possibile implementare controlli preventivi sull'SQL. Sono disponibili linee guida per evitare l'SQL-injection.
LG2No or partial and inconsistent logs Full Il logging e l'auditing di PostgreSQL sono molto completi.
LG3Logs are not analyzed External Processo esterno al DB. E' tipicamente compito di un SIEM (Security Information and Event Management)...
LG4Logs are not managed External Processo esterno al DB. E' tipicamente compito di un SIEM...
LG5No DB user accountability Full PostgreSQL fornisce la funzionalita' di Auditing.
LG6No end user accountability Full PostgreSQL fornisce la funzionalita' di Auditing.
DPData Protection Protezione dati

Processi e controlli sulla trasmissione, sull'accesso e la memorizzazione delle informazioni per tutto il ciclo di vita dei dati.

DP1Applications do not encrypt External Processo esterno al DB. PostgreSQL fornisce un ampio insieme di funzioni di crittografia nell'extension pgcrypto.
DP2No datafile encryption None Postgres non fornisce la data encryption at-rest; e' possibile utilizzare la crittografia a livello di storage.
Il TDE e' disponibile in alcuni fork.
DP3 No storage encryption External Processo esterno all'RDBMS. Su molti sistemi operativi e' una funzionalita' disponibile. Anche i sistemi di storage forniscono spesso tale funzionalita'.
DP4No network encryption Full PostgreSQL supporta la crittografia delle trasmissioni da parecchio tempo con i protocolli standard SSL/TLS.
DP5No backup / export encryption External PostgreSQL non fornisce la funzionalita' di crittografazione del backup ma questa puo' essere effettuata semplicemente con un comando esterno.
DP6Production data copied to development environments External Possono essere realizzati script ad hoc o utilizzati strumenti esterni.
DP7Unnecessary data are not hidden/masked Full Con viste ed opportuni GRANT da PostgreSQL e' possibile mascherare i dati non necessari: la maggior difficolta' e' nell'analisi che richiede competenze sui dati/applicazioni e che spesso non viene eseguita.
SCSecure Configuration Configurazione sicura

Processi e controlli per garantire la corretta configurazione dei Database.

SC1Obsolete DB / OS releases Full Le release supportate sono ben note. La compatibilita' applicativa e' abbastanza semplice da mantenere.
SC2No DB / OS hardening Full Le impostazioni di default di PostgreSQL sono generalmente sicure. PostgreSQL e' considerato un database robusto e sicuro.
SC3No patching Full PostgreSQL emette aggiornamenti con cadenza trimestrale che e' fortemente consigliato applicare.
SC4 Poor SDLC production promotion and SoD External Processo esterno all'RDBMS (SDLC: Systems Development Life Cycle, SoD: Separation/Segregation of Duties). Il completo sistema di GRANT di PostgreSQL fornisce tutto il supporto necessario.
SC5 No production user, privileges, db objects change control External Processo esterno all'RDBMS.

Dalla tabella e' chiaro che molti dei punti sono da gestire con processi o con strumenti esterni al Database. Quando la problematica riguarda il database il supporto fornito da PostgreSQL e' sempre adeguato.
Nei prossimi capitoli vengono riportati maggiori dettagli su ciascuna delle soluzioni tecniche disponibili in PostgreSQL.

DB Access Control

Per il principio del minimo privilegio (least privilege) vanno utilizzate le utenze con i diritti minori possibili per svolgere le diverse attivita'. Questo e' particolarmente importante per le utenze applicative che debbono svolgere tipicamente solo operazioni CRUD, a cui non servono i privilegi per operazioni di DDL e sono tipicamente maggiormente soggette ad attacchi e meno protette. E' quindi necessario che le utenze utilizzate dagli Application Server o dai Web Server non siano proprietarie dello schema dati.

Sono molteplici le soluzioni tecnologiche fornite da PostgreSQL per quanto riguarda il controllo degli accessi:

Le altre problematiche riportate in questa categoria vengono risolte definendo ed applicando opportune policy di sicurezza.
Ad esempio non ci sono ragioni tecniche su PostgreSQL per far utilizzare l'utenza applicativa agli sviluppatori negli ambienti di produzione. Una corretta definizione degli ambienti (eg. sviluppo, collaudo, produzione) e delle procedure per la messa in esercizio delle applicazioni e' necessaria per disporre di sistema sicuro nel suo complesso.

Monitoring / Blocking and Audit

Sono molteplici le soluzioni tecnologiche fornite da PostgreSQL per quanto riguarda il monitoraggio delle attivita' correnti sulla base dati (eg. pg_stat_activity).
E' inoltre consigliabile installare l'estensione pg_stat_statements poiche' fornisce utili dettagli sia per l'analisi delle prestazioni che per il controllo degli statement SQL.

Data protection

Sono molteplici le soluzioni tecnologiche fornite da PostgreSQL per quanto riguarda la protezione dei dati:

Secure Configuration

PostgreSQL da sempre ha tenuto in forte considerazione gli aspetti di sicurezza e tutte le versioni hanno configurazioni di default sicure.

Varie ed eventuali

Va sottolineato che, delle attivita' di messa in sicurezza evidenziate, solo alcune sono legate all’acquisto di nuovi prodotti. Spesso per risolvere la maggioranza delle problematiche e' sufficiente un buon uso di PostgreSQL e l'applicazione di adeguati processi aziendali, il tutto dopo una corretta e completa analisi di sicurezza.

Va riportato che l'importanza e la complessita' della materia sono notevoli gli interventi di messa in sicurezza di PostgreSQL vanno quindi approcciati con la necessaria competenza ed esperienza.

Tra gli strumenti utili per la raccolta delle configurazioni di sistema e dei dati prestazionali: ux2html (raccolta configurazione sistemi Unix/Linux), pg2html (raccolta configurazione PostgreSQL), dashboard con Grafana.

Sono disponibili documenti relativi agli aspetti pratici di sicurezza sui database anche per Oracle e MySQL.


Titolo: Risolvere gli errori di sicurezza sui database PostgreSQL
Livello: Medio (2/5)
Data: 31 Ottobre 2017 🎃 Halloween
Versione: 1.0.6 - 14 Febbraio 2024 ❤️
Autori: mail [AT] meo.bogliolo.name