En av säkerhetsaspekterna med att hantera en databas är att förstå vem som fick åtkomst till databasen, när och vad de gjorde. Även om vi redan har säkrat MongoDB-tjänsten vill vi fortfarande veta vem som gör vad och upptäcka om det är något konstigt. I en undersökning av dataintrång låter en granskningslogg oss analysera historisk aktivitet, förstå från vilken slutpunkt angriparen kom från och vilka operationer de gjorde när de var inne i databasen.
I den här bloggen kommer vi att granska revisionsloggning för MongoDB och implementering.
Aktivera revisionsinloggning i MongoDB
För att aktivera granskningsloggning i MongoDB måste vi gå till mongod.confs konfigurationsfil, avsnitt auditLog:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
Det finns tre typer av loggdestinationer, som är:fil, syslog och konsol. Helst kan vi skicka granskningsloggen till en fil, i format som stöds av JSON eller BSON. Vi kan också aktivera granskningsloggen under uppstart av MongoDB-tjänsten enligt nedan:
mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/audit_mongodb.bson
Revisionsfilter i MongoDB
Fortfarande i auditLog-sektionen finns det en parameter som heter filter. Vi kan filtrera handlingsmönstret som vi vill logga. Om vi till exempel vill logga autentisering till en specifik databas kan vi använda kommandot nedan:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: '{ atype: "authenticate", "param.db": "user_profile" }'
Den spårar varje autentisering till databasen user_profile. Ett annat exempel:vi vill spåra åtgärderna; släpp index, byt namn på samling och släpp samling i databasen user_profile. Kommandot skulle vara :
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { atype: { $in: [ "dropIndex", "renameCollection", "dropCollection" ] }, "param.ns": /^user_profile\\./ } }
Vi kan också övervaka revisionsprocessen för de specifika rollerna, vi skulle behöva definiera rollerna och databasen i filtret:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
Den loggar alla åtgärder som är relaterade till användaren som har readWrite-rollerna i user_profile-databasen.
För granskningsloggning av skriv- och läsoperationer måste vi först aktivera auditAuthorizationSuccess i MongoDB. Vi kan köra under kommandot :
db.adminCommand( { setParameter: 1, auditAuthorizationSuccess: true } )
Eller ett annat alternativ är att ändra följande i mongod.conf enligt nedan:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
setParameter: { auditAuthorizationSuccess: true }
Percona Server för MongoDB ger revisionsloggningsfunktionerna gratis, medan den i MongoDB endast är tillgänglig i Enterprise Edition. Observera att aktivering av parametern kommer att påverka databasprestanda för din MongoDB, särskilt i produktionsmiljön.
Vad händer härnäst?
Vi kan skicka MongoDB-revisionsloggen till ett logghanteringssystem, till exempel:ELK (Elasticsearch, Logstash och Kibana) stack eller så kan vi använda logghanteringssystemet från leverantören för analysändamål.
Det enklaste sättet är att använda verktyget jq tools i Linux-miljön för att läsa loggen i JSON- eller BSON-format.