Meccanismi di sicurezza dei dati

Sistema unificato di autenticazione e autorizzazione, cifratura e hashing dei dati, oltre ai sottosistemi di audit e monitoraggio che proteggono i dati in tutta la piattaforma.

Sistema unificato di autenticazione e autorizzazione

Il sistema unificato di autenticazione e autorizzazione è un componente chiave della protezione dei dati che garantisce un accesso sicuro alle risorse del sistema. Consente di gestire gli utenti, le loro autorizzazioni e l’accesso ai dati a livello dell’intero sistema.

Promemoria:

  • L’autenticazione è il processo di verifica dell’identità di un utente (per esempio, tramite nome utente e password).
  • L’autorizzazione è il processo di verifica delle autorizzazioni di un utente a eseguire determinate azioni (per esempio, l’accesso ai dati o alle funzioni del sistema).

Componenti del sistema

Autenticazione

  • Nome utente e password: il metodo tradizionale di autenticazione. Al momento dell’accesso, l’utente deve innanzitutto identificarsi con nome utente e password.
  • Autenticazione a più fattori (MFA): l’impiego di più fattori (per esempio, un token software aggiornato dinamicamente per l’API web).

L’autenticazione basata su token semplifica il processo per gli utenti già registrati. Per iniziare, l’utente invia al server una richiesta con nome utente e password. Il server li verifica rispetto ai valori registrati nel proprio database delle identità. Se l’identità è confermata, il server restituisce un token di autenticazione (anch’esso memorizzato nel database).

Quando in seguito lo stesso utente richiede l’accesso a risorse protette, tali richieste possono essere autorizzate con il token di autenticazione anziché con nome utente e password. Il server confronta il token con quello registrato nel database e concede l’accesso.

Autorizzazione

  • Ruoli e autorizzazioni: agli utenti vengono assegnati ruoli (per esempio, amministratore degli accessi, utente) che ne definiscono le autorizzazioni.
  • ACL (Access Control Lists): elenchi che definiscono chi ha accesso a quali risorse.
  • RBAC (Role-Based Access Control): controllo degli accessi basato sui ruoli.
  • ABAC (Attribute-Based Access Control): controllo degli accessi basato sugli attributi (per esempio, in base all’ora del giorno o alla posizione).

Archiviazione dei dati utente

  • Database degli utenti: memorizza le informazioni sugli utenti, sui loro ruoli e sulle loro autorizzazioni in un unico database.

Sicurezza

  • Cifratura: protegge i dati durante la trasmissione e l’archiviazione.
  • Token di accesso: token software aggiornati dinamicamente, utilizzati per la gestione delle sessioni.
  • Audit: registrazione di tutte le azioni degli utenti per una successiva analisi.

Implementazione del sistema

La piattaforma utilizza un flusso di autenticazione basato su token. L’utente accede con nome utente e password, il sistema li verifica e restituisce un token di accesso, e quel token viene poi inviato con ogni richiesta successiva per autorizzare l’accesso alle risorse protette. Come nome utente viene usato l’indirizzo e-mail dell’utente.

Esempio di richiesta in formato Curl:

Request example
curl -i --header "Content-Type: application/json" \
--request POST \
--data '{"email":"api@local.net","password":"Str0ngPas$"}'\
https://server123/api/v1/auth/sign_in

In risposta riceviamo il seguente messaggio:

Response example
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Referrer-Policy: strict-origin-when-cross-origin Content-Type: application/json; charset=utf-8 access-token: tgervk9_9xicJYpmSsnnNA
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615227012
uid: api@local.net
ETag: W/"5b9bcc76f7223b72b79d9f2d31ff0fd5"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: c18e06b4-e5bd-40b5-875d-7ac958e2fbb5
X-Runtime: 0.391069
Transfer-Encoding: chunked
{"data":{"id":6,"email":"api@local.
net","provider":"email","uid":"api@local.net","name":"API user"}}

In questa risposta ci interessa il parametro access_token. Il valore di questa intestazione viene utilizzato come password a ogni richiesta e cambia a ogni richiesta.

Ecco un esempio di richiesta che utilizza il token della risposta precedente:

Request example with token
curl -i --header "access-token: tgervk9_9xicJYpmSsnnNA" \
--header "token-type: Bearer" \
--header "client: D-Uv3ER53873olhnNLjL9w" \
--header "uid: api@local.net" \
--request GET \
--header "Content-Type: application/json" \
--data '{"page":"2"}' \
https://server123/api/v1/stations

In risposta riceviamo il seguente messaggio:

Per terminare la sessione è possibile utilizzare la procedura SignOut, oppure salvare le intestazioni necessarie dall’ultima richiesta e riutilizzarle in seguito se il token non è scaduto. Si noti che, senza terminare la sessione, l’ultimo token rimane valido per un certo periodo di tempo, a seconda delle impostazioni di sistema del server.

Vantaggi del sistema

Un sistema unificato di autenticazione e autorizzazione è un potente strumento per la protezione dei dati e il controllo degli accessi. Offre i seguenti vantaggi:

  • Gestione centralizzata: semplifica la gestione degli utenti e delle loro autorizzazioni.
  • Sicurezza: protegge i dati dagli accessi non autorizzati.
  • Coerenza: tutte le applicazioni e i sistemi utilizzano lo stesso meccanismo di autenticazione e autorizzazione.
  • Scalabilità: rende facile aggiungere nuove applicazioni e nuovi utenti.

Cifratura dei dati

Per proteggere le informazioni critiche, il sistema utilizza la cifratura (conversione delle informazioni in una forma che non può essere letta senza la chiave appropriata) e l’hashing (conversione dei dati in una stringa univoca di lunghezza fissa, ovvero un hash). Si tratta di uno dei meccanismi chiave di protezione dei dati, in grado di garantire la riservatezza, l’integrità e la sicurezza delle informazioni sia in archiviazione sia in transito.

Il sistema utilizza diversi algoritmi di cifratura e hashing dei dati.

Applicazione della cifratura nel sistema

Cifratura in archiviazione

  • Database: cifratura di singoli campi del database.
  • File: cifratura dei file prima di salvarli su disco.

Cifratura dei dati in transito

  • HTTPS: utilizzo di SSL/TLS per cifrare i dati durante la trasmissione in rete.
  • VPN: creazione di un tunnel sicuro per la trasmissione dei dati.

Cifratura delle password

Memorizzazione degli hash delle password anziché delle password stesse.

Esempi di cifratura e decifratura dei dati

Esaminiamo alcuni esempi di cifratura e decifratura dei file di configurazione del sistema.

Cifratura dei dati

example.config
mkdir_p(encrypted_dir_path)
encrypted = Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key')
encrypted.write(File.read(decrypted_file_path))
File.delete(decrypted_file_path)

Decifratura dei dati

example.config
mkdir_p(decrypted_dir_path)
File.write(decrypted_file_path,
  Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key').read
)

Vantaggi della cifratura dei dati

  • Riservatezza: protezione dei dati dagli accessi non autorizzati.
  • Integrità: garanzia che i dati non siano stati alterati.
  • Autenticità: conferma dell’origine dei dati.
  • Requisiti di conformità: rispetto dei requisiti normativi.

Audit e monitoraggio

Diversi sottosistemi monitorano l’attività degli utenti e del sistema, rilevano comportamenti sospetti e garantiscono la conformità ai requisiti di sicurezza. Insieme essi:

  • raccolgono, analizzano e conservano le informazioni sull’attività degli utenti e del sistema per garantire la tracciabilità e la conformità;
  • monitorano costantemente il sistema e le apparecchiature in tempo reale per rilevare gli incidenti e rispondervi.

Obiettivi

  • Tracciabilità: garantire che tutta l’attività degli utenti e del sistema sia registrata.
  • Sicurezza: rilevare e prevenire l’attività non autorizzata.
  • Rilevamento dei problemi: individuare problemi e anomalie hardware e adottare le azioni correttive.
  • Ottimizzazione delle prestazioni: analizzare le prestazioni del sistema e individuare i colli di bottiglia che richiedono ottimizzazione.
  • Previsione e pianificazione: raccogliere dati per prevedere i carichi di lavoro futuri e pianificare le risorse.
  • Conformità: garantire la conformità ai requisiti normativi.
  • Analisi degli incidenti: analizzare gli incidenti verificatisi per prevenirne di futuri.

Componenti di audit e monitoraggio

Raccolta dei dati

  • Log: registrazioni delle azioni degli utenti e del sistema a tutti i livelli.
  • Metriche: dati sulle prestazioni del sistema (per esempio, utilizzo della CPU, utilizzo della memoria).

Archiviazione dei dati

  • Archiviazione dei log: raccolta dei dati da varie fonti, con archiviazione distribuita di log e metriche organizzata per area tematica.
  • Rotazione dei log: eliminazione automatica dei log obsoleti per risparmiare spazio.

Analisi dei dati

  • Ricerca e filtro: la possibilità di cercare e filtrare i log in base a vari criteri.
  • Analisi: l’utilizzo di strumenti di analisi dei dati (per esempio, Zabbix).

Avvisi

  • Avvisi: invio di notifiche su attività sospette ed emergenze (per esempio, tramite e-mail o chat Telegram).
  • Azioni automatiche: risposta automatica agli incidenti (per esempio, blocco di un utente).

Esempio di implementazione

Logging

Utilizzo di una libreria per il logging nell’applicazione.

Raccolta degli errori nei dati provenienti dai contatori

Archiviazione dei log

Utilizzo di un’archiviazione centralizzata per i log.

Tabella audits

Questa tabella memorizza le informazioni di logging dei dati.

CampoTipoDescrizione
idintegerIdentificatore univoco del record (chiave primaria).
auditable_idintegerRiferimento all’oggetto sottoposto ad audit (equipment.id, stations.id …).
auditable_typecharacter varyingOggetto sottoposto ad audit (equipment, stations …).
user_idintegerRiferimento all’identificatore dell’utente (users.id)
actioncharacter varyingAzione
audited_changesjsonbModifiche sottoposte ad audit
versionintegerVersione delle modifiche
remote_addresscharacter varyingIndirizzo remoto
request_uuidcharacter varyingL’identificatore dell’evento.
created_attimestamp(6) without time zoneData/ora della modifica.
Tabella error_logs

Questa tabella memorizza le informazioni sugli errori nei dati provenienti dai contatori.

CampoTipoDescrizione
idintegerIdentificatore univoco del record (chiave primaria).
loggable_idintegerRiferimento all’oggetto registrato (equipment.id …).
loggable_typecharacter varyingOggetto registrato (equipment …).
messageintegerRiferimento all’identificatore dell’errore.
paramsjsonbCaratteristiche dell’errore.
created_attimestamp(6) without time zoneData/ora della modifica.

Analisi dei log

Strumenti utilizzati per analizzare i log:

  • Configurazione di moduli web per visualizzare e analizzare i log.
  • Creazione di dashboard per monitorare l’attività degli utenti.

Avvisi

Avvisi personalizzati per attività sospette:

  • Configurazione di avvisi in Zabbix per monitorare le metriche.
  • Invio di notifiche tramite e-mail o chat Telegram per gli eventi di allarme.

Vantaggi dell’audit e del monitoraggio

L’audit e il monitoraggio sono potenti strumenti di protezione dei dati che consentono di tracciare l’attività degli utenti e del sistema, individuare comportamenti sospetti e garantire la conformità ai requisiti di sicurezza. Essi permettono di:

  • garantire la tracciabilità e la sicurezza dei dati;
  • individuare e prevenire gli incidenti;
  • soddisfare i requisiti normativi.

Argomenti correlati

Ultimo aggiornamento il

Questa pagina è stata utile?