Ich habe einen Webserver auf einem ESP8266-Mikrocontroller in meinem lokalen Netzwerk eingerichtet. An dieses Gerät gesendete HTTP-GET-Anfragen können eine Netzsteckdose ein- und ausschalten, und ich plane, mehrere davon im ganzen Haus zu installieren.
Dieses LAN ist über eine Standard-Internetbox (Router + Modem) mit dem Internet verbunden. Ich möchte verhindern, dass jemand von außerhalb des LANs, auch jemand aus dem Internet, irgendetwas an den Mikrocontroller sendet.
Nehmen wir an, dass niemand mein WPA-PSK-geschütztes WLAN hacken kann. Ist mein Setup dann ein Sicherheitsverstoß? Wie schwierig ist es für jemanden, meine selbstgebauten Smart-Steckdosen zu hacken?
Antwort1
Obwohl es für niemanden von außen möglich sein sollte, direkt auf den Server zuzugreifen (solange Sie keine Ports auf dem Router weiterleiten), sind Sie anfällig für etwas wieCross-Site-Request-Forgery. Wenn Ihnen beispielsweise jemand eine E-Mail-Nachricht im HTML-Format sendet (oder Sie auffordert, eine Webseite zu laden, oder ...), die ein Inline-Bild enthält, von dem http://192.168.1.50/control?outlet=all&action=off
(oder was auch immer die IP-Adresse und Syntax ist) geladen wurde, wird Ihr E-Mail-Client versuchen, ein Bild von dieser URL zu laden, und Ihre Ausgänge werden abgeschaltet (oder was auch immer).
Wenn Sie also Freunde haben, die sich mit Computern auskennen und Ihr Netzwerk-Setup kennen, müssen Sie damit rechnen, dass Ihnen jemand einen Streich spielt. Tatsächlich sollten Sie auch mit zufälligen XSRF-Angriffen rechnen, die versuchen, zufällig andere Geräte auszunutzen, die Sie vielleicht haben oder nicht. Wenn der Webserver des Controllers dadurch verwirrt wird, kann er versehentlich kaputt gehen.
[Update] Um dies besser abzusichern, hängt es stark davon ab, welche Verschlüsselungsfunktionen der Webserver hat. Bei einer schnellen Suche habe ich nicht viele Informationen gefunden, daher bin ich mir nicht sicher, was er kann. Am einfachsten ist es, der Anfrage eine Kennwortvariable hinzuzufügen. Dies ist nicht besonders sicher, da es auf dem Kabel sichtbar ist, im Verlauf des Clients gespeichert und auf dem Server protokolliert wird usw., aber es ist besser als nichts (und besser als eine seltsame Syntax zu verwenden, da sie leicht zu ändern ist).nichtVerwenden Sie für alles andere dasselbe Passwort.
Auch der Wechsel von GET zu POST würde etwas helfen, insbesondere da der HTTP-Standard besagt, dass GET-Anfragen den Status des Servers nicht ändern sollen – das heißt, es soll für Clients sicher sein, GET-Anfragen zu senden/nicht zu senden, je nachdem, wie der Status ihrer Caches ist. Die Verwendung von HTTPS würde sogar noch mehr helfen (falls der Server dies unterstützt). Die Verwendung einer WebDAV-Digest-Authentifizierung (anstelle einer Kennwortzeichenfolge) wäre ebenfalls gut (auch hier gilt, falls der Server dies unterstützt), aber Sie müssten eine Art Schutz gegen Replay-Angriffe hinzufügen, damit dies wirklich effektiv ist.
Antwort2
Obwohl alles möglich ist, gilt: Wenn Sie keine Ports per Portweiterleitung (auch virtueller Server genannt) zugeordnet haben, insbesondere 80, 443 und 8080 oder welche Ports auch immer Ihr Webserver verwendet, liegt die Wahrscheinlichkeit eines Angriffs von außerhalb des LAN, der über Ihren Router auf dieses Gerät gelangt, bei nahezu null.
Aber ohne eine gründlichere Sicherheitsüberprüfung sollten Sie dies nicht als endgültige Antwort betrachten. Wo ein Wille ist, ist auch ein Weg, egal welche Vorsichtsmaßnahmen Sie treffen.