Forum: Mikrocontroller und Digitale Elektronik AVR MySQL MyEhternet


von Horst S. (h3aau)


Lesenswert?

moin moin,
ich betreibe einige MyEthernet's als Datensammler. Firmware ist OpenMCP.
Diese senden die Daten an einen MySQL-Server.
Login ohne Password geht.
Ich möchte aber einen Password "Schutz" haben.
Aus Platzmangel geht nur die Old_Password Version.
Ich verwende KEIN PHP.
Der Connectstring ohne Password ist:
SQLLen,0,0,1,0x85,0xa6,11,0,0,0,0,0x40,8,23*0x00,user,0,mysql_native_pas 
sword,0.

Der Connectstring mit Password ist:
SQLLen,0,0,1,0x85,0xa6,11,0,0,0,0,0x40,8,23*0x00,08,1,2,3,4,5,6,7,8,user 
,0,mysql_native_password,0.

Das geht noch nicht.
Leider kann ich das nicht auf dem Netzwerk debugen.

Muss im MySQL(Version 5) Config noch irgendwas eingestellt werden?

Danke.

von Axel S. (a-za-z0-9)


Lesenswert?

Horst S. schrieb:

> ich betreibe einige MyEthernet's als Datensammler. Firmware ist OpenMCP.
> Diese senden die Daten an einen MySQL-Server.
> Login ohne Password geht.
> Ich möchte aber einen Password "Schutz" haben.
> Aus Platzmangel geht nur die Old_Password Version.

So wahnsinning viel Schutz ist das nicht. Schließlich wurde das 
Verfahren ja wegen seiner Unsicherheit ausgemustert.

> Der Connectstring mit Password ist:
> SQLLen,0,0,1,0x85,0xa6,11,0,0,0,0,0x40,8,23*0x00,08,1,2,3,4,5,6,7,8,user 
,0,mysql_native_password,0.

Nein. Das Login Paket ist nicht statisch. Der Server sendet mit dem 
Hello Paket eine Challenge (Zufallszahlen). Die muß der Client mit dem 
Paßwort verhashen und das Ergebnis zurückschicken.

> Das geht noch nicht.
> Leider kann ich das nicht auf dem Netzwerk debugen.

Wireshark kann diesen Teil des MySQL-Protokolls ganz gut.

> Muss im MySQL(Version 5) Config noch irgendwas eingestellt werden?

Welche 5er? Ab 5.1 kann MySQL das alte Paßwort-Hashing nicht mehr. Bis 
5.0 reichte es, das Paßwort in mysql.user mit der alten Hashing-Methode 
einzutragen. Wenn man User mit CREATE USER anlegt, entscheidet eine 
Servervariable (old_passwords ?) darüber, ob der neue oder alte Hash 
gebildet wird.

Bedauerlicherweise enthält das MySQL Internals Manual:

http://dev.mysql.com/doc/internals/en/authentication-method.html

keine Details mehr zum alten Auth-Verfahren. Aber wenn du einen 
hinreichend alten MySQL-Quellcode hast, findest du alles in 
.../sql/password.c


XL

von Horst S. (h3aau)


Lesenswert?

Danke für die Info Axel.
Ich wusste nicht das der Random-Code auf bei der old_password Funktion 
schon mit drinn ist. Das bekomme ich aus Platzmangel nicht mehr in den 
644p rein.
Schade.

von Horst S. (h3aau)


Lesenswert?

Oder vielleicht doch......
Wie frage ich den Random-code beim Server ab?

von Axel S. (a-za-z0-9)


Lesenswert?

Horst S. schrieb:
> Oder vielleicht doch......
> Wie frage ich den Random-code beim Server ab?

Den kriegst du frei Haus. Wenn der Client die TCP-Verbindung öffnet, 
sendet der Server das Hello Paket, das u.a. die Serverversion, eine 
Bitmap mit den Fähigkeiten des Servers und eben die Challenge (64 Bit) 
für das Auth Protokoll enthält.

Den Link zum Internals Manual habe ich dir schon gegeben. Da ist das 
Protokoll Bit für Bit erklärt.


XL

von Horst S. (h3aau)


Lesenswert?

Nochmals danke.
 Leider Habe ich in der Doku auf anhieb keinen genauen aufbau des 
Paketes gefunden. Hast du den Parat?

Ich habe noch c.a. 380 Bytes Platz im Flash des AVR's. Das wird arg eng 
werden.

von Axel S. (a-za-z0-9)


Angehängte Dateien:

Lesenswert?

Ach Horst,

machst du auch mal was selber? Aber was solls, hat mich selber ja auch 
interessiert. Also habe ich ein 4.0.30 aufgesetzt, einen Testuser 
angelegt und das login mit Wireshark mitgeschnitten. Und dann testhalber 
probiert, ob ich mit der mitgesnifften Challenge und dem bekannten 
Paßwort selber auch auf das (mitgesniffte) gehashte Paßwort komme. Ja, 
funktioniert.

Hier das Protokoll:
1
1. user anlegen                                                                 
2
                                                                                
3
/usr/local/mysql/mysql-4.0 $bin/mysql -u root                                   
4
Welcome to the MySQL monitor.  Commands end with ; or \g.                       
5
Your MySQL connection id is 1 to server version: 4.0.30                         
6
                                                                                
7
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.                   
8
                                                                                
9
root@localhost/(none)>delete from mysql.user where user="";                     
10
Query OK, 2 rows affected (0.00 sec)                                            
11
                                                                                
12
root@localhost/(none)>flush privileges;                                         
13
Query OK, 0 rows affected (0.00 sec)                                            
14
                                                                                
15
root@localhost/(none)>grant all on test.* to testuser@"%" identified by "vollgeheim";                                                                           
16
Query OK, 0 rows affected (0.00 sec)                                            
17
                                                                                
18
root@localhost/(none)>select user, password from mysql.user where user="testuser";                                                                              
19
+----------+------------------+                                                 
20
| user     | password         |                                                 
21
+----------+------------------+                                                 
22
| testuser | 6caf9d1a7e77fe1e |                                                 
23
+----------+------------------+                                                 
24
1 row in set (0.00 sec)                                                         
25
                                                                                
26
root@localhost/(none)>Bye                                                       
27
                                                                                
28
------------------------------------------------------                                                                                
29
2. login als neuer user (mit Wireshark mitgeschnitten)                          
30
                                                                                
31
/usr/local/mysql/mysql-4.0 $bin/mysql -h 127.0.0.1 -u testuser -pvollgeheim     
32
Welcome to the MySQL monitor.  Commands end with ; or \g.                       
33
Your MySQL connection id is 5 to server version: 4.0.30                         
34
                                                                                
35
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.                   
36
                                                                                
37
testuser@127.0.0.1/(none)>Bye                                                   
38
                                                                                
39
--------------------------------------------------                                                                               
40
3. test mit challenge (von Wireshark) und passwort                              
41
                                                                                
42
$make                                                                           
43
cc -DSTANDALONE   -c -o main.o main.c                                           
44
cc -DSTANDALONE   -c -o password.o password.c                                   
45
cc -o old_auth main.o password.o -lm                                            
46
                                                                                
47
$./old_auth "GYl1Nv)e" vollgeheim                                               
48
challenge: >GYl1Nv)e<                                                           
49
password:  >vollgeheim<                                                         
50
message:   >@Q\FE_@O<

angehängt:
- main.c - wie man den Paßwort-Hash erzeugt (alle benötigten Funktionen 
sind in password.c)
- old_auth.zip - kompletter Code: leicht modifizierte password.c von 
MySQL, main.c, Makefile
- capture.zip - das capture File, hello und login paket wie von tshark 
bzw. Wireshark (Screeshot) zerlegt


XL

von Horst S. (h3aau)


Lesenswert?

Danke Danke Danke !!!
Die Routinen füs Hashen habe ich selbst gemacht.
Und meinen Datenlogger auch.
Dieverse Anpassungen im OpenMCP.
Ebenso das Login ohne Password auf dem AVR u.s.w :-)

von micha2057 (Gast)


Lesenswert?

Hallo Horst,

wie schreibst du die Daten zum Server?
Telnet?

Gruß
Micha

von micha2057 (Gast)


Lesenswert?

Hallo Horst,

stellst du deine Idee auch zur Verfügung?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.