Ein kleiner Hintergrund: Wir haben gerade unser PBX-System gehackt. Der Server selbst scheint sicher zu sein (kein protokollierter nicht autorisierter Konsolenzugriff - SSH usw.), aber irgendwie haben die Hacker es geschafft, einen neuen Administrator in die PBX-Software (FreePBX, unterstützt von MySQL) einzufügen. Apache-Protokolle implizieren, dass es den Hackern gelungen ist, den Benutzer ohne Verwendung der Weboberfläche (oder eines Exploits in der Weboberfläche) hinzuzufügen.
Jetzt habe ich festgestellt, dass MySQL ohne Root-Passwort (!!) ausgeführt und offen an die externe IP-Adresse gebunden wurde (offensichtlich habe ich dies jetzt gesperrt). Der einzige Benutzer auf Stammebene in MySQL war 'root'@'localhost'
und 'root'@'127.0.0.1'
, auf den beide nur lokal zugänglich sein sollten.
Meine Frage lautet also:
Gibt es eine Möglichkeit, eine Verbindung zu MySQL zu fälschen, damit eine Verbindung zum Benutzer 'root' @ 'localhost' von einer Remote-IP-Adresse aus hergestellt werden kann, ohne dass ein anderer Exploit lokal ausgeführt wird?
Als Referenz ist die Box Centos 5 (Linux 2.6.10), auf dem MySQL 5.0.95 ausgeführt wird.
Antworten:
Nein.
MySQL wird Sie niemals bei einem Benutzer mit der
localhost
oder127.0.0.1
Host-Spezifikation anmelden, wenn Sie nicht vom lokalen System kommen. Beachten Sie, dass dies auch die Sicherheitsanfälligkeit zum Authentifizieren des Bypasses CVE 2012-2122 abdeckt. Der Kennwortvergleich könnte ausgetrickst werden, der Hostvergleich jedoch nicht.Sie benötigen etwas auf dem System, um einen Proxy zu erstellen, um die Überprüfung des Quellhosts zu "tricksen". So etwas wie phpmyadmin oder ein Load Balancer wie HAProxy, der vor dem MySQL TCP-Port ausgeführt wird, fällt mir ein.
quelle
Der Name
root
wird standardmäßig erstellt und ist sehr bekannt. Die Literalwertwurzel hat im MySQL-Berechtigungssystem keine Bedeutung. Daher ist es nicht erforderlich, mit dem Benutzernamen fortzufahrenroot
.Sie sollten den
root
Benutzernamen in einen anderen Namen ändern , damit die Außenwelt ihn nicht leicht identifizieren (erraten) kann. Dadurch werden Hacking-Versuche reduziert.Beispiel: Wenn Sie einen Benutzer als
root
@ haben,localhost
der allen bekannt ist, versuchen Hacker, ihn zu verbinden, sollten Sie ihn zur besseren Sicherheit in einen bestimmtenadmin_db_name
Wert wie @ ändernlocalhost
.Überwachen Sie eine Statusvariable, die
Aborted_connects
regelmäßig aufgerufen wird , um dieRefused
Verbindung zu Ihrem MySQL-Server zu ermitteln. Sie sollte nach demFlush status;
Befehl 0 sein und nicht weiter ansteigen.quelle
Beinhaltet "kein protokollierter nicht autorisierter Zugriff" Fehleranmeldungsversuche? Wenn nicht, könnte es CVE 2012-2122 sein .
quelle