Uno degli aspetti di sicurezza della gestione di un database è capire chi ha avuto accesso al database, quando e cosa ha fatto. Sebbene abbiamo già protetto il servizio MongoDB, vogliamo comunque sapere chi sta facendo cosa e rilevare se c'è qualcosa di strano. In un'indagine sulla violazione dei dati, un registro di controllo ci consente di analizzare l'attività storica, capire da quale endpoint proveniva l'attaccante e quali operazioni ha eseguito una volta all'interno del database.
In questo blog esamineremo la registrazione di audit per MongoDB e l'implementazione.
Abilitazione della registrazione di controllo in MongoDB
Per abilitare la registrazione di audit in MongoDB, dobbiamo andare al file di configurazione mongod.conf, sezione auditLog:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
Ci sono 3 tipi di destinazioni di log, che sono:file, syslog e console. Idealmente, possiamo inviare il registro di controllo a un file, in formato supportato da JSON o BSON. Possiamo anche abilitare il registro di controllo durante l'avvio del servizio MongoDB come mostrato di seguito:
mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/audit_mongodb.bson
Filtro di controllo in MongoDB
Ancora nella sezione auditLog, c'è un parametro chiamato filter. Possiamo filtrare il modello di azione che vogliamo registrare. Ad esempio, se vogliamo registrare l'autenticazione su un database specifico, possiamo utilizzare il comando seguente:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: '{ atype: "authenticate", "param.db": "user_profile" }'
Traccerà ogni autenticazione al database user_profile. Un altro esempio:vogliamo tracciare le azioni; elimina l'indice, rinomina la raccolta e elimina la raccolta nel database profilo_utente. Il comando sarebbe :
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { atype: { $in: [ "dropIndex", "renameCollection", "dropCollection" ] }, "param.ns": /^user_profile\\./ } }
Possiamo anche monitorare il processo di audit per i ruoli specifici, dovremmo definire i ruoli e il database nel filtro:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
Registrerà ogni azione relativa all'utente che ha i ruoli readWrite nel database user_profile.
Per la registrazione di controllo delle operazioni di scrittura e lettura, è necessario abilitare prima auditAuthorizationSuccess in MongoDB. Possiamo eseguire il comando seguente:
db.adminCommand( { setParameter: 1, auditAuthorizationSuccess: true } )
Oppure un'altra opzione è modificare quanto segue in mongod.conf come di seguito:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
setParameter: { auditAuthorizationSuccess: true }
Percona Server per MongoDB offre gratuitamente le funzionalità di registrazione degli audit, mentre in MongoDB è disponibile solo in Enterprise Edition. Tieni presente che l'abilitazione del parametro influirà sulle prestazioni del database del tuo MongoDB, specialmente nell'ambiente di produzione.
Quali sono le prospettive?
Possiamo inviare il registro di controllo MongoDB a un sistema di gestione della registrazione, ad esempio:stack ELK (Elasticsearch, Logstash e Kibana) oppure possiamo utilizzare il sistema di gestione dei registri del provider per scopi di analisi.
Il modo più semplice è utilizzare l'utilità jq tools nell'ambiente Linux per leggere il log in formato JSON o BSON.