Warum ist es schlecht, ein schwaches MySQL-Benutzerpasswort zu haben?


23

Ich erhielt ein Argument mit dem Titel "Sie benötigen kein starkes MySQL-Benutzerkennwort, da sie bereits Zugriff auf Ihren Server haben, um es zu verwenden." Es handelt sich um ein 4-stelliges Passwort, das ein Standardwörterbuch für Englisch auf einer Live-Business-Website ist.

Ohne die Antworten mit meinem eigenen Wissen und meiner eigenen Erfahrung zu beeinflussen, möchte ich ihnen einige Antworten von einer uninteressierten Drittanbieterquelle zeigen. Möchte jemand diesen Song mitmachen? Programmierung / praktische Antworten wären willkommen.


7
Klingt nach einem dieser root:rootLogins.

3
Vierstelliges Passwort? Wie 1337?
Gumbo

Antworten:


39

Wer auch immer dieses Argument vorbrachte, scheint zu sagen: "Sobald jemand seinen Fuß in der Tür hat, kannst du ihm genauso gut vollständigen Zugang gewähren." Nach dieser Logik macht eine Firewall alle Kennwörter in Ihrem internen Netzwerk überflüssig.

Sichere Kennwörter sind ein Schritt zur Begrenzung des Schadens, der durch das Eindringen in das Netzwerk entsteht. Es gibt keinen Grund, sich geschlagen zu geben, nur weil ein kleiner Teil Ihres Netzwerks kompromittiert wurde.


13
'Defense in Depth' lautet das Motto des Tages.
Scott Pack

3
Beachten Sie nur, dass sie, sobald sie Zugriff auf Ihr Dateisystem haben, Zugriff auf Ihre PHP-Datei oder Konfigurationsdatei haben, in der Ihr Kennwort ohnehin gespeichert ist, es sei denn, Sie haben eine zusätzliche Sicherheit dafür eingerichtet, die auf gemeinsam genutzten Hosts normalerweise schwierig oder unmöglich ist .
Lotus Notes

2
@Lotus Vorausgesetzt, der PHP- und der MySQL-Server sind auf demselben Rechner.
Meagar

2
@ Lotus Hinweise, Sie sollten den Root-Benutzer in keiner Anwendung verwenden. Eine gut gestaltete Anwendung ermöglicht nur den Zugriff, der erforderlich ist. In den meisten Fällen umfasst dies den Zugriff auf die Daten, jedoch nicht immer auf alle Daten. In einigen Fällen ist der Zugriff sogar schreibgeschützt.
Bradlis7

1
@ Lotus Notes: Viele gemeinsam genutzte Hosts verwenden suPHP, mit dem sich 660 sensible PHP-Dateien ändern lassen.
Webbiedave

14

Es geht wirklich auf die Idee von ' Defense in Depth ' zurück, so dass zumindest ein starkes Passwort sie verlangsamen kann, so dass Sie sie entdecken und blockieren können. Ich mag die Analogie, einen einzigen Schlüssel für eine Wohnanlage zu haben, und einen Schlüssel an der Tür eines jeden Hauses.


Ich habe darauf gewartet, dass jemand eine Schlüssel / Tür-Analogie findet: |
Meagar

Aber ein anderer Schlüssel für jede Tür in Ihrem Haus ist wahrscheinlich über Bord. Wo ziehst du die Linie?
Dan

4
@ Dan: Aber in einer sicheren Einrichtung würden Sie für jede Tür einen anderen Schlüssel erwarten, oder? Nein, in einem Einfamilienhaus wird erwartet, dass alle Schlösser denselben Schlüssel verwenden. Aber in einem Wohngemeinschaftshaus (wie bei Mitbewohnern) hängt es von der Haushaltsphilosophie ab: entweder unverschlossene Türen (möglicherweise Türen, die alle denselben Schlüssel verwenden) oder unterschiedliche Schlüssel pro Mitbewohner.
Wallyk

5
Schlösser und andere Sicherheitsvorrichtungen werden hauptsächlich für den Amateurdieb oder nur zur Abschreckung des Profis verwendet. Eine weitere Abschreckung ist die ausreichende Beleuchtung des Hauses und die Vermeidung regelmäßiger Routinen, die deutlich machen, wo und was Sie den ganzen Tag tun. Sprechen Sie niemals mit einem Fremden über Urlaubspläne und alarmieren Sie die örtliche Polizei, wenn Sie für einen längeren Zeitraum weg sind. Versuchen Sie immer, es so aussehen zu lassen, als wäre jemand zu Hause. Also, um ... zu warten, was war die Frage nochmal?
Stephen Watkins

6

Es hängt sehr davon ab, wie Ihr MySQL-Server eingerichtet ist. Wenn nur Anforderungen von der IP-Adresse home (127.0.0.1) akzeptiert werden, wird die Sicherheit moderat erhöht.

In einem gegebenen Szenario, in dem Sie Remote-IPs zulassen, wird dies ein viel größeres Geschäft.

Darüber hinaus ist es immer gut, im Falle eines Eindringens eine starke Sicherheit zu haben - besser, sie gehen so wenig wie möglich davon.


6

Gibt es eine Sperre für die Kasse in der Buchhaltung? Wenn ja warum? Hat das Gebäude keine physische Sicherheit?


5

Sie benötigen kein starkes MySQL-Benutzerkennwort, da diese Benutzer bereits Zugriff auf Ihren Server haben

Dies ist nicht der Fall, da mysql auch in einer netzwerkübergreifenden Client-Server-Umgebung verwendet werden kann. Standardmäßig ist nur user / pass erforderlich, um Zugriff auf die Datenbank zu erhalten (natürlich, wenn der Port 3306 geöffnet und der Server öffentlich sichtbar ist) ).


5

In der Tat kann es auch anders sein: Wenn sie Zugriff auf mysql haben, können sie möglicherweise auf das Server-Betriebssystem selbst zugreifen.

  1. Mit MySQL LOAD_FILE- und SELECT ... INTO OUTFILE-Abfragen können MySQL-Benutzer Dateien im zugrunde liegenden Dateisystem lesen und schreiben. Jede Datei, auf die auch der MySQL-Benutzer Zugriff hat (wird MySQL als Root ausgeführt?). Wenn Sie unter Linux / UNIX arbeiten, fragen Sie einfach SELECT LOAD_FILE ('/ etc / passwd') ab und sehen, wie sie grinsen. Wenn mysqld als root ausgeführt wird, können Sie SELECT LOAD_FILE ('/ etc / shadow') ausprobieren und Ihren Sysadmin-Schrei beobachten.
  2. Viele Male unter Linux hat der MySQL-Benutzer "root" das gleiche Passwort wie der "MySQL" -Benutzer des Servers (derjenige, der MySQL ausführt). Wenn dieses Kennwort trivial ist (oder von automatisierten Tools wie Medusa / Hydra gefunden werden kann), können Sie einfach SSH / Telnet direkt zum Datenbankserver senden und herumalbern.

4

Wenn jemand Root- Zugriff auf Ihren Server erhält, benötigt er kein MySQL-Passwort. Wenn sie jedoch Apps auf Ihrem Server nur als Nicht-Root- und Nicht-Web-Benutzer ausführen können, kann ein starkes MySQL-Kennwort Ihre Daten trotzdem speichern. Aber ja, die meisten Hacks kommen aus dem Web. Das bedeutet, dass der Hacker Zugriff auf Ihr Webkonto erhält und daher das DB-Passwort aus PHP-Dateien extrahieren kann.

Dies alles unter der Annahme, dass Ihr MySQL-Server nur Verbindungen von localhost akzeptiert. Wenn ja, brauchst du ein starkes PW.


4

Was hier offenbar übersehen wurde, ist, vertrauen Sie Ihren Benutzern im vertrauenswürdigen Netzwerk?

Ehrlich gesagt nicht, weil ich weiß, wie ich war, als ich in der IT anfing. Ich würde in Bereichen stöbern und stochern, auf die ich kein Recht hatte, und ehrlich gesagt, ein schwaches MySQL-Passwort wäre eine Freude für mich gewesen, da ich eine Chance auf Pech gehabt hätte und reingekommen wäre und Havock hätte anrichten können (aus Versehen, Na sicher).

Was ist, wenn jemand Social Engineering verwendet, um in Ihr vertrauenswürdiges Netzwerk zu gelangen? Was machst du dann? Wenn sie sich auf einem Computer hinter der Firewall befinden, ist Ihre solide Firewall-Sicherheit ruiniert und sie gelangen direkt auf den Computer.

Sichere Passwörter sind so einfach zu erstellen, und es gibt viele Tools zur Passwortverwaltung, mit denen sich die Passwörter einfach schützen lassen. Es gibt also keine Entschuldigung, dies nicht zu tun.


Die Sache ist, Sie sollten keine Remoteverbindungen in MySQL zulassen, oder, wenn Sie brauchen, localhost/ 127.0.0.1als Host angeben . Auf diese Weise kann niemand von außerhalb auf die Datenbanken zugreifen (auch nicht im selben Netzwerk).
Chazy Chaz

2

Eh. Wenn Ihr Server IP-gesperrt ist und Ihr Benutzer in einer Reihe von Tabellen, in denen Ihnen die Informationen egal sind, auf SELECT beschränkt ist, ist dies keine große Sache.

Andererseits setze ich meine MySQL-Passwörter, indem ich für eine Minute auf die Tastatur klopfe und den resultierenden Kauderwelsch in eine geschützte Datei kopiere, auf die ich in meinem Code verweise, wenn ich mich einloggen muss. So sollte es funktionieren.

Warum es einfach machen? Wenn das Kennwort an ein begrenztes lokales Konto angehängt ist (wie es alle sein sollten), warum geben Sie es dann ein? Ist dies nicht der Fall, sollte ein Kennwort vorhanden sein, dessen Stärke sich nach dem Wert der zu schützenden Daten richtet.


2

Die Konto- / Zugriffsinformationen von mySQL werden in einer von den tatsächlichen Datenbanken getrennten Datei gespeichert. So können Sie einfach eine andere Datei per Drag & Drop an ihren Platz ziehen. Mit mySQL ist das Spiel beendet, wenn sie Schreibzugriff auf den relevanten Teil Ihres Dateisystems haben.


2

Weil sich die Anforderungen ändern ...

Daher kann der Server, der heute nur MySQL-Verbindungen zum lokalen Computer akzeptiert, morgen geöffnet werden, damit ein externes Tool zum Verwalten der Datenbank verwendet werden kann. Die Person, die diese Einrichtung durchführt, weiß möglicherweise nicht, dass extrem schwache Kennwörter verwendet werden.

Wenn sich Ihr Benutzer ein gutes, sicheres (z. B. langes, zufälliges) Kennwort merken muss, sollten Sie es als sehr sicher einstufen und dann im .my.cnf- speichern, was noch praktischer ist als ein schwaches Kennwort, das er eingeben muss. Natürlich hat dies auch Auswirkungen auf die Sicherheit, aber Sie müssen Ihr Kennwort irgendwo speichern, z. B. in den Anwendungen, die darauf zugreifen, sodass Sie bereits Kopien des Kennworts sichern.

Lesen Sie aber auch, was @meagar gesagt hat.


1

Die Voraussetzung, dass sie bereits Zugriff haben würden, ist nicht wahr. Wenn sie jedoch Zugriff haben und über ein nicht privilegiertes Konto verfügen, können sie das mysql-Passwort trotzdem leicht hacken.

Wenn der Server ein Live-Produktionsserver ist, machen Sie Werbung für sich im Internet. das bedeutet , dass irgendwann jemand WILL einen Brute - Force - Angriff auf dem Server versuchen, einschließlich mysql, sowohl den Hafen und das Benutzerkonto.

Wenn Sie sich für die Daten interessieren, müssen Sie als grundlegende Schritte ein anderes Root-Passwort für die Datenbank als für den Root-Benutzer festlegen. Andere haben angegeben, dass Sie auch die niedrigstmöglichen Berechtigungen für Benutzer und Programme haben sollten.

Ein 4-stelliges Passwort kann auf einem ziemlich billigen Computer in wenigen Minuten gehackt werden.

Ich kann nur wiederholen, was andere gesagt haben, aber je mehr Munition Sie für Ihren Manager haben, desto besser.


1

Viele der Gründe für das reale Szenario wurden zuvor in Beiträgen behandelt, daher füge ich die "Philosophie" hinzu. Das Verwenden sicherer Kennwörter und das Ergreifen von Vorsichtsmaßnahmen, um die Sicherheit zu erhöhen, ist eine Arbeitsphilosophie. Eine Denkweise.

Ein schwaches Passwort jetzt , weil Sie mysql nur auf 127.0.0.1 laufen und nur der Root - Benutzer hat Zugriff auf es zeigt , dass Sie nicht im Voraus denken. Was passiert, wenn Sie eines Tages über das Netzwerk Zugriff auf Ihr MySQL gewähren müssen? Denken Sie daran, alle Sicherheitslücken abzudecken, die Sie verlassen haben?

Ein guter Administrator bringt das schlimmste Szenario auf den Punkt der Paranoia.


1

Es hängt davon ab, welche Rechte der Benutzer hat. Sie sollten Dinge immer auf mehreren Ebenen sperren. Dies hängt auch von den Daten ab, die Sie in Ihrer Datenbank gespeichert haben. Nehmen wir auch an, es gibt eine Sicherheitslücke in MySQL, die es ihnen ermöglicht, die gesamte Datenbank zu übernehmen, sie mussten sich jedoch nur bei einem beliebigen Benutzerkonto anmelden. Wenn Ihr Kennwort sicher ist, wird diese Sicherheitsanfälligkeit stumm geschaltet. Aber das hängt wirklich nur von Ihrem speziellen Fall ab.


Wenn der MySQL-Server kompromittiert ist, sind der Benutzer und das Kennwort unbrauchbar. Die Datenbankdateien werden nicht verschlüsselt. MySQL-Benutzer für Apps sollten localhost / 127.0.0.1 als Host haben, damit sie nicht remote verwendet oder Remoteverbindungen deaktiviert werden können.
Chazy Chaz

1

Es ist sehr einfach, sich in MySQL als jemand anderes auszugeben. Bei einer Benutzer-ID ohne Passwort (die schwächste Sicherheit) einfach verwenden mysql -u userid. Wenn es ein Passwort hat, ist es etwas schwieriger, aber ein schwaches Passwort macht es einfach. Wenn root kein Passwort hat, kann ich als root zugreifen mysql -u root. Ich kann dann alles in der Datenbank machen, was root kann.

Die Verwendung von Hostspezifikationen in der Sicherheit ist ebenfalls eine gute Idee, insbesondere wenn Remotezugriff verfügbar ist oder möglicherweise verfügbar ist.

Passwörter in Dateien können und sollten durch Berechtigungen etwas gesichert sein. Der Zugriff durch root oder den Eigentümer der Passwortdatei ist trivial. Wenn möglich, sollte das Kennwort auf der Festplatte verschlüsselt werden. Dies macht den Zugang etwas schwieriger, aber dennoch anfällig.


0

Wenn Sie die MySQL-Datenbank nicht selbst hosten, sondern sich auf einem Hosting-Dienst befinden und jemand Zugriff auf die IP-Adresse Ihres Servers erhält, sind Benutzername und Passwort Ihre letzte Verteidigungslinie. Es ist immer gut, einen sicheren Benutzernamen / ein sicheres Passwort zu haben.


Meh! Wenn jemand Zugriff auf den Server erhält, kann er den Benutzer / das Passwort aus den PHP-Dateien lesen ... Bitte aktualisieren oder löschen Sie diese Antwort.
Chazy Chaz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.