Ungesichertes MySQL-Konto 'root' @ 'localhost', auf das remote zugegriffen wird?

8

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.

TFk
quelle
Wäre besser für ServerFault geeignet - offtopic hier.
Kapa
Ich war mir nicht sicher - mein persönliches Gefühl war, dass es weniger um Serverkonfigurations- / Administrationsprobleme als vielmehr um den Versuch geht, einen potenziellen Fehler in MySQL auszunutzen, der hier besser passt. Entschuldigung, wenn die Leute denken, dass ich dafür auf der falschen Seite / im falschen Abschnitt bin.
TFk
2
Eigentlich gehört es wahrscheinlich in security.stackexchange.com
1
Sie sagen, "der einzige Benutzer auf Stammebene war root @ localhost". Gab es jedoch andere Benutzer? Sie benötigen keinen Root-Benutzer, um einen Datensatz hinzuzufügen. Außerdem sollten Sie in FreePBX nach Schwachstellen wie dieser suchen .
Marcus Adams
Der Exploit in Ihrem Link wurde in meiner FreePBX-Version gepatcht, aber ja, ich stimme zu, dass FreePBX-Schwachstellen der wahrscheinlichste Einstiegspunkt sind, außer dass ich in meinen Apache-Zugriffsprotokollen nichts finden kann, was mit einer der (nicht gepatchten) bekannten Schwachstellen übereinstimmt . Guter Punkt für andere Benutzer - der einzige andere Benutzer in der Datenbank war ein Sternchen mit einem (nicht standardmäßigen) Kennwort. Wenn dies der Einstiegspunkt war, weist dies erneut auf eine (möglicherweise unveröffentlichte) FreePBX-Sicherheitsanfälligkeit hin. Das "no root password" schien im Vergleich zu einem neuen undokumentierten FreePBX-Exploit eine so große Lücke zu sein. Daher meine Frage / Post.
TFk

Antworten:

1

Nein.

MySQL wird Sie niemals bei einem Benutzer mit der localhostoder 127.0.0.1Host-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.

Shane Madden
quelle
Das habe ich vermutet, was bedeutet, dass ein leeres Root-Passwort so schlecht ist, dass es wahrscheinlich nicht der Exploit war. Immer gut, um informierte Meinungen zu bekommen - Vielen Dank.
TFk
2

Der Name rootwird standardmäßig erstellt und ist sehr bekannt. Die Literalwertwurzel hat im MySQL-Berechtigungssystem keine Bedeutung. Daher ist es nicht erforderlich, mit dem Benutzernamen fortzufahren root.

Sie sollten den rootBenutzernamen 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, localhostder allen bekannt ist, versuchen Hacker, ihn zu verbinden, sollten Sie ihn zur besseren Sicherheit in einen bestimmten admin_db_nameWert wie @ ändern localhost.

Überwachen Sie eine Statusvariable, die Aborted_connectsregelmäßig aufgerufen wird , um die RefusedVerbindung zu Ihrem MySQL-Server zu ermitteln. Sie sollte nach dem Flush status;Befehl 0 sein und nicht weiter ansteigen.

Status wie 'Aborted_connects' anzeigen;

Mahesh Patil
quelle
2

Beinhaltet "kein protokollierter nicht autorisierter Zugriff" Fehleranmeldungsversuche? Wenn nicht, könnte es CVE 2012-2122 sein .

[...] Wenn MySQL in bestimmten Umgebungen mit bestimmten Implementierungen der memcmp-Funktion ausgeführt wird, können Angreifer die Authentifizierung umgehen, indem sie sich wiederholt mit demselben falschen Kennwort authentifizieren. Dies führt schließlich dazu, dass ein Token-Vergleich aufgrund einer nicht ordnungsgemäß überprüften Prüfung erfolgreich ist Rückgabewert.

Samuirai
quelle
Mein "kein protokollierter nicht autorisierter Zugriff" war absolut mehrdeutig - ich meinte, dass es keinem Angreifer gelungen war, Konsolenzugriff auf den Server zu erhalten (z. B. über SSH). Es scheint auch, dass Centos-Builds nicht betroffen sind (< community.rapid7.com/community/metasploit/blog/2012/06/11/… ), aber sicherlich die Art von Dingen, nach denen ich gesucht habe.
TFk