Datenbanksicherheit ist ein weites Thema, das von präventiven Maßnahmen bis hin zum Fernhalten unerwünschter Besucher reicht. Selbst wenn Sie Ihre MongoDB-Server vollständig sichern könnten, möchten Sie trotzdem wissen, ob jemand versucht hat, in Ihr System einzudringen. Und wenn es ihnen gelingt, Ihre Sicherheit zu durchbrechen und den MongoDB-Ransom-Hack zu installieren, benötigen Sie einen Audit-Trail für Post-Mortems oder um neue vorbeugende Maßnahmen zu ergreifen. Ein Überwachungsprotokoll würde es Ihnen ermöglichen, jeden Anmeldeversuch zu verfolgen und zu sehen, was er in Ihrem System getan hat.
Die MongoDB Enterprise-Version enthält die Möglichkeit, das Audit-Protokoll zu aktivieren, aber der Community-Version fehlt diese Funktionalität. Percona hat in seinem von MongoDB abgeleiteten Percona Server für MongoDB eine eigene Audit-Protokollierungsfunktion entwickelt. Die MongoDB- und Percona-Ansätze unterscheiden sich voneinander, und wir erklären, wie Sie beide konfigurieren und verwenden.
MongoDB-Audit-Protokollierung
Das MongoDB-Prüfprotokoll ist einfach einzurichten:Um die Prüfprotokollierung in einer JSON-Datei zu aktivieren, fügen Sie einfach den folgenden Abschnitt zu Ihrer Konfigurationsdatei hinzu und starten Sie MongoDB neu:
auditLog:
destination: file
format: JSON
path: /var/lib/mongodb/auditLog.json
MongoDB unterstützt Datei, Konsole und Syslog als Ziele. Für Dateiformate gibt es zwei Optionen:JSON und BSON. In JSON sehen die Audit-Log-Zeilen etwa so aus:
{ "atype" : "authCheck", "ts" : { "$date" : "2017-02-15T22:20:08.322-0000" }, "local" : { "ip" : "127.0.0.1", "port" : 27017 }, "remote" : { "ip" : "127.0.0.1", "port" : 63357 }, "users" : [], "roles" : [], "param" : { "command" : "update", "ns" : "test.inserttest", "args" : { "update" : "preauth_case", "updates" : [ { "q" : { "createdByUserId" : -2 }, "u" : { "$set" : { "statusCode" : "Update" } }, "multi" : false, "upsert" : false } ], "ordered" : true } }, "result" : 0 }
Die obige Konfiguration würde das Überwachungsprotokoll für jede einzelne Aktion eines beliebigen Benutzers Ihres Systems aktivieren. Wenn Sie eine hohe Parallelität haben, würde dies die Leistung Ihres MongoDB-Clusters drastisch verringern. Glücklicherweise gibt es die Option, Ereignisse zu filtern, die protokolliert werden sollen.
Filter für die Audit-Protokollierung können auf die Art der Abfrage, den Benutzer/die Rolle der Abfrage oder auf die Sammlung, die abgefragt wird, gesetzt werden. Die Dokumentation zur Audit-Protokollierung bei MongoDB ist sehr umfassend und langwierig mit vielen Beispielen. Nachfolgend geben wir einige der wichtigsten Beispiele an.
Authentifizierung bei einer bestimmten Sammlung:
filter: '{ atype: "authenticate", "param.db": "test" }'
Protokoll für mehrere Audit-Typen:
filter: '{ atype: { $in [ "update", "delete" ]}, "param.db": "test" }'
Protokollieren Sie alle Authentifizierungsprüfungen für Einfügungen/Aktualisierungen/Löschungen in einer bestimmten Sammlung:
filter: '{ atype: "authCheck", "param.ns": "test.orders", "param.command": { $in: [ "find", "insert", "delete", "update", "findandmodify" ] } }'
Wie Sie sehen, können die Filter sehr flexibel sein und Sie können die Nachrichten filtern, die Sie für Ihren Prüfpfad benötigen.
Multiplenines Become a MongoDB DBA – Bringing MongoDB to ProductionErfahren Sie, was Sie wissen müssen, um MongoDBDownload for Free bereitzustellen, zu überwachen, zu verwalten und zu skalierenPercona-Server für MongoDB-Audit-Protokollierung
Die Audit-Protokollierung von Percona Server for MongoDB ist auf JSON-Dateien beschränkt. Die Mehrheit der Benutzer protokolliert nur in JSON-Dateien, aber es ist unklar, ob Percona in Zukunft andere Protokollierungsfunktionen hinzufügen wird.
Je nach Version von Percona Server for MongoDB kann Ihre Konfiguration anders sein. Zum Zeitpunkt des Schreibens haben alle Versionen die folgende Syntax:
audit:
destination: file
format: JSON
path: /var/lib/mongodb/auditLog.json
Dieser Konfigurationsunterschied wurde jedoch kürzlich behoben, muss aber noch freigegeben werden. Nach der Veröffentlichung sollte es wieder der MongoDB-Anweisung auditLog folgen:
auditLog:
destination: file
format: JSON
path: /var/lib/mongodb/auditLog.json
Das Format von Percona ist etwas anders:
{ "atype" : "authenticate", "ts" : { "$date" : { "$numberLong" : "1487206721903" } }, "local" : { "host" : "n3", "port" : 27017 }, "remote" : { "host" : "172.16.140.10", "port" : 50008 }, "users" : [ { "user" : "admin", "db" : "admin" } ], "params" : { "user" : "admin", "db" : "admin", "mechanism" : "SCRAM-SHA-1" }, "result" : 0 }
Im Gegensatz zu MongoDB, das alles protokolliert, entschied sich Percona dafür, nur die wichtigen Befehle zu protokollieren. Der Quelle des Percona-Audit-Plugins nach zu urteilen, werden die folgenden Abfragen unterstützt:Authentifizierung, Benutzer erstellen/aktualisieren/löschen, Rollen hinzufügen/aktualisieren/entfernen, Datenbank/Index erstellen/löschen und die meisten wichtigen Admin-Befehle.
Auch die Filterung des Audit-Logs von Percona Server for MongoDB scheint nicht dem gleichen Standard wie MongoDB zu folgen. Es ist ziemlich unklar, was die genaue Filtersyntax und Optionen sind, da die Percona-Dokumentation darüber sehr prägnant ist.
Wenn Sie das Auditlog ohne Filter aktivieren, erhalten Sie mehr als genug Einträge in Ihrer Protokolldatei. Von hier aus können Sie den Filter eingrenzen, da er der JSON-Syntax der Protokolleinträge folgt.
Nutzung des Audit-Protokolls
Um es sich einfacher zu machen, ist es vielleicht am besten, das Audit-Log in ein Log-Analyse-Framework einzuspeisen. Ein ELK-Stack ist eine hervorragende Umgebung, in der Sie Ihre Analysen durchführen können, und ermöglicht es Ihnen, ganz einfach einen Drilldown auf detailliertere Ebenen durchzuführen. Die Verwendung eines Field Mappers würde es Ihnen sogar ermöglichen, den Audit-Trail innerhalb von ELK zu erstellen.
Wie in der Einleitung beschrieben, können wir das Audit-Log für verschiedene Sicherheitszwecke verwenden. Am offensichtlichsten ist es, wenn Sie es als Referenz während einer Obduktion benötigen. Das MongoDB-Audit-Log gibt einen detaillierten Überblick darüber, was genau passiert ist. Das Audit-Log von Percona enthält etwas weniger Informationen, sollte aber für die meisten Post-Mortems ausreichen. Die Verwendung des Überwachungsprotokolls für Post-Mortems ist großartig, obwohl wir das Problem lieber von vornherein verhindert hätten.
Ein weiterer Zweck des Überwachungsprotokolls besteht darin, Trends zu erkennen, und Sie können Fallen für eine bestimmte Überwachungsprotokollnachricht setzen. Ein gutes Beispiel wäre, die Rate der (fehlgeschlagenen) Authentifizierungsversuche zu überprüfen und, wenn diese einen bestimmten Schwellenwert überschreitet, darauf zu reagieren. Je nach Situation können die ergriffenen Maßnahmen unterschiedlich sein. Eine Aktion könnte darin bestehen, die IP-Adresse, von der die Anfragen kommen, automatisch zu blockieren, aber in einem anderen Fall könnten Sie sich mit dem Benutzer darüber beraten, warum das Passwort vergessen wurde. Es hängt wirklich von dem Fall und der Umgebung ab, in der Sie arbeiten.
Eine weitere fortschrittliche präventive Maßnahme wäre die Verwendung von MongoDB als Honeypot und die Nutzung des Audit-Protokolls, um unerwünschte Benutzer zu fangen. Stellen Sie einfach MongoDB bereit und erlauben Sie jedem, sich mit Ihrem MongoDB-Server zu verbinden. Verwenden Sie dann das Audit-Protokoll, um zu erkennen, was Benutzer tun werden, wenn sie Dinge tun dürfen, die über ihre normalen Befugnisse hinausgehen, und blockieren Sie sie bei Bedarf. Die meisten Menschen gehen lieber den einfachen Weg als den harten Weg, damit der Honeypot einen Angriff abwehren kann und der Hacker zum nächsten Ziel übergeht.
Schlussfolgerung
Neben der Erläuterung, wie das Audit-Protokoll sowohl für MongoDB Enterprise als auch für Percona Server for MongoDB eingerichtet wird, haben wir auch erklärt, was Sie möglicherweise mit den protokollierten Daten im Audit-Protokoll tun können.
Standardmäßig aktiviert ClusterControl das Audit-Protokoll nicht, aber es ist relativ einfach, es clusterweit mit unserem Config Manager zu aktivieren. Sie können es auch in den Konfigurationsvorlagen aktivieren, bevor Sie einen neuen Cluster bereitstellen.
Viel Spaß beim Clustern!