it-swarm-eu.dev

Wie sichere ich eine MongoDB-Instanz?

Hat jemand Erfahrung mit dem Sichern/Härten von MongoDB-Servern? Checklisten oder Anleitungen wären willkommen.

28
AaronS

NoSQL-Datenbanken sind relativ neu (obwohl wohl ein altes Konzept), ich habe keine spezifischen MongoDB-Härtungshandbücher gesehen und die üblichen Stellen, an denen ich suche ( CISSecurity , Herstellerpublikationen, Sans usw. kommen alle zu kurz). Schlägt vor, dass es ein gutes Projekt für eine Organisation, einen Studenten, eine Infosec-Community wäre, eines zu schreiben und es zu pflegen.

Es gibt einige grundlegende Informationen in Mongodb.org. Alle hier beschriebenen Schritte sollten befolgt werden, einschließlich der Aktivierung der Sicherheit. Die Site selbst gibt an, dass MongoDB nur ein sehr grundlegendes Sicherheitsniveau aufweist. http://www.mongodb.org/display/DOCS/Security+and+Authentication

MongoDB und andere NoSQL-Datenbanken verfügen auch über viel weniger (insbesondere Sicherheits-) Funktionen als ausgereifte SQL-Datenbanken. Daher ist es unwahrscheinlich, dass Sie fein abgestimmte Berechtigungen oder Datenverschlüsselung finden. MD5 wird für das Kennwort-Hashing mit dem Benutzernamen als Startwert verwendet. Es gibt auch Einschränkungen, z. B. dass die Authentifizierung mit Sharding vor Version 1.9.1 nicht verfügbar ist. Daher ist es eine gute Idee, immer eine Risikobewertung durchzuführen und ein Bedrohungsmodell zu erstellen, um Ihre Sicherheitsanforderungen und Bedrohungen zu ermitteln. Basierend auf dieser Ausgabe sind MongoDB- oder NoSQL-Datenbanken im Allgemeinen möglicherweise nicht für Ihre Anforderungen geeignet, oder Sie müssen sie möglicherweise auf eine andere Weise verwenden, um ihre Vorteile zu maximieren und ihre Schwächen zu minimieren (z. B. für Datenextrakte anstelle Ihrer sensibelsten Informationen). oder hinter einer Reihe von Ebenen von Netzwerksteuerelementen, anstatt direkt mit Ihrer Webanwendung verbunden zu sein).

Trotzdem glaube ich fest daran, dass Sicherheitsprinzipien technologieunabhängig sind. Wenn Sie selbst die neuesten Angriffe und eine gute Liste auf datalossdb.org analysieren, ist es erstaunlich, wie viele noch mit Standardkennwörtern und fehlenden Patches zusammenhängen. Wenn Sie die folgenden Praktiken befolgen, sollte eine gründliche Verteidigung ausreichend Sicherheit bieten, um die meisten Vermögenswerte (z. B. Einzelpersonen, kommerzielle) zu schützen, möglicherweise nicht militärisch.

Prinzipien der Datenbankhärtung:

  • Authentifizierung - Authentifizierung erforderlich, da Administratoren oder privilegierte Benutzer nach Möglichkeit zwei Faktoren haben (dies auf Plattformebene oder über ein Netzwerkgerät, da die Datenbank selbst dies nicht unterstützt). Verwenden Sie die schlüsselbasierte Authentifizierung, um Kennwörter nach Möglichkeit zu vermeiden.
  • Autorisierung - Minimale Anzahl erforderlicher Konten mit minimal erforderlichen Berechtigungen. Nur-Lese-Konten werden unterstützt. Verwenden Sie sie daher. Da keine granulare Zugriffssteuerung vorhanden ist, verwenden Sie alternative Mittel, z. B. einen Webdienst vor der Datenbank, der Geschäftslogik einschließlich Zugriffssteuerungsregeln enthält, oder innerhalb der Anwendung. Minimieren Sie die Berechtigungen, die Mongodb auf der Plattform ausführt, z. sollte nicht als root laufen.
  • Standard- und Systemkonten - Ändern Sie die Kennwörter aller Standardkonten, entfernen/sperren/deaktivieren Sie, was Sie können, deaktivieren Sie die Anmeldung, wo Sie können.
  • Protokollierung und Überwachung - aktivieren Sie Protokollierung und exportieren Sie diese in ein zentrales Überwachungssystem. Definieren Sie spezifische Warnungen und Untersuchungsverfahren für Ihr Überwachungspersonal
  • Eingabevalidierung - NoSQL-Datenbanken sind immer noch anfällig für Injection-Angriffe. Daher sind nur die Übergabe validierter bekannter guter Eingaben, die Verwendung der Paramaterisierung in Ihren Anwendungsframeworks und alle bewährten Methoden zum Übergeben nicht vertrauenswürdiger Eingaben an eine Datenbank erforderlich
  • Verschlüsselung - Abhängig von der Empfindlichkeit der Daten ist es erforderlich, vertrauliche Daten auf Anwendungsebene zu verschlüsseln oder zu hashen, da Sie auf Datenbankebene nicht verschlüsseln können. Transportverschlüsselung auch über die Netzwerkschicht (z. B. VPN).
  • Minimieren Sie Dienste und ändern Sie den Standard-Überwachungsport
  • Entfernen Sie alle Beispiel- oder Testdatenbanken
  • Verfügen Sie über einen Patch-Verwaltungsprozess, um alle relevanten Sicherheitspatches rechtzeitig zu identifizieren, zu bewerten und zu installieren
  • Härten Sie die Plattform und die Virtualisierungsplattform, falls verwendet
  • Konfigurieren Sie geeignete Netzwerksteuerungen, z. Firewalls, VLANs zur Minimierung des Zugriffs auf die Datenbank, Upstream-Denial-of-Service-Filterdienst, vollqualifiziertes DNS, separate Produktions- und Nichtproduktionsdatenbanken
  • Physisch sichere Umgebung
  • Haben Sie einen Änderungsmanagementprozess
25
Rakkhi

Hier ist eine Checkliste für die MongoDB-Sicherheit

Authentifizierung aktivieren - Auch wenn Sie Ihre Mongodb-Server in einem vertrauenswürdigen Netzwerk bereitgestellt haben, empfiehlt es sich, die Authentifizierung zu aktivieren. Es bietet Ihnen "Tiefenverteidigung", wenn Ihr Netzwerk gefährdet ist. Bearbeiten Sie Ihre Mongod-Konfigurationsdatei, um die Authentifizierung zu aktivieren

Setzen Sie Ihre Produktionsdatenbank nicht dem Internet aus. Die Einschränkung des physischen Zugriffs auf Ihre Datenbank ist ein wichtiger Aspekt der Sicherheit. Wenn dies nicht erforderlich ist, setzen Sie Ihre Produktionsdatenbank nicht dem Internet aus. Im Falle eines Kompromisses, wenn ein Angreifer keine physische Verbindung zu Ihrem MongoDB-Server herstellen kann, sind Ihre Daten umso sicherer. Wenn Sie sich in AWS befinden, können Sie Ihre Datenbanken in einem privaten VPC-Subnetz platzieren. Weitere Informationen finden Sie im Blogbeitrag Bereitstellen von MongoDB in einer VPC.

Firewalls verwenden - Verwenden Sie Firewalls, um einzuschränken, welche anderen Entitäten eine Verbindung zu Ihrem Mongodb-Server herstellen dürfen. Es wird empfohlen, Ihren Anwendungsservern nur Zugriff auf die Datenbank zu gewähren. Wenn Sie auf AWS gehostet werden, verwenden Sie "Sicherheitsgruppen", um den Zugriff einzuschränken. Wenn Sie bei einem Anbieter gehostet werden, der keine Firewall-Konstrukte unterstützt, können Sie diese einfach mithilfe von "iptables" selbst konfigurieren. Informationen zum Konfigurieren von iptables für Ihr Szenario finden Sie in der Mongodb-Dokumentation.

Verwenden von Schlüsseldateien zum Einrichten des Replikatsatzes - Geben Sie eine gemeinsam genutzte Schlüsseldatei an, um die Kommunikation zwischen Ihren Mongodb-Instanzen in einem Replikatsatz zu ermöglichen. Um dies zu aktivieren, fügen Sie den Schlüsseldateiparameter wie folgt zur Konfigurationsdatei hinzu. Der Inhalt der Datei muss auf allen Computern gleich sein.

HTTP-Statusschnittstelle deaktivieren Mongodb stellt standardmäßig eine http-Schnittstelle bereit, die standardmäßig auf Port 28017 ausgeführt wird und die Statusseite "Home" enthält. Diese Schnittstelle wird für die Verwendung in der Produktion nicht empfohlen und ist am besten deaktiviert. Verwenden Sie die Konfigurationseinstellung "nohttpinterface", um die http-Schnittstelle zu deaktivieren.

Deaktivieren Sie die Schnittstelle REST Die Schnittstelle monogdb REST wird für die Produktion nicht empfohlen. Sie unterstützt keine Authentifizierung. Sie ist standardmäßig deaktiviert. Wenn Sie sie aktiviert haben Wenn Sie die Konfigurationsoption "Rest" verwenden, sollten Sie sie für Produktionssysteme deaktivieren.

Konfigurieren von Bind_ip Wenn Ihr System über mehrere Netzwerkschnittstellen verfügt, können Sie mit der Option "bind_ip" Ihren Mongodb-Server so einschränken, dass nur die relevanten Schnittstellen abgehört werden. Standardmäßig wird mongodb an alle Schnittstellen gebunden

SSL aktivieren - Wenn Sie kein SSL verwenden, werden Ihre Daten unverschlüsselt zwischen Ihrem Mongo-Client und dem Mongo-Server übertragen und sind anfällig für Abhör-, Manipulations- und "Man in the Middle" -Angriffe. Dies ist besonders wichtig, wenn Sie über unsichere Netzwerke wie das Internet eine Verbindung zu Ihrem Mongodb-Server herstellen.

Rollenbasierte Autorisierung - MongoDB unterstützt die rollenbasierte Authentifizierung, um Ihnen eine genaue Kontrolle über die Aktionen zu geben, die von jedem Benutzer ausgeführt werden können. Verwenden Sie rollenbasierte Konstrukte, um den Zugriff einzuschränken, anstatt alle Benutzer zu Administratoren zu machen. Weitere Informationen finden Sie in der Rollendokumentation.

Enterprise Mongodb & Kerberos Enterprise Mongodb wird zur Authentifizierung in Kerberos integriert. Weitere Informationen finden Sie in der Mongodb-Dokumentation. Benutzername/Passwort-Systeme sind von Natur aus unsicher - verwenden Sie nach Möglichkeit eine auf dem Bordstein basierende Authentifizierung.

https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/

Haftungsausschluss: Ich bin der Gründer von scalegrid.io

Außerdem würde ich empfehlen, dass Sie Ihre Mongodb-Daten auch in Ruhe verschlüsseln, wie in den anderen Kommentaren angegeben. Sie können LUKS (Linux Unified Key Setup) verwenden, um die Verschlüsselung auf Volume-Ebene einzurichten.

2
Dharshan

Einige sehr erste Dinge, an die man sich erinnern sollte, sind:

  • Entfernen Sie die IP-Bindung von allen nur für die IP (privat oder lokal), für die Sie eine Verbindungsanforderung erwarten
  • Ändern Sie die Standardportbindungen
  • Geben Sie nur die erforderlichen Berechtigungen an (z. B. keine Berechtigungen zum Aktualisieren/Löschen, um Abfragebenutzer auszuwählen).
  • Richten Sie die SSH-Schlüssel für die erforderliche Master-Slave-Verbindung ein und entfernen Sie die Verwendung von Kennwörtern
  • Sie können sogar einen verschlüsselten Tunnel für die Verbindung zwischen Ihrer Anwendung und mongodb einrichten

tatsächlich gelten sie für alle DataStorage-Dienste

PS: sehr begrenzte Mongodb-Erfahrung

2
AbhishekKr