MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Datenbanksicherheit 101:Datenbankzugriffsrechte verstehen

Daten sind das neue Gold für große Unternehmen und Organisationen. Sie gelten als das Lebenselixier der meisten modernen Unternehmen, und es gibt eine Fülle von Möglichkeiten, sie an das große Internetpublikum zu verkaufen oder zu vermarkten. Für die großen E-Commerce- oder Social-Media-Unternehmen treiben Daten ihre Fähigkeit voran, große Einnahmen und Einnahmen zu erzielen, für die die Daten streng gesichert sind und über einen ausgeklügelten Schutz gegen böswillige Online-Angriffe und Eindringlinge verfügen.

Daher beginnt der wertvolle Zustand von Daten wie Gold, sobald sie verarbeitet werden. Ihr Rohwert ist voller Durcheinander, als wäre es ein gigantisches unsortiertes Knabberzeug. Sobald ihre Essenz strukturiert ist, vervielfacht sich der Wert der Daten. Stellen Sie sich vor, Sie haben eine Bildungsseite, auf der Benutzer bezahlen können. Sobald Sie unzählige Vorlesungen und Module haben, die Ihr Zielpublikum lernen, entwickeln und ein gewisses Maß an Produktivität verdienen kann, haben Sie den Geschmack von Möglichkeiten und Erfolg erfasst, da Sie die Möglichkeit haben, Gebühren zu regulieren, bevor sie die gewünschten strukturierten Daten erhalten . Auch wenn dies wie der Traum eines jeden vom Erfolg klingt, gibt es bei der Verarbeitung von Big Data und der zugrunde liegenden Essenz jede Menge Komplikationen, und ein wichtiges Anliegen sind Bedrohungen für Ihre Datenbank.

Datenbankbedrohungen haben im Allgemeinen zahlreiche und umfangreiche Sektoren, die betrachtet und untersucht werden müssen. Die häufigsten Ursachen sind jedoch Datendiebstahl und Datenschutzverletzungen. Eine weitere häufige Bedrohung sind umfangreiche Privilegien oder der Zugriff auf Datenbanken, die einem Benutzer falsch zugewiesen und/oder bereitgestellt werden. Der Schutz des gesamten Serverhosts ist ein Anliegen für jeden, der eine Datenbank verwaltet. Verstärken Sie Ihre Sicherheit und bewältigen Sie alle Arten anwendbarer Angriffe wie Abhören, Ändern, Wiedergeben und Denial-of-Service (DDoS) nicht nur für die Datenbank, sondern auch für den gesamten zugrunde liegenden Stack, der Zugriff hat oder mit Ihrem Datenspeicher verbunden ist.

In diesem Blog besprechen wir das Ausmaß der Notwendigkeit, warum Sie Datenbankzugriffsrechte verstehen und haben müssen.

Gefahren falscher Zugriffsrechte

Wir müssen zwangsläufig einen Benutzer auf physischer und technischer Ebene teilen oder zumindest erstellen. Wenn Sie jemand anderem Zugriff gewähren, bedeutet dies, dass Sie der Person vertrauen. Das bedeutet auch, dass die autorisierte Person die Gefahren und Risiken des Teilens von Zugriffen und Daten von der Außenwelt verstehen muss.

Der wichtigste Punkt bei der Sicherung Ihrer Zugriffsrechte ist das Sicherheitsniveau zwischen Ihren Technikern, wie z. B. einem Datenbankadministrator, Sicherheitstechniker oder Serveradministrator. Wenn das Verständnis schlecht ist oder es an Wissen und Erfahrung fehlt, insbesondere über die aktuellsten Schwachstellen und Gefährdungen, kann dies ein Problem für die Organisation oder das Unternehmen darstellen.

Es gibt grundlegende Dinge, die verstanden und berücksichtigt werden müssen, damit es minimal oder zumindest nicht eingedrungen oder aufgedeckt werden kann. Andernfalls könnten Ihre Daten von außen oder zumindest der falschen Person oder Personen gefährdet werden. Möglicherweise, um Ihre Daten zu stehlen und sie für sich selbst zu verwenden, um finanziell zu profitieren, oder sie können sie von Ihnen erpressen und Geld im Austausch für Ihre schlechte Sicherheitsimplementierung verlangen.

In diesem Abschnitt sehen wir uns einige häufige Ursachen dieser Sicherheitsbedrohungen an.

Root-Zugriffsrechte teilen

In einer On-Premise-Umgebung beruht ein üblicher Fall einer Datenbankverletzung hauptsächlich auf der Gefahr, Root-Zugriff entweder auf Betriebssystemebene oder auf Datenbanksoftwareebene zu gewähren. Es gibt Fälle, in denen das Root-Passwort verteilt und mehreren Personen zugänglich gemacht wird, was nur auf die Administratoren beschränkt sein sollte, die ausschließlich am System arbeiten. Dies könnte aufgrund einer fehlenden Sicherheitscheckliste oder Maßnahmen im Protokoll vor der Implementierung der Zugriffsrechte passieren. Eine Sicherheits-Checkliste hilft bei der Verfolgung von Zugriffen und Berechtigungen, die Risiken und Gefahren darstellen könnten, insbesondere wenn ein bestimmter Betriebssystembenutzer einem Eindringling ausgesetzt ist. Die Checkliste hilft Ihnen auch dabei, Sicherheitsmaßnahmen zu besprechen oder sich einen Überblick zu verschaffen, die vorhanden sind und als Protokoll für Ihre Organisation implementiert wurden.

Zum Beispiel kann ein Benutzer mit Root-Zugriff viel Schaden anrichten, wie z. B. das Entfernen aller Ihrer Daten von Ihrem physischen Speicherlaufwerk, das Zurücksetzen des Root-Passworts, das Erstellen seines/ihres eigenen Benutzers/Passworts, das aussieht wie ein legitimer Benutzer (kann für eine sehr lange Zeit verwendet werden, um Daten zu sammeln, wenn es nicht früh erwischt wird), sudo an einen anderen Betriebssystembenutzer wie einen Postgres-Benutzer und viele weitere beängstigende Dinge, an denen sich der Eindringling erfreuen kann.

Wenn Sie MongoDB verwenden, kann sich ein Benutzer mit Root-Zugriff bei Ihrem Datenbankserver anmelden. Solange der Eindringling Ihre /etc/mongod.conf oder Ihre mongodb-Konfigurationsdatei finden und den Pfad Ihres Schlüssels finden kann, ist es einfach, sich anzumelden. Mit diesem Befehl können Sie sich beispielsweise anmelden,

[[email protected] ~]# mongo -u __system -p "$(tr -d '\011-\015\040' < /etc/mongo-cluster.key)" --authenticationDatabase local --eval "db.adminCommand( { listDatabases: 1, nameOnly:1 } )"

Betrachten Sie ein normales MySQL-Installations-Setup, ein Root-Zugriff kann ohne Passwort für den Localhost-Zugriff bleiben. Es ist einfach, Zugang zu erhalten, sobald Sie root sind. Der Zugriff auf Dateien wie $HOME/.my.cnf oder das Anzeigen des Inhalts von /etc/my.cnf führt Sie zum einfachen Zugriff.

Es wird dringend empfohlen, Ihren Root-Zugriff nur auf die geringste Anzahl von Personen zu beschränken oder zu gewähren, die direkt mit dem Server arbeiten, um die erforderlichen Pakete, Sicherheitsaktualisierungen und Patches zu aktualisieren das Entwicklungsteam.

Sudoer richtig verwenden

Mainstream-Open-Source-Datenbanksoftware wie PostgreSQL, MySQL/MariaDB, MongoDB erfordert die Erstellung eines bestimmten Betriebssystembenutzers. Der Betriebssystembenutzer benötigt eine bestimmte Rolle, die begrenzt ist, um die Verwaltung seiner Fähigkeiten innerhalb der Datenbankfunktionalität zu ermöglichen. Für den zugrunde liegenden Speichergerätepfad müssen die richtigen Lese- und Schreibberechtigungen festgelegt werden. Es gibt jedoch Fälle, in denen einige, die diese spezifischen Benutzer für Datenbanksoftware verwenden, über sudo-Berechtigungen verfügen, die auch in der Lage sind, auf den Benutzer zuzugreifen, der ausschließlich für den Datenbankzugriff bestimmt ist. Die Benutzerrechte im Betriebssystem müssen eingeschränkt werden, und es ist am besten, den Zugriff basierend auf der Rolle einzuschränken. Zum Beispiel für Percona Server CVE-2016-6664, obwohl dies behoben wurde, ist diese Art von Schwachstelle ein Beispiel für einen möglichen Angriff von einem bestimmten Benutzer, der Zugriff auf das MySQL-Konto hat und Root-Zugriff erhält. Sudo-Benutzer müssen überprüft und ihnen klar gemacht werden, dass die Rolle nur auf eine bestimmte Aufgabe beschränkt ist.

Das Aktivieren eines Linux-Überwachungssystems wie auditd kann helfen, die Sicherheit zu verbessern, da es übersehene Zugriffsrechte auf Betriebssystemebene erhöht, was zu Sicherheitslücken Ihrer Datenbank führen könnte. SELinux und AppArmor sind gute Beispiele für Sicherheitsmodule für Ihre Linux-Umgebung, die Ihr Datenbanksystem hosten, um Ihre Sicherheit vor Eindringlingen oder Verstößen zu verbessern, die zu einer Gefährdung Ihrer Daten führen würden.

Gewähren von Datenbankzugriffsrechten

Mainstream-Open-Source-Datenbanken bieten eine detaillierte Liste von Berechtigungen, die angepasst werden können, um nur einer bestimmten Aktion für einen bestimmten Benutzer zugewiesen zu werden. Dies ist eine umfassende Möglichkeit, Datenbankadministratoren dabei zu helfen, Daten sicher zu trennen und Aktionen basierend auf bestimmten Berechtigungen durchzuführen.

Allgemeine Zugriffsrechte

Ihre am häufigsten verwendeten Privilegien basieren auf diesen drei Kategorien:

  • Fähig zu lesen/suchen wie SELECT, SHOW VIEW, FIND

  • Fähig zum Einfügen/Aktualisieren/Löschen wie INSERT, UPDATE, DELETE, REMOVE

  • Kann administrative Aktionen ausführen, wie CREATE USER, CREATE ROLE, ALTER, REPLICATION, DROP USER/TABLES/ SCHEMAs, Kill-Operationen usw.

Diese Kategorien können basierend auf Ihrer Sicherheitscheckliste zu verfeinerten Privilegien erweitert werden. Es ist sinnvoll, einen bestimmten Benutzer zu definieren, der mit bestimmten Rechten für eine bestimmte Aufgabe erstellt werden soll. Beispielsweise kann eine Anwendung mehrere Benutzer mit zugewiesenen eigenen Berechtigungen haben. Obwohl die Anwendung bei dieser Art der Implementierung sehr komplex sein kann. Es gibt Fälle, in denen die Konnektivität pro Benutzer ressourcenintensiv sein kann, z. B. bei der Verwendung von ORM wie Hibernate. Andererseits hängt es vom architektonischen Design Ihrer Anwendung ab. Der Zweck einer Pro-Benutzer-Basis in einer Anwendung kann dazu beitragen, ein verfeinertes Datenbankzugriffsrecht aufrechtzuerhalten und zu vermeiden, dass Ihre Daten durch unerwünschte Löschungen, Aktualisierungen oder eine SQL-Injektion, die Ihre Datenbank angreift, beschädigt werden.

In den meisten Fällen verwendet eine Anwendung einen Benutzer, um sich mit der Datenbank zu verbinden, der nur auf seine Aktionen beschränkt ist, die speziell für die Ausführung der Anwendung ausgeführt werden. Es ist am besten, wenn Sie Ihre Anwendungsbenutzerrechte so gestalten, dass sie nur Lese-/Schreibzugriff haben. Wenn jedoch administrative Aktionen erforderlich sind, muss der Zugriff auf ein bestimmtes Skript, einen Daemon oder ein Modul in Ihrer Anwendung von den normalen Benutzern getrennt werden.

Zu vermeidender Datenbankzugriff

PostgreSQL und MySQL/MariaDB haben diese Option, um einem Benutzer ALLE Berechtigungen zu erteilen. Für PostgreSQL ist es auch am besten, Ihren Benutzer mit NOSUPERUSER zu haben. Dies ist nach Möglichkeit unbedingt zu vermeiden. Dieses Privileg kann die meisten Aktionen ausführen, die Ihre wertvollen Daten möglicherweise zerstören oder beschädigen können. Sie können ALLE Berechtigungen für Ihren Administrator- oder Root-Zugriff verwenden, sind jedoch nur auf Benutzer beschränkt, die die Super-Berechtigungen benötigen, um administrative Aufgaben auszuführen und die Daten zu verwalten.

Zugriff auf Tabellen- oder Schemabasis

Es hat sich bewährt, einem Benutzer nur Zugriff auf die erforderlichen Tabellen zu gewähren. . Selbst wenn der Benutzer über einige Administratorrechte verfügt, betrifft der Schaden also nur eine begrenzte Anzahl von Tabellen. Entweder Sie können auf ein Schema-weites setzen; Der Zugriff auf eine eingeschränkte Tabelle bietet eine granulare Art von Privilegien und hilft Ihnen, Ihre Daten vor Schaden zu bewahren.

Zugriff auf Host-Only beschränkt

Die Verbindung über die Ressourcen-IP-Adresse hilft, den Zugriff auf Ihre Daten einzuschränken. Vermeiden Sie die Verwendung von '%', wie zum Beispiel in MySQL,

GRANT SELECT, INSERT, DELETE ON mydb TO [email protected]'%' IDENTIFIED BY 'password';

Das Ausmaß des Schadens ist jedem Host ausgesetzt, zu dem eine Verbindung hergestellt werden soll, und das ist nicht das, was Sie wollten. Es ist verwundbar und die Herausforderung, in Ihre Datenbank einzudringen, ist sehr gering.

Stellen Sie für PostgreSQL sicher, dass Sie Ihre pg_hba.conf und den Benutzer nur auf das spezifische Host-Limit gesetzt haben. Dies gilt auch für MongoDB, für das Sie es in Ihrer MongoDB-Konfigurationsdatei oder /etc/mongodb.conf festlegen können. In MongoDB können Sie mit Authentifizierungsbeschränkungen herumspielen und clientSource bzw. serverAddress festlegen, aber nur für die Sie verlangen, dass sich der Client oder Benutzer mit ihm verbindet oder validiert wird.

Rollenbasierte Zugriffskontrolle

Role-Based Access Control (RBAC) in Datenbanken bietet eine bequeme Möglichkeit, den Benutzer zu verwalten, oder eine einfache Möglichkeit, einen Benutzer mit seinen zugewiesenen Berechtigungen zu gruppieren, die mit einer Liste von Benutzern oder Benutzergruppen verknüpft sind.

Wobei Sie beachten müssen, dass Rollen in allen Open-Source-Datenbanken anders gehandhabt werden. Beispielsweise hat MySQL die Rollen wie folgt definiert:

Eine MySQL-Rolle ist eine benannte Sammlung von Berechtigungen. Genau wie Benutzerkonten können auch Rollen Rechte gewährt und entzogen werden.

Einem Benutzerkonto können Rollen zugewiesen werden, wodurch dem Konto die mit jeder Rolle verbundenen Privilegien gewährt werden. Dies ermöglicht die Zuweisung von Berechtigungssätzen zu Konten und bietet eine bequeme Alternative zur Gewährung individueller Berechtigungen, sowohl für die Konzeption der gewünschten Berechtigungszuweisungen als auch für deren Implementierung.

MongoDB definiert Rolle mit RBAC als,

MongoDB verwendet rollenbasierte Zugriffskontrolle (RBAC), um den Zugriff auf ein MongoDB-System zu regeln. Einem Benutzer werden eine oder mehrere Rollen zugewiesen, die den Zugriff des Benutzers auf Datenbankressourcen und -vorgänge bestimmen. Außerhalb der Rollenzuweisungen hat der Benutzer keinen Zugriff auf das System.

Dagegen in PostgreSQL,

PostgreSQL verwaltet Datenbankzugriffsberechtigungen mithilfe des Rollenkonzepts. Eine Rolle kann entweder als Datenbankbenutzer oder als Gruppe von Datenbankbenutzern betrachtet werden, je nachdem, wie die Rolle eingerichtet ist. Rollen können Datenbankobjekte besitzen (z. B. Tabellen und Funktionen) und können anderen Rollen Berechtigungen für diese Objekte zuweisen, um zu steuern, wer Zugriff auf welche Objekte hat. Darüber hinaus ist es möglich, einer anderen Rolle die Mitgliedschaft in einer Rolle zu gewähren, sodass die Mitgliedsrolle die einer anderen Rolle zugewiesenen Berechtigungen nutzen kann.

Das Rollenkonzept fasst die Konzepte „Benutzer“ und „Gruppen“ zusammen. In PostgreSQL-Versionen vor 8.1 waren Benutzer und Gruppen unterschiedliche Arten von Entitäten, aber jetzt gibt es nur noch Rollen. Jede Rolle kann als Benutzer, Gruppe oder beides fungieren.

Obwohl diese Datenbanken die für ihre Verwendung spezifischen Rollen implementieren, teilen sie das Konzept, dem Benutzer Rollen zuzuweisen, um Berechtigungen bequem zuzuweisen. Die Verwendung von Rollen ermöglicht es Datenbankadministratoren, erforderliche Benutzer für die Anmeldung oder den Zugriff auf die Datenbank zu verwalten.

Stellen Sie sich vor, Sie haben eine Liste von Benutzern, die Sie verwalten müssen, oder eine Liste von Benutzern, die gelöscht oder widerrufen werden können, wenn sie nicht mehr benötigt werden. In einigen speziellen Fällen, wenn eine bestimmte Aufgabe bearbeitet werden muss, können Datenbankadministratoren Benutzer mit bereits vorhandenen Rollen erstellen. Diese erstellten Benutzer können nur für kurze Zeit einer bestimmten Rolle zugewiesen und dann widerrufen werden, sobald sie nicht mehr benötigt werden.

Audits helfen auch dabei, Benutzer zu trennen, die einen Verdacht auf Schwachstellen oder Datenoffenlegung haben, so dass es in diesem Fall hilft, die Benutzer mit Rollen sehr einfach zu verwalten.

Benutzerverwaltungssystem

Wenn Ihre Datensicherheit richtig gehandhabt und umgesetzt wird, ebnet sie Ihnen den Weg zum Erfolg. Obwohl es keine perfekte Lösung gibt, da sich Schwachstellen und Eindringlinge immer weiterentwickeln. Es ist wie ein Wurm, der versucht, die ganze Zeit zu lauern, bis er sein Ziel erreicht hat, Ihre Sicherheit zu durchbrechen und Zugriff auf Ihre Daten zu erhalten. Ohne geeignete Tools wie Warnsysteme oder Hinweise auf Unsicherheiten und Schwachstellen wäre es schwierig, Ihre Daten zu schützen.

ClusterControl hilft Ihnen, Ihre Benutzer zu verwalten und die Berechtigungen Ihrer Benutzer von Load Balancern bis hin zu den Hauptdatenbankbenutzern zu überprüfen oder zu überprüfen. Es bietet auch Ratgeber und Warnungen, damit es Sie über mögliche Schwachstellen oder Eindringlinge informiert.

Wenn Sie beispielsweise eine MySQL/MariaDB mit ProxySQL im Voraus verwenden, können Sie Benutzer importieren und hinzufügen. Für den Import von Benutzern sammelt es die Liste der Benutzer, die in Ihrem aktuellen MySQL/MariaDB-Cluster vorhanden sind, und bietet Ihnen an, seine aktuellen Berechtigungen zu überprüfen. Siehe unten,

Auch in diesem Fall kann ein ProxySQL-Benutzer bei einer solchen Schwachstelle schnell deaktiviert werden für den jeweiligen Benutzer bekannt ist.

ClusterControl bietet Ihnen auch die Möglichkeit, Benutzer direkt aus Ihrer Datenbank zu verwalten, zB für MySQL/MariaDB oder PostgreSQL. Für MySQL/MariaDB können Sie zu → Performance → Advisors:

zugegriffen werden kann

Durch Klicken auf die Schaltfläche Bearbeiten können Sie anpassen, wie ClusterControl reagieren würde, falls es Benutzer mit einem beliebigen Host oder '%' oder einen Benutzer ohne Passwort findet. Sehen Sie, wie das Skript angezeigt wird, sobald Sie auf klicken Bearbeiten-Schaltfläche.

Sobald ClusterControl feststellt, dass einer dieser Advisor ausgelöst wird, wird eine Warnung angezeigt und auch an die von Ihnen eingerichtete E-Mail gesendet, oder wenn Benachrichtigungen von Drittanbietern integriert sind, wird es benachrichtigt dort auch.

Fazit

Das Zugriffsrecht auf Datenbanken ist eines der Hauptanliegen von Datenschutzverletzungen und -einbrüchen. Wenn Ihr Datenbankbenutzer exponiert ist oder wenn die aktuelle Datenbankversion, die nicht gepatcht wurde, einer größeren Bedrohung ausgesetzt war, ist die Wahrscheinlichkeit, gehackt zu werden oder das Ziel von Ransomware und Diebstahl zu werden, sehr hoch. Das Verständnis der Zugriffsrechte und das Festlegen der korrekten Limits hilft Ihnen, die Gefahren der Offenlegung Ihrer wertvollen Daten zu mindern.