Nach den Schwachstellen der NFC-Karten und des OCPP-Protokolls schauen wir nun genauer in die Ladestation selbst. Kurioserweise haben viele Ladestationen einen eingebauten USB-Port, der für den Betreiber die Möglichkeit bietet, Softwareupdates einzuspielen oder Konfigurationen zu ändern. Natürlich macht jeder Hersteller hier etwas anderes — die folgenden Überlegungen sind also nicht allgemeingültig. Das folgende Bild zeigt die USB-Ports einer KEBA P30 (links) und einer Hager WittyPark (rechts):
Im Folgenden erläutere ich Angriffe auf die beiden Ladestationen, die einfach durch das Einstecken eines USB-Sticks durchführbar sind. Bei beiden Modellen muss man lediglich ein paar Schrauben lösen und hat so Zugang zu den USB-Ports. Faiererweise muss man allerdings sagen, das es auch Ladestationen gibt, die durch ein brauchbares Schließsystem gesichert sind und so der Zugang zum USB-Port nicht so einfach möglich ist.
Hager WittyPark
Bei den WittyPark-Ladestationen von Hager kann man einfach einen FAT-formatierten USB-Stick in den USB-Port in der Ladestation stecken. Der USB-Port ist, wenn man den Deckel von der Ladestation entfernt hat, frei zugänglich.
Auf dem Stick wird dann eine Datei angelegt, in der neben z.B. der Firmwarerevision und weiteren Konfigurationseinstellungen auch die Netzwerkkonfiguration inklusive der URL und der Zugangsdaten des OCPP-Backends dokumentiert sind:
Damit könnte man nun einen Man in the Middle-Angriff vorbereiten oder einfach nie stattgefundene Ladevorgänge simulieren. Aber man kann auch die Einstellungen der Ladestation selbst ändern: Einfach die Logdatei nach einem gewissen Schema umbenennen und die Einstellungen wie gewünscht anpassen. Dann den USB-Stick wieder in die Ladestation einstecken — und die Ladestation übernimmt und speichert die neue Konfiguration.
Das ist natürlich für den Wartungstechniker sehr bequem, allerdings leider auch für potentielle Angreifer. Meines Wissens nach ist es bei den Hager-Stationen auch nicht möglich, den USB-Port für derartige Konfigurationsänderungen zu sperren.
Keba P30
Auch die KEBA P30 (x-series) lässt das Ändern von Konfigurationseinstellungen über USB zu, allerdings kann man diese Funktion abschalten. Allerdings kann man bei beiden Ladestationen auch Firmwareupdates über USB einspielen — und bei der KEBA-Station gibt es hierbei erhebliche Lücken. Im folgenden Video zeige ich, wie man die Ladestation über ein Firmwareupdate manipulieren kann:
Man erreicht den USB-Port der Ladestation, nachdem man insgesamt 6
Schrauben gelöst hat. Der USB-Stick enthält im Unterverzeichnis UPD
eine Datei namens pwned.keb
. Die Dateiendung deutet auf ein
Firmwareupdate von KEBA hin. Effektiv handelt es sich dabei aber nur um
eine ZIP-Datei. Der Updateprozess der Ladestation funktioniert so:
- Die
.keb
-Datei wird auf das interne Dateisystem der Ladestation kopiert und dort ausgepackt. - Die Datei
install.bsh
enthält ein Script für die Beanshell, einer Scriptsprache für die Java-Umgebung. Dort wird zunächst etwas Infrastruktur für das Firmwareupdate zusammengebaut. - Danach sucht das Script im Unterverzeichnis
firmware
nach weiteren.bsh
-Dateien und führt diese aus.
Dieser Prozess ist natürlich sehr einfach zu manipulieren, da die
ZIP-Datei nicht verifiziert wird. Ich habe also einfach ein eigenes
Updatepaket (pwned.keb
) mit der gleichen Struktur erstellt. Das
Script install.bsh
vereinfache ich lediglich etwas, aber die
Funktion bleibt im Wesentlichen unverändert.
In der Datei /firmware/run-reverse-shell.bsh
kopiere ich ein
einfaches Shellscript via Stringkonkatenation zusammen, speichere es,
mache die Datei ausführbar und starte das Skript. Und tatsächlich öffnet
sich auf einem angeschlossenen Rechner eine Rootshell:
Damit hat man nun die volle Kontrolle über die Ladestation. Man kann z.B. wie im Video gezeigt direkt auf das Display zugreifen:
/home/keba/scripts/pdcDisplayArgs.sh "Heute\$gratis\$laden!" 4 4
Das ist allerdings auch eine Funktion, die man über die UDP-Schnittstelle der Ladestation abrufen kann. Viel interessanter ist natürlich, welche Informationen auf der Ladestation selbst gespeichert sind. Via
# grep "principal" /opt/KemoveCPM/var/logs/kemove.log
principal: "BAAAAAAD"
principal: "BAAAAAAD"
...
findet man z.B. die Kartennummern der vorangegangenen Nutzer der
Ladesäule, hier aus meinen Tests lediglich die Nummer BAAAAAAD
.
Fazit
Die von mir untersuchten Ladestationen weisen erhebliche Sicherheitsschwachstellen auf. Da die Systeme bereits in signifikanten Stückzahlen im Feld installiert wurden dürfte es schwierig sein, diese Schwachstellen zeitnah zu beheben. Insbesondere das Auslesen der Ladekartennummern aus KEBA-Stationen ist eine Schwachstelle, bei der mir die sprichwörtlichen Haare zu Berge stehen.Für einen Angreifer ist es sehr einfach, einen USB-Stick so zu präparieren, das die Kartennummern nach dem Einstecken gesucht und wieder auf den USB-Stick kopiert werden. Die Abdeckungen zu demontieren dauert vielleicht 30 Sekunden, das kopieren nochmal 30 Sekunden, und die abschließende Montage der Abdeckungen weitere 30 Sekunden. Dabei von einem sicheren Ladesystem zu sprechen finde ich absurd.