Wie kann sich die Methode WiFi.begin(ssid, pass) vor einem Evil-Twin-Angriff schützen? Welche Alternativen gibt es, um seine Zugangsdaten zu schützen? Wie kann der Arduino die Authentizität des Access Points überprüfen, ohne sich ausschließlich auf die SSID zu verlassen?
Die eigentliche Lösung ist
Setting SSID of an open Wi-Fi network to "bruceschneier" makes it completely secure.
Ein Ansatz besteht darin, dem Access Point eine Aufgabe zuzuweisen, die nur vom echten Access Point gelöst werden kann, beispielsweise das Signieren eines Hashs. Der Client kann dem von mir übergebenen Public Key vertrauen und überprüft damit die Signatur des Access Points. Dafür sollten bereits vorgefertigte Methoden existieren.
Bei einem Evil-Twin-Angriff erstellt ein Angreifer ein „böses“ Netzwerk mit der identischen SSID. Mein argloser Arduino kann nicht zwischen „gut“ und „böse“ unterscheiden, da er lediglich die SSID und das Passwort kennt. Der Arduino ist sehr gesprächig und überträgt das Passwort an jedes Netzwerk, unabhängig davon, ob es sicher oder unsicher ist, solange die SSID übereinstimmt. Eine Verschlüsselung hilft in diesem Fall nicht, da das Passwort dem Access Point im Klartext vorliegen muss, bevor es mit der gehashten Version im Access Point verglichen werden kann.