DataSunrise sponsert AWS re:Invent 2024 in Las Vegas, bitte besuchen Sie uns am Stand #2158 von DataSunrise

MySQL-Datenbanksicherheit freischalten: Beste Praktiken

MySQL-Datenbanksicherheit freischalten: Beste Praktiken

MySQL ist eine der beliebtesten Open-Source-Datenbanken, die auf einer Vielzahl von Plattformen läuft. Es ist relativ einfach zu konfigurieren, einfach Firewall und weist auch unter erheblicher Last gute Leistungsmerkmale auf, weist aber dennoch eine Vielzahl von sicherheitsrelevanten Konfigurationsproblemen auf.

Bewährte Vorgehensweisen zur MySQL-Datenbanksicherheit

Die beste Praxis des Sicherheitsmanagements ist es, paranoid zu sein und jederzeit aus jeder Richtung einen Angriff zu erwarten, aber wenn Sie einige Vorsichtsmaßnahmen ergreifen, wird es keine so harte Arbeit sein. Die folgenden Richtlinien helfen Ihnen, die Angriffsfläche erheblich zu reduzieren.

Lesen Sie zunächst die Sicherheitsrichtlinien unter http://dev.mysql.com/doc/refman/5.7/en/security.html und prüfen Sie regelmäßig auf Updates. Für MySQL RDBMS wurden kürzlich mehrere schwerwiegende Schwachstellen gefunden, für die frei verfügbare Exploits existieren. Nutzen Sie Updates, die neue Funktionen hinzufügen und vor allem Sicherheitslücken beheben.

Überwachen Sie regelmäßig Schwachstellendatenbanken. Seien Sie stets über neu entdeckte Bedrohungen für Ihr System informiert.

Betriebssystem

  1. Schalten Sie unnötige Daemons und Dienste aus. Je weniger Komponenten Angreifer erreichen können, desto geringer ist die Wahrscheinlichkeit, dass sie eine Schwachstelle finden, die für den Zugang zum System genutzt werden kann. Durch eine einfache Host-Konfiguration verringern Sie den Verwaltungsaufwand und mindern das Risiko von Sicherheitslücken.
  2. Stellen Sie sicher, dass MySQL-Benutzer keinen Zugriff auf Dateien außerhalb eines begrenzten Verzeichnissatzes haben. MySQL-Daten Dateien sollten nur von Root- oder Administratorkonten gelesen werden können.
  3. Deaktivieren oder beschränken Sie den Fernzugriff. Wenn Sie Ihren MySQL-Fernzugriff benötichen, konfigurieren Sie die GRANT-Anweisung zur Benutzer Einrichtung so, dass eine SSL-Verbindung erforderlich ist.
  4. Stellen Sie sicher, dass außer dem MySQL-Benutzer niemand die MySQL-Konfigurations- und Protokolldateien lesen kann. Die Dateien my.cnf, my.ini und master.info enthalten häufig unverschlüsselte Benutzernamen und Passwörter. Wenn es eine Abfrageprotokolldatei gibt, enthält diese wahrscheinlich auch Passwörter. Einige MySQL-Konfigurationsdateien können auch Klartext-Benutzernamen und -Passwörter enthalten. Stellen Sie sicher, dass diese Dateien vor unerwünschten Benutzern geschützt sind.
  5. Führen Sie MySQL mit der Option –chroot aus. Sie bietet eine hervorragende Abschwächung der Macht der Dateiberechtigung. Chroot wird verwendet, um den Dateizugriff eines Prozesses auf ein bestimmtes Verzeichnis zu beschränken. Selbst mit der chroot-Option kann ein Angreifer, der Dateiberechtigungen erhält, alle MySQL-Daten lesen und wahrscheinlich weiterhin UDFs (User Defined Functions) ausführen.
  6. Löschen Sie regelmäßig Ihre .mysql_history-Datei oder verlinken Sie sie dauerhaft mit /dev/null. Standardmäßig finden Sie auf Unix-Systemen im Home-Verzeichnis eine .mysql_history-Datei. Sie enthält ein Protokoll aller Befehle, die Sie im MySQL-Client eingegeben haben. Führen Sie den folgenden Befehl aus, um die Historie zu löschen:
cat /dev/null > ~/.mysql_history

Benutzer

Nach der Konfiguration des Betriebssystems müssen Sie ein Berechtigungsmodell erstellen und Benutzerkonten zuweisen.

  1. Entfernen Sie während der Initialisierungsphase alle nicht-root MySQL-Benutzer, damit Sie wissen, wo Sie in Bezug auf Benutzer, die Zugriff auf die Datenbank haben, stehen. Der beste Weg ist, bei Null anzufangen und Benutzer nach Bedarf aufzubauen.
  2. Benennen Sie den root-Benutzernamen um und ändern Sie das Passwort mit verschiedenen Zahlen und Zeichen. Sie können den Benutzernamen des Administrators mit dem folgenden Befehl in der MySQL-Konsole ändern: mysql> RENAME USER root TO new_name;
  3. Vergeben Sie keine Kontoberechtigungen, die sie nicht wirklich benötigen, insbesondere File_priv, Grant_priv und Super_priv. Erwägen Sie, ein separates MySQL-Konto zu erstellen, das Ihre Anwendung für die Interaktion mit dem Dateisystem innerhalb von MySQL verwenden kann. Beachten Sie, dass dieser Benutzer Zugriff auf alle MySQL-Daten, einschließlich Passwort-Hashes, haben wird.
  4. Erstellen Sie, wenn möglich, einen MySQL-Benutzer für jede Webanwendung oder für jede Rolle innerhalb jeder Webanwendung. Weisen Sie diesem Benutzer innerhalb der Anwendung nur die für die erforderlichen Befehle benötigten Berechtigungen zu. Es kann mühsam erscheinen, macht aber Sinn, wenn es darum geht, ein umfassendes Sicherheitssystem zu etablieren.
  5. Wenn entfernte Verbindungen aktiviert sind, geben Sie REQUIRE SSL in der GRANT-Anweisung zur Benutzer Einrichtung an. Einige Exploit-Skripte funktionieren nicht, da sie keine SSL-Unterstützung haben. Darüber hinaus gewährleistet das SSL-Protokoll die Vertraulichkeit einer Passanfrage-Sequenz. Sie können auch Einschränkungen basierend auf einem Client-seitigen Zertifikat festlegen, das für die Authentifizierung mit SSL verwendet wird. Eine weitere hilfreiche Sicherheitsmaßnahme: Das Wissen eines Passworts allein reicht nicht aus, es wird auch ein spezielles Zertifikat benötigt.
  6. Geben Sie niemandem Zugriff auf die Tabelle mysql.user, außer Benutzern mit root-Berechtigungen.

MySQL-Konfiguration

  1. Deaktivieren Sie den Befehl LOAD DATA LOCAL INFILE. Es handelt sich um eine Konstruktion, die hilft, lokale Dateien in eine Tabelle zu importieren. Unter bestimmten Umständen kann dies jedoch dazu führen, dass der Inhalt der Datei /etc/passwd abgerufen wird. Ein Exploit hierfür ist seit 2013 frei verfügbar. Fügen Sie der my.cnf-Datei set-variable=local-infile=0 hinzu.
  2. Entfernen Sie ungenutzte UDFs. UDFs stellen ebenfalls Bedrohungen für die Datenbanksicherheit dar. Wenn Sie ungenutzte UDFs in der Tabelle mysql.func sehen, entfernen Sie sie.
  3. Wenn Sie nur lokale Verbindungen verwenden und keine Remote-Hosts auf MySQL zugreifen müssen, deaktivieren Sie TCP/IP-Verbindungen mit der Option –skip-networking.
  4. Entfernen Sie die Test-Datenbank. Es gibt standardmäßig eine Testdatenbank, auf die jeder zugreifen kann. Entfernen Sie sie oder beschränken Sie die Berechtigungen.
  5. Entfernen Sie Anonyme Konten. Lassen Sie keine Benutzer mit leeren Passwörtern.

    Sie können anonyme Benutzer mit diesem Befehl finden:

    select * from mysql.user where user=””;
  6. Stellen Sie sicher, dass der MySQL-Verkehr verschlüsselt ist.
  7. Aktivieren Sie die Protokollierung über die Option –log. Laut MySQL-Dokumentation ist das “allgemeine Abfrageprotokoll” eine Debugging-Funktion, sie können es aber auch als Sicherheitsmaßnahme verwenden. Es protokolliert erfolgreiche Verbindungen und ausgeführte Abfragen. Standardmäßig ist das Abfrageprotokoll deaktiviert, Sie können es mit der Option –log aktivieren.

Bedenken Sie, dass Abfrageprotokolle und Fehlerprotokolle auch eine Informationsquelle für Angreifer sind. Stellen Sie sicher, dass die Protokolldatei nur für den Administrator oder das Root-Konto des Systems sichtbar ist. Es protokolliert auch nicht die Ergebnisse der Abfragen und abgerufenen Daten, aber es gibt spezielle Datenbankaktivitätsüberwachungslösungen dafür.

Überwachen Sie regelmäßig Abfrageprotokolle und suchen Sie nach SQL-Injektionen und der Verwendung der Dateisystemsyntax load_file, infile und outfile.

Installieren Sie ein Antivirus- und Antispam-Programm. Setzen Sie eine Firewall ein, um den ein- und ausgehenden Netzwerkverkehr zu kontrollieren und vor Angriffen zu schützen.

Ein umfassendes MySQL-Datenbanksicherheitssystem wird durch die Kombination einer Vielzahl unauffälliger Konfigurationsänderungen aufgebaut. Jedes Detail ist wichtig. Es gibt keine Garantie für 100%ige Sicherheit, aber die Verfolgung eines maximalen Schutzes ist im Zeitalter der Cyberkriminalität ein Muss.

Nächste

Einfache Command Line Interface

Einfache Command Line Interface

Erfahren Sie mehr

Benötigen Sie die Hilfe unseres Support-Teams?

Unsere Experten beantworten gerne Ihre Fragen.

Allgemeine Informationen:
[email protected]
Kundenservice und technischer Support:
support.datasunrise.com
Partnerschafts- und Allianz-Anfragen:
[email protected]