Insbesondere Einsteiger-Penetrationstester legen weniger Wert auf die Datenbanksicherheit im Allgemeinen. Eine Anwendung ohne Datenbankkonfiguration und Sicherheitstests kann nicht sicher sein. Möglicherweise verwenden Sie bereits MySQL-Software, ein Datenbankverwaltungssystem. Wie können Sie es also sicherer machen? Hier sind sieben Schritte, die Sie befolgen müssen.
1. Verwenden Sie SSH-Tunneling anstelle von Remote Connection
Der MySQL-Dienst läuft standardmäßig auf Port 3306. Wenn Sie MySQL installieren, werden Sie sehen, dass sich Port 3306 für alle Verbindungen im Abhörmodus befindet. So wie es aussieht, ist der MySQL-Port für die Außenwelt offen. Aus diesem Grund sollten Sie den MySQL-Dienst so einstellen, dass er nur auf die lokale Adresse lauscht.
Da Server normalerweise auf einer Linux-Distribution betrieben werden, basieren die folgenden Beispiele auf einer Debian-Distribution. Die Datei, die Sie für das SSH-Tunneling anstelle der Remote-Verbindung verwenden und den Standardport zur Außenwelt schließen müssen, ist
/etc/mysql/my.cnf. In dieser Datei müssen Sie ein Feld namens öffnen [mysqld] und schreibe folgenden Befehl:[mysqld]
binden-Adresse=127.0.0.1
Vergessen Sie nach diesem Vorgang nicht, diese Datei zu speichern und den Dienst mit dem folgenden Befehl neu zu starten:
sudo systemctl startet mysqld neu
# oder
sudosystemctlNeustartMariadb.Service
Damit hört der MySQL-Dienst nur auf die lokale Adresse.
Wenn Sie MariaDB verwenden, können Sie dies auch überprüfen /etc/mysql/mariadb.conf.d/50-server.cnf und prüfen Sie, ob es eine Definition für gibt Bind-Adresse.
Nun, da Sie die Bindungsadresse auf eingestellt haben 127.0.0.1, das ist localhost, können Sie einen Nmap-Scan ausführen und die Ausgabe überprüfen:
Sie können den MySQL-Port sehen, da 127.0.0.1 den angezeigten lokalen Host darstellt. Sie können versuchen, die Bindungsadresse erneut zu ändern, um sicherzustellen, dass dies funktioniert:
[mysqld]
binden-Adresse=127.5.5.1
Speichern Sie dann die /etc/mysql/my.cnf Datei und starten Sie den MySQL-Dienst neu. Wenn Sie einen Nmap-Scan durchführen Auch in diesem Stadium sollten Sie diese Bindungsadresse nicht auf localhost sehen.
Sobald Sie wissen, dass dies funktioniert, gehen Sie zurück zu den Einstellungen aus dem ersten Schritt und setzen Sie die Bindungsadresse wieder auf 127.0.0.1 und speichern Sie erneut.
2. Richten Sie eine Barriere für den lokalen Dateizugriff ein
MySQL kann mit dem lokalen Dateisystem kommunizieren. Mit Abfragen können Sie den Inhalt eines Textes im lokalen Dateisystem sehen oder das Abfrageergebnis auf eine Festplatte brennen. Um zu verhindern, dass böswillige Angreifer diese Funktion verwenden, müssen Sie verhindern, dass MySQL mit dem lokalen Dateisystem kommuniziert.
Sie können eine Funktion namens local-infile verwenden, um Vorkehrungen zu treffen. Stellen Sie sich zum Beispiel vor, Sie haben eine Datei mit dem Namen "/etc/secretfile.txt" und Sie haben ein Passwort in dieser Datei. Wenn der Wert der local-infile-Funktion in Ihrer /etc/mysql/my.cnf-Datei 1 ist, dann ist der Zugriff offen. So können Sie auf die Datei secretfile.txt zugreifen.
Der Wert der local-infile-Funktion ist 1. Starten Sie die MySQL-Datenbank neu, damit die Änderungen wirksam werden. Verbinden Sie sich nun mit dem folgenden Befehl mit MySQL und prüfen Sie, ob Sie die Datei secretfile.txt sehen können:
WÄHLENLADE DATEI("/etc/secretfile.txt");
Es ist nicht schwierig, die Informationen in einer beliebigen Datei auf Ihrem Computer zu erfassen.
Um dieses Problem zu lösen, ändern Sie den local-infile-Wert in Ihrer /etc/mysql/my.cnf-Datei wie folgt:
[mysqld]
lokal-infile=0
Starten Sie den MySQL-Dienst neu. Verbinden Sie sich erneut mit MySQL und wiederholen Sie den vorherigen Schritt; Sie sollten den Dateiinhalt nicht mehr sehen können.
Wenn Benutzer nicht bereits über Lese- und Schreibberechtigungen für lokale Dateien verfügen, können sie diese Datei nicht sehen. Es ist jedoch immer noch etwas, das Sie bei Penetrationstests und Datenbanksicherheit überprüfen sollten.
3. Legen Sie Anwendungsbenutzer und Passwörter fest
Der Datenbankverwaltungsbenutzer und der MySQL-Benutzer, der auf die Datenbank zugreift, müssen sich voneinander unterscheiden. Mit anderen Worten, das Verbinden von Anwendungen mit MySQL mit Root-Benutzern ist äußerst gefährlich. Definieren Sie nach Möglichkeit die Benutzer von Anwendungen, die keine Leistung erbringen UPDATE- oder INSERT-Operationen separat.
Eine weitere Sache, die Sie an dieser Stelle berücksichtigen sollten, sind Benutzerkennwörter. Wie in fast allen Bereichen müssen Passwörter für MySQL-Benutzer komplex und unvorhersehbar sein. Wenn Sie dabei Hilfe benötigen, gibt es großartige Passwortgeneratorsysteme, die Sie verwenden können.
4. Anonyme Benutzer löschen
Wenn Sie MySQL standardmäßig installieren, treten einige anonyme Benutzer auf. Diese müssen Sie löschen und deren Zugriff sperren. Bei einem sicheren MySQL-Server sollten Sie auf die folgende Abfrage keine Antwort erhalten:
WÄHLEN * AUS mysql.user WOBENUTZER="";
# Beispielausgabe
Leer Satz (0,001 Sek.)
Wenn es Ergebnisse gibt, sollten Sie diese anonymen Benutzer löschen. Wenn es beispielsweise ein anonymes Konto mit dem Namen „anonuser“ in einer Umgebung mit dem Namen „localhost“ gäbe, müssten Sie einen Befehl wie den folgenden verwenden, um dieses Konto zu löschen:
BENUTZER LÖSCHEN 'ein anderer Benutzer'@'lokaler Host';
5. Überprüfen Sie die lokalen MySQL-Dateiberechtigungen
Stellen Sie sich vor, Sie sind Datenbankadministrator und möchten zu den Daten von vor einer Woche zurückkehren. In diesem Fall müssen Sie sich möglicherweise per SSH mit dem Datenbankserver verbinden und die gewünschten MySQL-Dateien ändern. Dabei haben Sie möglicherweise die Root-Benutzerrechte von Linux verwendet; Das heißt, der Besitz und die Berechtigungen der Datendateien können sich ändern. Das willst du nicht.
Sehen Sie sich das Verzeichnis /var/lib/mysql an, um die erteilten Berechtigungen zu überprüfen. Was Sie hier überprüfen müssen, ist, ob der Eigentümer aller Dateien der MySQL-Benutzer ist. Der folgende Befehl wird den Trick machen:
sudo ls -al /Var/lib/mysql
Die Lese- und Schreibrechte der Dateien sollten nur für den MySQL-Benutzer gelten. Andere Benutzer sollten keine Berechtigungen haben.
6. Verwenden Sie MySQL-SSL
Ein konkretes Beispiel ist der beste Weg, um die Verwendung von MySQL und SSL zu verstehen. Stellen Sie sich vor, dass einer der Server in der ABC-Region, wo es viele verschiedene Server gibt, von böswilligen Hackern übernommen wird. Hacker führen einen internen Scan in der ABC-Region durch. Auf diese Weise sammeln sie Informationen über die Server.
Wenn sie während dieses Vorgangs einen MySQL-Server entdecken, können sie a Man-in-the-Middle (MitM)-Angriff auf den Zielserver, was bedeutet, dass sie die Sitzungsinformationen von Anwendungen und Benutzern stehlen können, die sich mit diesem Server verbinden. Eine der besten Möglichkeiten, dies zu vermeiden, ist Aktivieren Sie SSL auf dem MySQL-Server.
7. Protokoll- und Verlaufsdateien
Sie verwenden MySQL-Protokolle, um Fehler zu analysieren und zu finden. Sie können bearbeiten, wo diese Protokolle gespeichert werden, indem Sie my.cnf wie folgt eingeben:
# /etc/mysql/my.cnf
[mysqld]
Protokoll =/var/Protokoll/mylogfiles
Sie können den Namen oder Speicherort von mylogfiles nach Belieben ändern. Es gibt eine weitere Datei, die Sie überprüfen müssen. Wenn Sie sich in einem Linux-Terminal mit dem MySQL-Server verbinden und verschiedene Befehle eingeben, werden diese Abfragen in der Datei mysql_history gespeichert. Wenn Sie den folgenden Befehl ausführen, können Sie die Abfragen sehen, die Sie im MySQL-Terminal verwenden:
Katze ~/.mysql_history
Sie müssen den Inhalt dieser Datei löschen, wenn Sie keine Informationen darüber geben möchten, welche Art von Abfragen Sie innerhalb des Servers durchführen. Verwenden Sie den folgenden Befehl, um den Inhalt der Datei zu löschen:
sudo-Echo "gereinigt"> ~/.mysql_history
Anschließend können Sie den Dateiinhalt erneut überprüfen.
Wem die Datenbank gehört, dem gehört auch das System
Egal in welcher Branche Sie tätig sind, Ihre Datenbank enthält immer wichtige Informationen. Dies können Ihre Kunden, Bankkonten und Passwörter sein. Böswillige Angreifer wissen um deren Bedeutung und Wert. Datenbankentwickler und -administratoren müssen zumindest die Grundlagen kennen, auf die sie bei Penetrationstests stoßen, um die Hacker zu schlagen.