Wie um zu verhindern, dass WLAN-Passwort nicht durchgesickert von Lua-code?
Ich habe ein Lua-Programm, das eine Verbindung zu einem wifi-Netzwerk. Das wifi-Passwort ist fest in der Lua-code. Lege ich den Lua-code auf einem ESP8266 läuft NodeMCU firmware.
Hier ist der code den ich benutze:
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID", "password")
wifi.sta.connect()
srv = net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive", function(conn, payload)
print(payload)
local response = "HTTP/1.1 200 OK\r\n\r\n<h1> Hello, NodeMcu.</h1>"
conn:send(response, function()
conn:close()
end)
end)
end)
Wenn ich dieses setup für outdoor-sensoren, die kann jeder greifen, der ESP8266, Lesen Sie die Lua-Skript und mein WLAN Passwort.
- Gibt es irgendwo um das Kennwort zu verschlüsseln, die auf der ESP8266 mit Lua?
- Ist möglich, einige externe crypto-Einheit?
- Nicht kompilierten Lua-code etwas ändert?
- Der physische Zugang wird total access. Es gibt keine Möglichkeit, können Sie auch verschlüsseln und mit dem Passwort auf dem selben Gerät, dass ein Angreifer konnte sich nicht zurückentwickeln.
- Speichern Sie Ihr Programm als bytecode, aber nicht setzen Sie Ihr Passwort als string-literal:
wifi.sta.config("SSID",(('948197979B939684'):gsub('..',function(s)return s.char(tonumber(s,12))end)))
- Was meinst du mein "als bytecode" meinst du, kompilieren Sie den code, um
.lc
? Könnten Sie bitte geben Sie eine ausführliche Antwort, wie würden Sie behandeln das Passwort-problem? - Zum kompilieren von bytecode:
luac -s -o program.luac program.lua
. Sie können mit jedem nicht-trivialen Ausdruck, der ausgewertet wird, um Ihr Passwort ein. Dies ist keine vollständige Lösung, es macht einfach extrahieren Sie Ihr Kennwort ein bisschen schwerer. - Was meinst du mit "alle nicht-trivialen Ausdruck, der ausgewertet wird, um Ihr Passwort"?
- Sie können nicht legen Sie Ihr Passwort in einem string-literal als wäre es sichtbar .luac-Datei. Das ist, warum Sie benötigen, um irgendeinen Ausdruck, der ausgewertet wird, im runtime-Ihr Passwort zu erhalten.
- Könnten Sie ein Beispiel geben für solch einen Ausdruck bitte?
- Lassen Sie uns weiter, diese Diskussion im chat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
(Aktualisiert)
Innerhalb von Lua-code, es gibt keine Sicherheit auf physischen Zugang. Zusätzlich zu den anderen Antworten: ESP haben eine option zum speichern der WLAN-Einstellungen. Also damit können Sie nicht setzen Anmeldeinformationen in eine lua-Datei. Programm die Anmeldeinformationen einmal und dann entfernen Sie Anmeldeinformationen-code. Dadurch wird es ein bisschen schwieriger, um die Anmeldeinformationen zu erhalten. Zumindest derjenige, der den code liest, wird es nicht sehen. (aber natürlich keine absolute Sicherheit, weil der diese.)
Jedes mal, wenn esp Neustart oder wifi-Netzwerk in Reichweite ist, wird es eine Verbindung zu der gleichen ssid und Netzwerk. Dies ist standardmäßig eingeschaltet.
Andere Art und Weise zu tun, die mac-Adresse registiration. Wenn Ihr AP ermöglicht die Registrierung der mac-Adressen von Stationen, dann wird es eine weitere Ebene der Sicherheit, da immer Passwort wird nicht ausreichen, um schließen Sie das wifi-Netzwerk. Dies ist nicht sichern Sie Ihr Passwort! Sie müssen konfigurieren Sie Ihren AP zu tun.
Eine weitere Methode:
Dies erfordert mehr code. Ich kann nicht sagen, es ist sicherer, aber es wird es schwieriger machen, zu entdecken. Sollten Sie kompilieren Sie die lua-Dateien zu verwenden, diese. Einfach Ihr Passwort XOR mit ssid und legte die xor ' ed version im code. Erhebung der Netzwerke und erstellen Sie ein Kennwort für jedes Netzwerk. Versuchen Sie, die Verbindung jeder mit der erzeugten übergeben. Das passende paar wird erfolgreich eine Verbindung herstellen. Die anderen werden scheitern. Dadurch wird die Anschluss-Reihenfolge ein wenig länger.
Sobald Sie eine Verbindung der ESP8266 speichert das Kennwort intern, Sie brauchen es nicht zu re-connect nach, dass Sie nur das Kennwort auslassen argument, oder übergeben Sie null.
Speicher ich alle runtime-Einstellungen in einer Datei treffend als Einstellungen.lua, die wie folgt aussieht:
Lade ich es in eine Globale Tabelle, in der init.lua, wie diese:
Wenn ich initialisieren WiFi, die ich überprüfen, um zu sehen, ob das Kennwort ist nicht null. Wenn es nicht ist, ich es verwenden, um zu verbinden, setzen Sie ihn auf null, und überschreiben Sie dann die Datei mit den Einstellungen:
und writecfg.lua sieht wie folgt aus:
Kann es nicht unmöglich sein, um den ESP8266 zu geben, sich das Passwort, aber es ist sicherlich viel schwieriger, als die Speicherung im code, egal wie Sie versuchen zu verschleiern.
Jede Art von Passwort-Verschlüsselung und Lua kompilieren ist "Sicherheit durch Verschleierung" (und damit keine Sicherheit).
Ich schlage vor, Sie nicht setzen Sie das Kennwort in den Lua-code, sondern haben es zur Laufzeit festgelegt. Es gibt mindestens 3 Möglichkeiten:
Achtung: während dieser vermeidet platzieren Sie das Passwort in den Quellcode wirft es ein kleines Risiko, weil die Verbindung zum ESP ist nicht verschlüsselt, wenn das Kennwort geschickt wird, aus dem browser (nicht SSL).
Ich würde auch erwägen, ein I2C-EEPROM zu speichern, die Taste, so dass jeder Kompromiss erfordert auch die hardware nicht gerade die Lua/Flash, aber auch das ist in der Lage zu werden "geschnüffelt", wenn die Maschine physisch gefährdet ist, wie ich mir vorstellen könnte das der Fall durch testen der Schaltung mit einem Daten-Rahmen.
Gibt es eine Antwort, oder zumindest ein Teil der Antwort "das kannst du nicht", die bisher noch nicht abgedeckt worden, in die anderen Warnhinweise, die auf reverse engineering:
Streng genommen: (und ich sage das als jemand, der gearbeitet hat, in das Feld für ein paar Jahrzehnte) sollten Sie nicht sein, da es gar keine "Internet der Dinge" - Typ-Gerät in einem öffentlich zugänglichen Ort, der nicht die Verbindung zu seinem eigenen "IoT" access-point wirklich. Während dies auch klingen mag wie overkill (und wäre, wenn es nur für einen kurzen test) es ist der einzige Weg, um wirklich sicher ist, sich gegen die Möglichkeit des reverse engineering statt.
Sollte man dann natürlich haben, dass der access point Netzwerk Feuer-walled von Ihrem home "private" - Netzwerk mit einer DMZ Rechner im Netzwerk kommunizieren mit der "Dinge". Ein Ersatz-old-PC mit ein paar Netzwerkkarten, läuft so etwas wie der IPCop-Distribution macht dies Recht unkompliziert und relativ Billig.
Aber auch nur mit einem anderen access point/Passwort-Kombi auf dem gleichen Netzwerk ermöglicht eine strengere Politik auf die AP
Wieder, dieser kann scheint wie overkill für deinen Anwendungsfall, und ich Stimme in quick-test-Situationen, aber wenn Sie ernsthaft über die Netzwerk-Sicherheit, und Sie wollen, um die Dinge, es ist der bessere Weg zu gehen - langfristig.
als seitliche Anmerkung: ich habe das Gefühl, dass zu Hause AP/Router müssen bald kommen mit so etwas gebaut-in, so dass die Zukunft zu Hause Dinge hat, die Möglichkeit, ohne zusätzliche Fertigkeiten oder hardware.