Et af sikkerhedsaspekterne ved at administrere en database er at forstå, hvem der har adgang til databasen, hvornår og hvad de gjorde. Selvom vi allerede har sikret MongoDB-tjenesten, vil vi stadig gerne vide, hvem der gør hvad, og opdage, om der er noget mærkeligt. I en undersøgelse af databrud giver en revisionslog os mulighed for at analysere historisk aktivitet, forstå, fra hvilket endepunkt angriberen kom fra, og hvilke handlinger de foretog, når de var inde i databasen.
I denne blog vil vi gennemgå revisionslogning for MongoDB og implementering.
Aktivering af revisionslogning i MongoDB
For at aktivere revisionslogning i MongoDB skal vi gå til mongod.conf-konfigurationsfilen, afsnittet auditLog:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
Der er 3 typer logdestinationer, som er:fil, syslog og konsol. Ideelt set kan vi sende revisionsloggen til en fil i JSON- eller BSON-understøttet format. Vi kan også aktivere revisionsloggen under opstart af MongoDB-tjenesten som vist nedenfor:
mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/audit_mongodb.bson
Revisionsfilter i MongoDB
Stadig i auditLog-sektionen er der en parameter kaldet filter. Vi kan filtrere det handlingsmønster, som vi vil logge. For eksempel, hvis vi ønsker at logge godkendelse til en specifik database, kan vi bruge nedenstående kommando:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: '{ atype: "authenticate", "param.db": "user_profile" }'
Det vil spore enhver godkendelse til user_profile-databasen. Et andet eksempel:vi vil spore handlingerne; drop indeks, omdøb samling og drop samling i user_profile database. Kommandoen ville være :
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { atype: { $in: [ "dropIndex", "renameCollection", "dropCollection" ] }, "param.ns": /^user_profile\\./ } }
Vi kan også overvåge revisionsprocessen for de specifikke roller, vi bliver nødt til at definere rollerne og databasen i filteret:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
Det vil logge hver handling relateret til brugeren, som har readWrite-rollerne i user_profile-databasen.
For revisionslogning af skrive- og læseoperationer skal vi først aktivere auditAuthorizationSuccess i MongoDB. Vi kan køre nedenstående kommando :
db.adminCommand( { setParameter: 1, auditAuthorizationSuccess: true } )
Eller en anden mulighed er at ændre følgende i mongod.conf som nedenfor:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
setParameter: { auditAuthorizationSuccess: true }
Percona Server til MongoDB giver revisionslogningsfunktionerne gratis, mens den i MongoDB kun er tilgængelig i Enterprise Edition. Bemærk venligst, at aktivering af parameteren vil påvirke databaseydelsen af din MongoDB, især i produktionsmiljøet.
Hvad er det næste?
Vi kan sende MongoDB-revisionsloggen til et logstyringssystem, f.eks.:ELK (Elasticsearch, Logstash og Kibana) stak, eller vi kan bruge logstyringssystemet fra udbyderen til analyseformål.
Den enkleste måde er at bruge værktøjet jq tools i Linux-miljøet til at læse loggen i JSON- eller BSON-format.