Wenn eine Anwendung ein großes geografisches Gebiet erfordert, um ausgeführt zu werden, ist eine Organisation oft gezwungen, ihre Daten in der Cloud zu speichern. Auf MongoDB basierende Anwendungen sind keine Ausnahme von diesem Konzept. Wenn sensible Daten nicht geschützt werden, kann dies zu ernsthaften Rückschlägen für das Unternehmen führen, darunter ein ruinierter Ruf, Dateninkonsistenzen, finanzielle Verluste und manchmal ein vollständiger Datenverlust.
In der Cloud gespeicherte Daten sind anfällig für das Interesse krimineller Elemente. Personen mit böswilligen Absichten können leichter Zugriff erhalten, wenn keine Standardverfahren zur Gewährleistung der Datenbanksicherheit festgelegt wurden. Einige dieser minderwertigen Verfahren beinhalten...
- Schlechte Passwortverwaltung:Einige Entwickler codieren die Passwörter in den Quelldateien des Projekts fest, sodass sie den Inhalt leicht abrufen können, wenn ein Hacker die Anwendung dekompiliert.
- Zögern oder Versäumnis, die Datenbank und kostenlose Plugins zu aktualisieren. Neuere Datenbankversionen haben möglicherweise neue Features in Bezug auf die Sicherheit oder haben einige Features gegenüber den Vorgängern behoben.
- Unterdurchschnittliche Datenbankkonfigurationen, die beispielsweise keine verschlüsselten Entschlüsselungsschlüssel verwenden oder überhaupt kein Sicherheitsprotokoll verwenden.
Datenbankangriffe nehmen Tag für Tag zu (und der Trend wird sich voraussichtlich fortsetzen), aber Sie werden möglicherweise nicht zum Opfer, wenn Sie nicht die entsprechenden Sicherheitsüberlegungen anstellen. In diesem Artikel werden wir einige der Verfahren besprechen, die man mit der MongoDB-Installation in der Cloud überprüfen kann. Sie müssen nicht alle anwenden, aber versuchen Sie zumindest, diejenigen auszuwählen, die, wenn sie vermieden werden, Ihre Daten in eine katastrophale Situation bringen könnten.
Überlegungen zur MongoDB-Sicherheit vor der Produktion
Dies sind Überlegungen, die Sie sicherstellen sollten, dass sie gut konfiguriert sind, wenn Sie MongoDB in der Produktionsumgebung bereitstellen. Dazu gehören:
- Aktivieren und Erzwingen der Authentifizierung für die Zugriffskontrolle
- Rollenbasierte Zugriffskontrolle konfigurieren
- Netzwerkbelastung begrenzen
- Kommunikation verschlüsseln
- Daten verschlüsseln
- Auditsystemaktivitäten
- Dedizierten Benutzer zum Ausführen von MongoDB verwenden
- Offizielle und aktualisierte MongoDB-Pakete verwenden
- Deaktivieren Sie Javascript-Ausführungen, falls nicht erforderlich
- Mit MongoDB-Sicherheitsfixes aktualisiert werden
1. Aktivieren und Erzwingen der Authentifizierung für die Zugriffskontrolle
Die Zugriffskontrolle ist in MongoDB standardmäßig nicht aktiviert, aber das bedeutet nicht, dass Sie Ihre Datenbank auch ohne diese Option bereitstellen. Tatsächlich erfordern einige Datenbankpakete wie Bitnami, dass Sie eine Zugriffskontrolle einrichten, bevor Sie Ihre Datenbank verwenden. Andernfalls kann jeder Zugriff auf die Datenbank haben und somit selbst sehr sensiblen Daten ausgesetzt sein. Geben Sie einen Authentifizierungsmechanismus wie SCRAM an, damit Clients, die verbunden werden sollen, einige gültige Anmeldeinformationen angeben müssen, bevor sie sich mit der Datenbank verbinden können.
Die Verbindungszeichenfolge sollte in etwa so aussehen:
mongodb://[username:[email protected]]host[:port1][/[defaultauthdb]and not just
mongodb://host[:port1]/[defaultauthdb]
2. Rollenbasierte Zugriffskontrolle konfigurieren
Nachdem Sie Benutzer mit Administratorrechten hinzugefügt haben, schränken Sie die diesen Benutzern zugewiesenen Rollen mithilfe der rollenbasierten Zugriffssteuerung (RBAC) ein. Zu den Rollen, die ein Benutzer haben kann, gehören:Lesen, Schreiben oder beides für bestimmte oder alle Sammlungen. Daher kann ein Benutzer keine Rolle ausführen, die ihm nicht zugewiesen ist, oder kann nur Vorgänge für zugewiesene Sammlungen ausführen.
Der Benutzeradministrator wird zuerst erstellt, dann weitere Benutzer. Wenn ein Benutzer Berechtigungen für verschiedene Datenbanken hat, können Sie einen einzelnen Benutzer mit Rollen erstellen, die anwendbare Datenbankberechtigungen gewähren, anstatt den Benutzer mehrmals in verschiedenen Datenbanken zu erstellen.
Es ist ratsam, eine kleine Anzahl von Benutzern auf die Datenbank zugreifen zu lassen, wobei die Benutzer Personen oder Client-Anwendungen sein können.
Um Benutzerberechtigungen für bestimmte Rollen in MongoDB zu erstellen und zu gewähren, können Sie dieses Beispiel in der Mongo-Shell verwenden
use finance
db.createUser(
{
user: "manager",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "read", db: "loans" },
{ role: "read", db: "interests" },
{ role: "read", db: "useraccounts" },
{ role: "readWrite", db: "wages" }
]
}
)
Entscheiden Sie sich auch für externe Authentifizierungsoptionen wie LDAP und Kerberos.
3. Netzwerkbelastung begrenzen
Die Netzwerktopologie, die die Datenbank hostet, muss umfassend gesichert werden und vor allem nur auf die localhost-Schnittstelle hören. Dadurch soll eine Gefährdung durch externe Verbindungen vermieden werden, wie dies bei älteren MongoDB-Versionen der Fall war. Stellen Sie sicher, dass MongoDB in einer vertrauenswürdigen Netzwerkumgebung mit aktivierter Sicherheitsfirewall ausgeführt wird. Kontrollieren Sie den eingehenden und ausgehenden Datenverkehr mit Sicherheitsgruppen, die nicht mit anderen Instanzen verwendet werden dürfen. Verwenden Sie IP-Whitelisting, um den Zugriff von vertrauenswürdigen IP-Adressen zuzulassen, und erlauben Sie daher Verbindungen zu MongoDB-Instanzen mit Netzwerkschnittstellen und Ports nur von vertrauenswürdigen Clients.
Deaktivieren Sie außerdem den direkten SSH-Root-Zugriff.
4. Kommunikation verschlüsseln
Die MongoDB-Konfiguration sollte eingehende und ausgehende Verbindungen nur auf TLS/SSL beschränken. TLS/SSL verschlüsselt die Kommunikation zwischen Mongod- und Mongos-Komponenten einer MongoDB-Bereitstellung und allen damit verbundenen Anwendungen.
In der Produktionsumgebung sollte die MongoDB-Bereitstellung gültige Zertifikate verwenden, die von einer einzigen Zertifizierungsstelle generiert und signiert wurden.
5. Verschlüsseln Sie die Daten
Datenbankdaten nehmen zwei Formen an:Daten im Ruhezustand und während der Übertragung. Daten während der Übertragung können mithilfe der clientseitigen Feldebenenverschlüsselung gesichert werden, sind jedoch nur in Version 4.2 verfügbar. Die TLS/SSL-Verschlüsselung kümmert sich auch um Daten während der Übertragung.
Die WiredTiger Storage Engine ab Version 3.2 Enterprise stellt Daten in Storage Layer Encryption bereit. Dies bestätigt, dass nur authentifizierte Benutzer mit Entschlüsselungsschlüsseln auf die Daten zugreifen können. Wenn Sie die Verschlüsselung von WiredTiger im Ruhezustand nicht verwenden, verwenden Sie die Dateisystemverschlüsselung. Die Verschlüsselung von ruhenden Daten hält jemanden davon ab, auf den Inhalt Ihrer Datenbank zuzugreifen, wenn er Zugriff auf den physischen Server erhält, und ist daher ein entscheidender Faktor bei der Sicherung von MongoDB.
6. Systemaktivitäten prüfen
Dies ist eine Unternehmensoption, die die Verfolgung aller Änderungen an Daten und Datenbankkonfigurationen ermöglicht. Die Ereignisse werden in eine Syslog-Verbindung oder eine Protokolldatei geschrieben. Die Protokolle können DB-Authentifizierungsversuche enthalten, einschließlich Quell-IP-Adressen, und die Informationen können dabei helfen, festzustellen, welche Hosts von der Firewall für den Zugriff auf die Datenbank blockiert werden sollten. Außerdem kann man genau bestimmen, welche Ereignisse geloggt werden sollen.
Diese Überwachungsprotokolle im Allgemeinen helfen dem Administrator, einige forensische Analysen durchzuführen und somit Standardsicherheitskontrollen festzulegen.
7. Dedicated User zum Ausführen von MongoDB verwenden
MongoDB-Prozesse sollten mit einem dedizierten Benutzerkonto des Betriebssystems ausgeführt werden, für das Zugriffsberechtigungen aktiviert sein sollten.
8. Nutzen Sie offizielle und aktualisierte MongoDB-Pakete
Bestehen Sie Authentizitätsprüfungen Ihrer Pakete, um sicherzustellen, dass es sich um die offiziellen MongoDB-Pakete handelt. Die Verwendung der neuesten MongoDB-Treiber und der neuesten Version der Datenbank selbst bieten mehr Sicherheitsstabilität als die Vorgänger. Beispielsweise bietet Version 4.2 die Client-seitige Feldebenenverschlüsselung. Stellen Sie daher sicher, dass Sie auf die neueste Version von MongoDB migrieren.
9. Javascript-Ausführungen deaktivieren, falls nicht erforderlich
mapReduce und $where sind einige der ausführbaren JavaScript-Codes in MongoDB, und wenn sie nicht gut verwaltet werden, können sie zu unerwünschten Dateninkonsistenzen führen oder es einem ermöglichen, indirekt auf die Daten zuzugreifen und einige Änderungen vorzunehmen, wenn man möchte .
Im Allgemeinen ermöglicht dieser JavaScript-Code externe Injektionen, sodass nicht validierte Daten in Ihre Datenbank gelangen. Sie können sich auch dafür entscheiden, Pakete wie Mongoose zu verwenden, um Ihre Datenbank zu validieren und sich mit ihr zu verbinden. Verwenden Sie MongoDB-Operatoren anstelle von JavaScript-Ausdrücken.
10. Erhalten Sie Updates mit MongoDB-Sicherheitsfixes
Sicherheitsprotokolle können von Angreifern mit der Zeit gebrochen werden und erfordern daher fortgeschrittene Verfahren. Es ist sehr wichtig, mit den wichtigsten Sicherheitsupdates und Fehlerbehebungen aus den MongoDB-Versionshinweisen auf dem Laufenden zu bleiben. Die MongoDB-Warnseite wurde im Wesentlichen für diesen Zweck erstellt.
Fordern Sie nach Möglichkeit eine sicherheitstechnische Implementierungsanleitung an und stellen Sie sicher, dass Ihre Bereitstellung den Sicherheitsstandards entspricht.
Fazit
Datenbanken in der Produktion sind anfällig für Sicherheitsangriffe und müssen daher stark in den Schutz sensibler Daten investiert werden. Die Sicherheitsverfahren reichen von Data-in-Transit, Data-at-Rest und den verbundenen Client-Anwendungen. Neben den oben genannten Praktiken bieten Server-Hardening-Unternehmen eine weitere Ebene des Datenschutzes.
Es ist wichtig, die aktuellsten Versionen von MongoDB und Plugins zu verwenden und mit den neuesten Sicherheits- und Fehlerkorrekturen in Bezug auf Ihre Version Schritt zu halten.