MySQL ist eines der beliebtesten Verwaltungssysteme für relationale Datenbanken, das ein Jackpot für Angreifer ist, die versuchen, sich in die Datenbanken einzuschleichen. Ein neu installierter MySQL-Datenbankserver kann viele Schwachstellen und Schlupflöcher aufweisen. Da die Datensicherheit von großer Bedeutung ist, ist es zwingend erforderlich, jeden Aspekt der MySQL-Sicherheit zu verstehen.

Dieser Artikel konzentriert sich auf die Überwachung und Sicherheit Ihrer MySQL-Datenbank und bietet neun Tipps zur Erhöhung der Sicherheit.

1. Vermeiden Sie unnötige Privilegien

MySQL erlaubt mehrere Berechtigungsanweisungen, die, wenn sie einem unterprivilegierten Benutzer unnötigerweise zugewiesen werden, dazu führen können, dass Dateien gelesen/geschrieben und andere Benutzerrechte untergraben werden. Einige der potenziell riskantesten Berechtigungsanweisungen sind FILE, GRANT, SUPER, ALTER, DELETE, SHUTDOWN und so weiter. Sie können mehr darüber in der offiziellen MySQL-Dokumentation nachlesen. Weisen Sie daher keine Superuser-Privilegien wie FILE, GRANT, SUPER und PROCESS nicht-administrativen Konten zu. Sie können diese unnötigen Berechtigungen auf globaler, Datenbank- und Tabellenebene wie folgt widerrufen:

REVOKE ALL ON *.* FROM 'user_name'@'host_name'; #Globale Privilegien
REVOKE CREATE, DROP ON database_name.* FROM 'user_name'@'host_name'; #Datenbankberechtigungen
REVOKE INSERT, UPDATE, DELETE ON database_name.table_name FROM 'user_name'@'host_name'; #Tabellenrechte
Flush-Privilegien;

2. Beschränken Sie Remote-Logins

Der Fernzugriff erleichtert die Arbeit von Datenbankadministratoren, setzt den Server jedoch potenziellen Schwachstellen und Exploits aus. Sie können den Fernzugriff für alle Arten von MySQl-Benutzerkonten deaktivieren, indem Sie der Hauptkonfigurationsdatei eine skip-networking-Variable hinzufügen und den Dienst neu starten.

[mysqld]
Netzwerk überspringen
sudo-Dienst mysql neustarten

In ähnlicher Weise müssen Sie den Zugriff auf das Root-Konto deaktivieren, wenn nicht sogar alle, um die Remote-Anmeldungen des Root-Kontos einzuschränken. Diese Vorsichtsmaßnahme verhindert das Brute-Forcing des MySQL-Root-Kontos.

mysql> delete from mysql.user where user='root' and host not in ('localhost', '127.0.0.1', '::1'); mysql> Flush-Privilegien; 

3. Funktionen deaktivieren (load_file, outfile, dumpfile)

Eine weitere Vorsichtsmaßnahme zum Schutz von MySQL vor lokaler Dateiinjektion besteht darin, Funktionen zu deaktivieren, auf die nur über das FILE-Grant-Privileg zugegriffen werden kann. Die Datei FILE ist eine Option, die es Benutzern mit geringen Berechtigungen mit globalen Befehlsoptionen ermöglicht, Dateien auf dem Server zu lesen oder zu schreiben.

  • lade Datei

Die Funktion load_file lädt den Dateiinhalt vom Server als String. Der folgende Befehl lädt beispielsweise den gesamten Inhalt aus der /etc/passwd Datei wie folgt:

select load_file('/etc/passwd')
  • outfile

Auf ähnliche Weise schreibt die outfile-Funktion Inhalt in die lokalen Serverdateien. Angreifer können diese Funktion verwenden, um wie folgt eine Nutzlast in die Datei auf dem Server zu schreiben:

Wählen Sie „Local File SQL Injection“ in die Ausgangsdatei „/tmp/file.txt“;
cat /tmp/file.txt

Ausgabe:

Lokale Datei-SQL-Injektion
  • Dumpdatei

Diese Funktion verwendet die ausgewählte Ursache, um in die Datei zu schreiben, ohne die Ausgabe an den Bildschirm zurückzugeben.

cat /tmp/file.txt
Wählen Sie „Hallo Welt!“ aus. in die Dumpdatei '/tmp/world';

Ausgabe:

Abfrage OK, 1 Zeile betroffen (0,001 Sek.)

Sie können diese Funktionen deaktivieren, indem Sie das FILE-Privileg wie folgt widerrufen:

FILE on *.* von 'user_name'@'localhost' widerrufen;

Verwandt: Ein Anfängerleitfaden für Metasploit in Kali Linux (mit praktischen Beispielen)

4. Deaktivieren Sie den Standardport

Wir wissen, dass MySQL-Dienste auf Port 3306 ausgeführt werden und Angreifer die Ports scannen, um die im Netzwerk ausgeführten Dienste zu überprüfen. Um Security by Obscurity hinzuzufügen und den standardmäßigen MySQL-Port zu ändern, indem Sie die Systemvariable port in der Hauptkonfigurationsdatei bearbeiten, müssen Sie Folgendes eingeben:

vim /etc/mysql/my.cnf
port=XXXX
sudo-Dienst mysql neustarten

5. Vermeiden Sie Platzhalter in Kontonamen

Kontonamen in MySQL bestehen aus zwei Teilen, nämlich einem Benutzer- und einem Hostnamen "Benutzername"@"Hostname". Es ermöglicht dem Administrator, Konten für Benutzer mit demselben Namen zu erstellen, die sich von verschiedenen Hosts aus verbinden. Der Hostteil eines Kontonamens erlaubt jedoch Platzhalterkonventionen, die von überall aus ein Zugriffspunkt auf die Datenbank sein können.

Die optionale Verwendung des Hostnamen- oder IP-Adresswerts entspricht 'user_name'@'%', wobei % mit dem MySQL-Muster übereinstimmt, das mit der LIKE-Operation übereinstimmt, und % einen beliebigen Hostnamen bedeutet. Unterdessen bedeutet Zugriff von „192.168.132.%“ jeden Versuch aus dem Klasse-C-Netzwerk. Außerdem kann jeder auf die Datenbank zugreifen, indem er den Hostteil als „192.18.132.mysql.com“ bezeichnet.

Um solche Versuche zu vermeiden, erlaubt MySQL die Definition einer Netzmaske mit dem Hostwert, um die Netzwerkbits einer IP-Adresse zu identifizieren:

client-ip_add & netmask = host_name

Die Syntax zum Erstellen eines Hostnamens lautet host_ip/netmask:

BENUTZER „jhon“ @ „192.168.132.0/255.255.255.0“ ERSTELLEN; 

Der obige Hostwert aktiviert den Benutzer John Zugriff auf die Datenbank von jeder IP im Bereich von 192.168.132.0-192.168.132.255. Ebenso erlauben die Hostwerte 192.168.132.0/255.0.0.0, 192.168.132.0/255.255.0.0 Hosts aus den Netzwerken der Klassen A und B. Während 192.168.132.5 nur den Zugriff von der spezifischen IP erlaubt.

6. Deaktivieren Sie den expliziten Zugriff

Der Benutzername in MySQL ist entweder ein Name, mit dem die Datenbanken eingehende Verbindungen akzeptieren, oder ein leerer Benutzername "@"host_name", der einen anonymen Benutzer erstellt. Die Anwesenheit eines anonymen Benutzers kann Angreifer jedoch dazu bringen, auf den Datenbankserver zuzugreifen. Außerdem erstellen MySQL-Versionen vor MySQL 5.7 einen anonymen Satz von Benutzern, und die Installation nach dem Versions-Upgrade fügt diese Benutzer immer noch hinzu.

Wählen Sie Benutzer, Host und Passwort aus mysql.user aus, wobei Benutzer wie '';

Sie können feststellen, dass die Benutzer- und Kennwortspalten leer sind und der Zugriff auf localhost beschränkt ist. Sie möchten jedoch nicht, dass jemand auf die Datenbank zugreift. Verwenden Sie den folgenden Befehl, um anonyme Benutzer zu löschen:

Benutzer " "@"localhost" löschen
Flush-Privilegien;

7. Legen Sie ein Nicht-Root-Konto als Eigentümer oder Gruppe fest

Das Einrichten eines Nicht-Root-Benutzerkontos steht in keinem Zusammenhang mit dem MySQL-Root-Benutzer. Die MySQL-Installation in Linux/Unix-Systemen aus den Paketen tar und tar.gz ermöglicht es dem Server, von jedem unterprivilegierten Benutzer ausgeführt zu werden. Dies ist ein Sicherheitsnachteil, da jeder Benutzer mit der Berechtigungsoption FILE Dateien auf dem Server bearbeiten oder erstellen kann. Es gibt jedoch einen Fehler zurück, wenn ein Benutzer versucht, ohne die -user=root Error.

Sie können dies vermeiden, indem Sie die Faustregel praktizieren, als separater Linux-Benutzer auf den Datenbankserver zuzugreifen. Um mysqld als normaler Linux-Benutzer auszuführen, halten Sie den Server an und ändern Sie ihn Lese-/Schreibberechtigungen des MySQl-Servers zu mysql wie folgt:

chown -R mysql /path/to/mysql/datadir

Öffnen Sie die MySQL-Hauptkonfigurationsdatei, fügen Sie einen neuen mysql-Benutzer hinzu und starten Sie den Dienst neu, um unerwünschte Serverzugriffe zu vermeiden:

vim /etc/mysql/my.cnf
user=mysql
sudo-Dienst mysql neustarten

8. Legen Sie das Passwort für das Root-Konto fest

Die MySQL-Installation über eine interaktive Shell in Debian-basierten Linux-Distributionen erstellt das Root-Benutzerkonto und fordert Sie auf, ein Passwort festzulegen. Dies geschieht jedoch nicht bei nicht interaktiven Shell-Installationen und Red-Hat-basierten Distributionen. Wie oben erwähnt, kann ein Nicht-Root-Benutzer eines Linux-Rechners auf das mysql-Root-Benutzerkonto zugreifen, indem er die -user=root Möglichkeit. Sie können dies vermeiden, indem Sie das Passwort wie folgt festlegen:

sudo mysqladmin-Passwort
vim /etc/mysql/my.cnf
Passwort=
sudo-Dienst mysql neustarten

9. Stellen Sie die Datenverschlüsselung während der Übertragung und im Ruhezustand sicher

Die standardmäßig unverschlüsselte Kommunikation zwischen dem Client und dem Server birgt das Risiko, dass Daten von jedem Man-in-the-Middle abgefangen werden. Ebenso gefährden unverschlüsselte Benutzerdaten in der Datenbank die Vertraulichkeit und Integrität des Benutzers. MySQL unterstützt die Datenverschlüsselung zwischen dem Client und dem Server über das TLS/SSL-Protokoll, während eine unverschlüsselte Kommunikation nur akzeptabel ist, wenn sich beide kommunizierenden Parteien im selben Netzwerk befinden.

MySQL unterstützt jetzt die Verschlüsselung im Ruhezustand, um auf dem Server gespeicherte Daten zu schützen, selbst wenn das System verletzt wird.

Erweiterte MySQL-Sicherheit: Schützen Sie sich

Es ist von entscheidender Bedeutung, sicherzustellen, dass Sie das höchste Maß an Online-Sicherheit haben, und dieser Artikel wird Ihnen einige nützliche Hinweise in die richtige Richtung geben. Die obigen Schritte sind nützlich, um Ihren Datenbankserver zu sichern, aber es ist auch wichtig zu lernen, wie Sie Benutzern ohne Administratorrechte Mindestberechtigungen zuweisen.

Anfängerleitfaden zum Schreiben von mySQL-Datenbankschemas

Erstellen Sie Ihre eigene mySQL-Datenbank mit nur einem Texteditor und dieser grundlegenden Strukturskizze oder dem „Schema“.

Lesen Sie weiter

TeilenTwitternEmail
Verwandte Themen
  • Programmierung
  • Sicherheit
  • Programmierung
  • Sicherheitstipps
  • Sicherheit
Über den Autor
Rumaisa Niazi (15 veröffentlichte Artikel)

Rumaisa ist freiberufliche Autorin bei MUO. Sie hat viele Rollen getragen, von einer Mathematikerin bis hin zu einer Enthusiastin für Informationssicherheit, und arbeitet jetzt als SOC-Analystin. Ihre Interessen umfassen das Lesen und Schreiben über neue Technologien, Linux-Distributionen und alles rund um Informationssicherheit.

Mehr von Rumaisa Niazi

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um sich anzumelden