Arduino und das Internet - wirklich die richtige Mischung?

Hi da drausen,

so nun schreib ich auch mal in den Deutschen Bereich :slight_smile:

Jetzt wo ich loslegen wollte stelle ich fest das das alles gar nicht so geht wie ich es mir vorgestellt habe.
Meine Probleme betreffen die Verbindung zwischen Arduino und der großen weiten Welt.
Bevor ich mir den Arduino und so weiter zugelegt habe, habe ich natürlich einiges gelesen.
Tja ich sah das sehr viele Daten logen und Dinge von unterwegs steuern und eben viel mit
dem Arduino im web gemacht wird. Ich dachte also das gewisse Dinge wohl ganz einfach sind
bzw grundsätzlich vorhanden und schon 1000 fach gemacht wurden.
Ich habe also nicht weiter drüber nachgedacht...

Nun stelle ich fest das FTP so gut wie wohl gar nicht genutzt wird und auch das SSL ein Problem ist.
Bei dem was viele so alles mit dem Arduino in Netz laden dachte ich: FTP kein Problem.
Aber fast alle senden die Daten per HTTP POST.

Meine Idee war das ganze auf SD zu speichern (csv) und in gewissen Abständen auf den Webspace hoch zu laden.
Denn was ist wenn die Internetverbindung mal nicht geht, der Router ausfällt usw... , dann hat sich was mit
zb Loggen von Sensoren.
Eine einzige FTP Lösung habe ich im ganzen web gefunden (bzw hier). Aber der Login wird plain text gesendet.
SFTP muß es ja nicht sein aber FTPS wäre schon nicht schlecht.

Nun habe ich ein Verzeichnis angelegt in das die Daten sollten und eine php liegt die die Daten aus meinen csv
in die Datenbank schreibt. Natürlich soll das niemand aufrufen bzw Google nicht sehen können.
Also basic access authentication aufs Verzeichnis. Und schon das nächste Problem.
HTTPS geht wohl nicht mit dem Arduino. Mir ist klar das der Atmega nicht den ganzen Verkehr verschlüsseln/entschlüsseln
kann, aber zumindest soweit kommunizieren das Passwort senden geht müsste drin sein.

Bitte nicht falsch verstehen. Arduino ist toll, aber wie kann es sein das so viele mit ihm im Web spielen
und kaum FTP genutzt wird und Passwörter plain text gesendet werden?
Was ist mit den ganzen Smartphone Steuerungs-Spielereien die manche machen?

Muss ich auf Himbeerkuchen oder Hundeknochen umsteigen?
Was übersehe ich?

Wenn Du Linux kannst dann Himbeerkuchen.
Der Arduino (UNO oder MEGA) ist einfach nicht dafür vorgesehen um größere Datenmengen zu verschieben.
Ich hab zuwenig Erfahrung ob der Due das bewerkstelligen könnte.

Grüße Uwe

Nun ja, mir ging es mehr um den Sicherheitsaspekt.
Datenmäßig fallen ja bei ein paar Sensoren nur ein paar KB an als csv
auf einer SD. Andere loggen ja 20 Sensoren jede Sekunde und schicken sie ins Web.

Einen habe ich gefunden der hängt nen key an die URL und nur mit diesem
key nimmt die Seite es an. Nur was nützt das ohne HTTPS wenn das alles
plain text läuft und man alles mitloggen kann.

Und 500 Zeichen lange URLs alle 2 Sekunden zum Server finde ich auch nicht grade
effizient. Erstens nicht dafür gemacht und unnötige Belastung der Leitung bzw
Energieverschwendung.

MrGlasspoole:
Was übersehe ich?

Aktuelle PCs haben über 2000 MB RAM-Hauptspeicher, ein Arduino UNO mit Atmega328 hat 2 KB = 0,002 MB RAM-Speicher.

Das ist weniger als ein Zehntel dessen, was vor 25 Jahren ein C64 mit geladenem Basic-Interpreter als freien RAM gemeldet hat.

Lädst Du beim Arduino UNO ein 20 Zeichen langes Passwort in den RAM-Speicher, schon ist 1% des RAM-Speichers voll.

Für eine FTP-Verbindung benötigst Du Datenverbindungen auf wenigstens zwei Ports:
Port 20 =>TCP DATA Port
Port 21 =>TCP Control Port

Können die Ehternet-Shields überhaupt "zwei Verbindungen gleichzeitig" erstellen, aufrecht erhalten und bedienen?
Und wie viel RAM ginge wohl dabei drauf?

Für HTTP-POST benötigst Du jedenfalls nur eine einzige Verbindung und nur einen Port.

Wenn Du umfangreiche Internetdaten austauschen möchtest, übergibst Du die Daten lokal besser erstmal vom Mikrocontroller an einen "richtigen Computer", wie einen Android-Rechner, einen Raspberry oder einen PC, und läßt den Datenaustausch mit dem Internet einen richtigen Computer machen, der mehr Rechenpower und vollem auch "mehr RAM-Speicher" hat.

Oder schickst die Daten per HTTP-Post an einen Rechner im Internet. Mit der Basic HTTP-Authentication wie sie im Apache-Webserver standardmäßig enthalten ist und was auch mit einem Arduino machbar ist, kannst Du problemlos auf "geschützte Verzeichnisse" eines Webservers zugreifen, ohne ein Passwort im Klartext übertragen zu müssen, und verschlüsseln müßtest Du Deine Daten dann über einfache Bitschiebereien dann schon selbst.

FTP geht. Gibts hier im playground.

Es geht ja auch gar nicht um großen Datenaustausch. Mal davon abgesehen das viele
diesen betreiben.

Mit übersehen meinte ich: Bedienung von Dingen im Haushalt per Smartphone und eben Daten
upload den andere machen. Wo ist der Zugriffsschutz bei diesen?

Da Twittert die Katze und die Heizung wird ein und ausgeschaltet von Unterwegs...
Und jeder mit Tablet vorm Haus kann sämtliche Passwörter mitschreiben?

MrGlasspoole:
Es geht ja auch gar nicht um großen Datenaustausch. Mal davon abgesehen das viele
diesen betreiben.

Mit übersehen meinte ich: Bedienung von Dingen im Haushalt per Smartphone und eben Daten
upload den andere machen. Wo ist der Zugriffsschutz bei diesen?

Wie schon in meinem letzten Posting erwähnt: HTTP Basic Authentication.
Ist im HTTP-Standard genormt.

Hier mit einigen weiterführenden Links:

http://code.google.com/p/easyrobot/wiki/BasicAuthentication

http://ten-fingers-and-a-brain.com/2012/01/webduino-now-with-support-for-http-basic-access-authentication

Und wenn jemand mit HTTP von unterwegs seine Katzenklappe freigibt, dass die Katze auf Freigang raus kann, machen das wohl viele tatsächlich auch einfach mit Klartext-Passwort.

Es soll nämlich auch Leute geben, die kein WiFi im Haushalt verwenden, sondern ihr Home-Lan verkabelt haben, so dass die Nachbarn dann keine Passwörter im Klartext aus der Luft abfischen können, z.B. das Klartext-Passwort der Katzenklappe vom Nachbarn.

Guten Morgen,

wie ich im ersten posting schrieb habe ich basic access authentication ja auf ein Verzeichnis gemacht
und als ichs testen wollte eben dabei festgestellt das https nicht geht.

Ja bei mir ist auch alles Verkabelt da ich von Wlan nicht viel halte.
Lediglich tagsüber ist es an weil mein Vater ein Xoom hat.

Die Katzenklappe geht ja noch - aber Email, Twitter, Flickr account ohne https?
Ich glaub ich besorge mir mal das O'Reilly Buch "Programming Your Home" - vielleicht gibts da
Sicherheitsantworten.

wo ist das problem wenn ich passwörter im Klartext innerhalb meines lokalen Netzes, selbst Wlan (wpa2), verschicke?

Oder hab ich da jetzt was falsch verstanden?

MrGlasspoole:
Mit übersehen meinte ich: Bedienung von Dingen im Haushalt per Smartphone und eben Daten
upload den andere machen. Wo ist der Zugriffsschutz bei diesen?

Da Twittert die Katze und die Heizung wird ein und ausgeschaltet von Unterwegs...
Und jeder mit Tablet vorm Haus kann sämtliche Passwörter mitschreiben?

So einfach ist das mit dem Tablet vorm Haus sicher auch nicht. Falls Du ein WLAN hast, ist das hoffentlich nach WPA2 Standard verschlüsselt, das ist zwar auch nicht 100%ig, aber es ist schon ein wenig Aufwand nötig, um das zu knacken. Ansonsten, wer soll denn einen HTTP-Request von Deinem Arduino zu Deinem Webserver mitloggen? Klar, ein Man in de Middle ist immer möglich, aber nicht mal eben so. Und mal ehrlich wieso sollte jemand so viel kriminelle Energie aufwenden, um Deine Sensordaten zu verfälschen?

Ich gebe Dir recht, unverschlüsslte Kommunikation liefert immer verschiedenste Angriffsvektoren. Aber ein möglicher Angriffspunkt ist erstmal noch keine direkte Gefahr. Es ist immer eine Frage der Risikoabschätzung.
Fakt ist, das SSL mit dem Arduino aufgrund von Speichermangel und fehlender Rechenleistung nicht geht. Wenn Dir das so wichtig ist, würde ich mir mal den Raspberry Pi anschauen, da hast Du ein komplettes Linux mit allen Tools die man sich für sichere Kommunikation wünscht.

Ich persönlich sehe erstmal kein sehr großes Risiko, wenn ich von drinnen nach draussen kommuniziere. Also der Arduino per HTTP-GET (oder POST) Daten in Richtung Web schickt. Damit ist der Arduino schonmal nicht direkt von aussen erreichbar und auch nicht direkt angreifbar.
Damit ein reelles Risiko besteht, muss also
1.) Jemand in der Lage sein an irgendeiner Stelle die übermittelten Daten mitzusschneiden.

  • auf meinem Webserver? Dann hab ich eh verloren :-), denn dann habe ich ein ganz anderes Problem
  • in meinem Heimnetz? Das kann bei hinreichender Verschlüsselung des WLAN nur jemande innerhalb des Netzes sein (Risiko gering, außer ich wohne in einer WG)
  • auf dem Weg vom Router zum Webserver. Hier kann maximal ein Provider oder ISP an die Daten. Das ist zwar technisch möglich, aber unwahrscheinlich. Warum sollte das jemand machen?

2.) Mal angenommen, jemand schafft es tatsächlich die Daten mitzuschneiden. Dann muss er immer noch:

  • auf den Inhalt der Daten schliessen und verstehen was er damit anfangen kann
  • die Daten manipulieren, um erstmal irgendeinen Effekt zu erreichen
  • verstehen welche gesendeten Daten was bedeuten und was man damit bewirken kann
  • Am Ende gezielt manipulierte Daten senden, um z.B. meine Heizung auszuschalten?

Das Ganze setzt einen nicht geringen Aufwand voraus. Der muss sich ja am Ende irgendwie auszahlen. Das meine ich mit Risikoabschätzung.

wie ich im ersten posting schrieb habe ich basic access authentication ja auf ein Verzeichnis gemacht
und als ichs testen wollte eben dabei festgestellt das https nicht geht.

HTTP-Auth hat nichts mit HTTPS zutun. Beim HTTP-Auth wird vom Client ein Hashwert über einen Username:Passwort-String übermittelt, den der Webserver mit dem gespeicherten Wert aus Username und Passwort vergleicht. Stimmt der Hash, gewährt er Zugriff, ansonsten nicht. Übermittelt wird als der Hash-Wert im Klartext, nicht das Passwort selbst. Du hast natürlich recht, liest jemand den Haswert mit, hat er Zugriff. Riskobewertung: siehe oben :slight_smile:
HTTPS ist am Ende nur HTTP durch eine SSL (Secure Socket Layer) gesicherte Verbindung. Hier einigen sich Client und Server über ein public Key Verfahren auf einen symetrischen Session Schlüssel, mit dem dann die Nutzdaten der Verbindung ver- und entschlüsselt werden. Das geht mit dem Arduino eben nicht.

HTTP-Auth geht mit dem Arduino übrigens ohne Probleme. Das erhöht auf jeden Fall die Sicherheit auf der Webserver-Seite, da jemand nur Zugriff erhält, wenn er es schafft, den Login-Hashwert zu erraten oder zu beschaffen. Jemand der also per Zufall über die URL zum Datenloggen oder was auch immer stolpert, hat damit erstmal keine Chancen Schaden anzurichten. Google und Co. hast Du damit auf jeden Fall auch ausgesperrt.
Mario.

Natürlich hat basic access authentication nichts mit https zu tun.
Aber eben die Passwort Übermittlung nach dem Prinzip: username:passwort@mydomain.de/folder/index.html
Die Regel lautet:

never ever use Basic HTTP Authentification if the connection isn't HTTPS (SSL)

Na ja, ich komm wohl zu sehr aus der Ecke Webdesign und Server und nehme das wohl zu genau.
Ich weiß wer dafür haftet wenn mit meine Server jemand Schindluder treibt und darum ist
zb FTP Passwörter in plain text ein absolutes no go.

Die Richtung geht in SPDY und Google treibt es voran. Der Tag kommt an dem alles
über https läuft - so sollte es schon immer sein.