Laden...

Packet Sniffer zeigt meine DB-Anfragen an

Erstellt von Jack_AI vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.102 Views
J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren
Packet Sniffer zeigt meine DB-Anfragen an

Hallo.

Ich habe gerade einen Packet Sniffer (Ethereal) ausprobiert, um herauszufinden, was mein Programm so alles unverschlüsselt beim Verbinden mit einer MySQL-Datenbank überträgt. Und ich muss zugeben, das hat mich doch sehr überrascht! Der Packet Sniffer hat mir anzeigen können, mit welcher Datenbank ich mich verbinde, über welchen Port und mit welchem Benutzernamen. Sogar die vollständigen Querys hat er mir zeigen können! Zum Glück aber nicht das Passwort, mit dem ich mich verbinde. Warum eigentlich nicht?

Aber da ist noch ein Problem. Wenn mein Programm sich verbindet, soll der Benutzer ein Passwort eingeben, anschließend wird das eingegebene Passwort mit einem String in der Datenbank überprüft. Jetzt sendet er aber das Passwort aus der DB als klar lesbaren String zurück. Klar, das kann man mit MD5 verschlüsselt in der DB abspeichern. Da ich aber weiß, dass es Tabellen gibt, mit denen man von einem MD5-String auf den Originalstring schließen kann, bereitet mir das doch Sorgen.

C
1.214 Beiträge seit 2006
vor 16 Jahren

Naja, wenn das Passwort lang/kompliziert genug ist, nutzen die Rainbow tables nichts. Und du kannst die Passwörter mit einem Salt speichern.

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Leider ist hier die Ressonanz nicht so groß, wie ich es mir eigentlich gewünscht hätte. Ich muss auch sagen, dass ich noch ein Laie auf dem Gebiet bin, und ein Einstieg in so ein Thema ist immer schwer.

Worum es mir eigentlich ging, ist dass ist nicht will, dass Datenbank-Querys im Klartext übertragen werden. Inzwischen bin ich auf das Thema SSL-Verschlüsselung gestoßen, das genau hier helfen soll. Erst hier habe ich bemerkt, wie komplex das Thema eigentlich ist. Und dass meine Feststellung geradezu trivial ist. Darum kann ich auch verstehen, wenn sich die Experten hier von meiner Frage gelangweilt fühlen. 😉

Was ich inzwischen suche, ist eine Möglichkeit, MySQL-Datenbank-Querys (edit: ) KOSTENLOS zu verschlüsseln. Gleichzeitig habe ich aber KEINE Installations-Rechte auf dem Webserver, wo die Datenbank liegt! Ist dann eine Verschlüsselung überhaupt möglich?

edit4: Ich geb's langsam auf. Ich finde überhaupt keine anfängergerechten Artikel zur Verschlüsselung zu einer Datenbank. Ich habe festgestellt, dass mein Webspace-Anbieter OpenSSL aktiviert hat. Hilft mir allerdings rein gar nichts, wenn ich nicht weiß, was man damit machen kann. FuNfAcT: Hier im Forum gibt es mindestens 3 Threads zum Thema OpenSSL, die bis auf den ersten Beitrag keine Antworten enthalten. Gibt mir zu denken...

363 Beiträge seit 2007
vor 16 Jahren

Hi, der letzte Satz in deinem Post hat mich auf die Idee gebracht. Mit SSL verschlüsselst du ja die komplette Verbindung, sämtlicher Verkehr der hinterher erzeugt wird ist dann somit verschlüsselt.
Der Ansatz ist als, anstatt jede Anfrage einzeln gleich die komplette Verbindung abzusichern.
Wobei ich da eh zu bedenken gebe das es nie gut ist wenn die DB direkt aus dem Netz heraus ansprechbar ist. Wenn das möglich ist würde ich da noch nen Programm dazwischen hängen, welches die Kommunikation übernimmt und die Anfragen an die DB weiterleitet.

Gruß Cookiie

"Hail to the King, Baby!"

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Original von Cookiie
Wobei ich da eh zu bedenken gebe das es nie gut ist wenn die DB direkt aus dem Netz heraus ansprechbar ist. Wenn das möglich ist würde ich da noch nen Programm dazwischen hängen, welches die Kommunikation übernimmt und die Anfragen an die DB weiterleitet.

Hallo Cookiie,

das hat mich widerum auch auf eine Idee gebracht. Ich könnte theoretisch die Datenbank-Anfragen von meinem Programm verschlüsseln lassen, an ein PHP-Skript schicken, und die widerum von dem PHP-Skript auf meinem Websprace entschlüsseln lassen. Das Skript übernimmt die Datenbank-Abfrage und sendet das Ergebnis widerum verschlüsselt an das Programm zurück (bzw. mein Programm liest das Ergebnis von meinem Webspace aus).

Also so:
Programm sendet DB-Anfrage (verschlüsselt) an PHP-Skript
PHP-Skript sendet DB-Anfrage (unverschlüsselt) an Datenbank
Datenbank sendet DB-Ergebnis (unverschlüsselt) an PHP-Skript
PHP-Skript übergibt DB-Ergebnis (verschlüsselt) an öffentlichen Webspace
Programm holt das DB-Ergebnis (verschlüsselt) vom Webspace
Programm entschlüsselt das DB-Ergebnis

Ich bezweifle zwar, dass die Lösung sicher ist, allerdings entspricht das noch am ehesten meinen Fähigkeiten. Jetzt müssten das PHP-Skript und mein Programm nur auf die selbe Art ver- und entschlüsseln können. Der ganze Programmier-Aufwandt... Ay caramba.

L
770 Beiträge seit 2006
vor 16 Jahren

Also so:
Programm sendet DB-Anfrage (verschlüsselt) an PHP-Skript
PHP-Skript sendet DB-Anfrage (unverschlüsselt) an Datenbank
Datenbank sendet DB-Ergebnis (unverschlüsselt) an PHP-Skript
PHP-Skript übergibt DB-Ergebnis (verschlüsselt) an öffentlichen Webspace
Programm holt das DB-Ergebnis (verschlüsselt) vom Webspace
Programm entschlüsselt das DB-Ergebnis

Warum überspringst du nicht:

PHP-Skript übergibt DB-Ergebnis (verschlüsselt) an öffentlichen Webspace
Programm holt das DB-Ergebnis (verschlüsselt) vom Webspace

und liesst das verschlüsstel DB Verzeichniss dirket aus ?

lg

lg Lion

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Warum überspringst du nicht:

PHP-Skript übergibt DB-Ergebnis (verschlüsselt) an öffentlichen Webspace
Programm holt das DB-Ergebnis (verschlüsselt) vom Webspace
und liesst das verschlüsstel DB Verzeichniss dirket aus ?

lg

Hallo lg,

da habe ich mir wohl nicht genau ausgedrückt. Ich meinte, dass das PHP-Skript direkt hintereinander die Anfrage sendet, das Ergebnis verschlüsselt und ausgibt. Also, mit öffentlichem Webspace meinte ich die PHP-Ausgabe (dann in HTML-Form), die anschließend vom Programm ausgelesen wird. Gibt es ansonsten etwas an der Idee auszusetzen?

Jack

edit:
Mir ist doch ein Problem dabei aufgefallen: Wenn ich in kurzer Zeit zwei Datenbank-Anfragen verarbeiten muss, kommt das PHP-Skript wahrscheinlich nicht hinterher und gibt mir entweder eine veraltete Anfrage aus oder bricht eine Anfrage zuvor ab. Hach, ist das alles kompliziert! Ich gebe die Hoffnung nicht auf, dass hier vielleicht doch jemand etwas Ahnung davon hat, wie man OpenSSL bedient.

Jack²

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Für alle, die es interessiert:

Ich habe mich seit meinem letzten Post hier intensiv mit OpenSSL beschäftigt. Bis jetzt habe ich nicht herausfinden können, ob OpenSSL überhaupt mit C# kompatibel ist (ich fürchte aber nein), geschweige denn, wie man es in eine eigene Anwendung integriert. OpenSSL ist, meiner Meinung nach, alles andere als anfängerfreundlich und ebenso wenig gut dokumentiert. Ich könnte mich noch Stunden damit beschäftigen... würde dann aber wahrscheinlich noch immer nicht wissen, ob es überhaupt für mein Programm geeignet ist.

Fazit: Anfänger, Finger weg von OpenSSL!

Folglich bin ich nun auf der Suche nach einer anderen, anfängergerechten Möglichkeit, meine Datenbank-Anfragen zu verschlüsseln. Für Hinweise wäre ich sehr verbunden! (edit: Ich habe auch ein Buch zu dem Thema überflogen, Network Security with OpenSSL, dort steht, eine eigene Verschlüsselung ist NICHT zu empfehlen, da selbst Kryptographie-Experten Schlupflöcher in ihrem Sourcecode übersehen)

Danke,
Jack

C
11 Beiträge seit 2007
vor 16 Jahren

@Jack_AI

Wie wäre es mit einem Webservice? Ich würde die ganzen Abfragen etc.. erst garnicht in die GUI reinpacken sondern im Webservice implementieren. So könnte man auch weiterhin die mächtigen werkzeuge wie DataSet etc.. nutzen.
*GUI ruft WebMethod holeKunde(int) auf *WebService sendet query an DB *Result wird dann entweder in ein DataSet/DataTable gepackt oder du implementierst eine Klasse Kunde mit den jeweiligen Attributen *Dann haste das DataSet bzw. Objekt gleich in der GUI als Rückgabewert der WebMethod holeKunde(int)

So müsstest du auch keine Datenbank-Abfragen oder Mysql-Passwörter übers Netz schicken und die MD5 verschlüsselung reicht vollkommen aus um Benutzerpasswörter zu übertragen. So würde auch der Fehler beim Benutzer liegen wenn er ein zu einfaches Passwort nimmt.

Nachteil:
Du müsstest zwei Anwendungen gleichzeitig entwickeln und auf jeder Seite auch wieder die Eingabeüberprüfung machen etc..

Vorteil:
Deine Anwendung ist GUI unabhänging, so hast du in Zukunft die Möglichkeit deine GUI bspw. in Java zu entwickeln oder die Anwendung auf ein anderes System (zb. Smartphone) zu portieren.

Mfg

Z
43 Beiträge seit 2007
vor 16 Jahren

Könnte man diesen Vorgang auch mit C# und PHP gut realisieren?

Ich habe mal versucht, einen String mit C# und AES-256 zu verschlüsseln und dann an PHP zu schicken (Formular) und PHP entschlüsselt es und macht es in eine Datenbank. Das ganze hat nur leider nicht geklappt, weil beide Sprachen anders ver-/entschlüsselt haben.

Hat vllt einer ein Beispiel, wie C# einen String verschlüsselt und PHP es dann entschlüsselt?

Zen

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Ich muss die Problematik leider noch einmal hervorkramen. Erst einmal noch eine seit Langem ausstehende Antwort:

Original von cemizm
Wie wäre es mit einem Webservice? Ich würde die ganzen Abfragen etc.. erst garnicht in die GUI reinpacken sondern im Webservice implementieren. So könnte man auch weiterhin die mächtigen werkzeuge wie DataSet etc.. nutzen.

Hallo cemizm,
Danke für den Tipp. Leider ist liegt die von dir vorgeschlagene Lösung weit über meinen Programmierfertigkeiten. Mir wäre eine "anfängergerechte" Lösung vorerst lieber.

Und noch einmal zum Hauptthema:
Angenommen ich habe eine Datei mit hartgecodeten Verbindungsdaten, um auf einen Server zugreifen zu können. Muss ich dann befürchten, dass diese Daten aus dem MSIL-Code herausgelesen werden können? Ich habe selber noch nie eine Datei auf diese Art "re-engineert", aber angeblich soll das ja ziemlich einfach sein... wenn man weiß, wie es geht.

Jack

F
10.010 Beiträge seit 2004
vor 16 Jahren

Ja, und dieses Thema haben wir in diesem Forum schon bis zum erbrechen behandelt.

Deshalb hat ist das auch schon bis in die FAQ vorgedrungen :
[FAQ] DB-Passwort/Connection-String sicher speichern

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Original von FZelle
Ja, und dieses Thema haben wir in diesem Forum schon bis zum erbrechen behandelt.

Deshalb hat ist das auch schon bis in die FAQ vorgedrungen :

>

Ich bin zuvor schon einmal auf die Links gestoßen, habe sie aber damals nicht in Zusammenhang mit MSIL-Reengineering gebracht. Auf die FAQ hättest Du auch netter hinweisen können.

Jack