Schwarzladen: Ladekarten manipulieren leicht gemacht


Nicht zuletzt durch große Förderprogramme wird die Ladeinfrastruktur zur Zeit massiv ausgebaut. Die Ladeverbünde haben mit den derzeitigen Ladekarten leider ein System etabliert, das extrem einfach zu missbrauchen ist: Man kann ohne großen Aufwand auf fremde Kosten laden.

In dem Video sieht man, wie ich mit meiner "Cyberkarte" an einer E-Wald Ladesäule den Strom freischalte. Als "Fahrzeug" verwende ich meinen Elektroauto-Simulator. Die Cyberkarte ist ein Klon meiner eigenen New Motion-Karte, d.h. ich habe diesen Ladevorgang selbst bezahlt. Das sieht man auch in der New Motion-App:

New Motion App: Abrechnung der Ladevorgänge

Allerdings wäre es sehr einfach gewesen, eine andere Karte zu klonen und damit auf fremde Kosten zu laden. Im Folgenden erkläre ich, was technisch passiert und warum es derzeit unmöglich ist, die Ladekarten sicher zu machen.

Was passiert da?

Zunächst habe ich die notwendigen Informationen von meiner New Motion-Ladekarte auf einen Kartenemulator übertragen. Ich nutze den Chameleon Mini: Das ist ein kleiner NFC-Kartensimulator, der beliebige Karten simulieren kann. Nachdem ich meinen Elektroauto-Simulator angeschlossen hab kann ich mit dieser Kartenkopie einen Ladevorgang freischalten. Das ist spannender als es sich anhört: Es ist nämlich sehr simpel, eine existierende Karte zu kopieren. Und noch schlimmer: Man braucht dafür nicht notwendigerweise eine New Motion-Karte, man kann die notwendigen Daten auch einfach raten.

Untersucht man die New Motion-Ladekarten mit einem NFC-Lesegerät (in meinem Fall ein ACR122U) findet man schnell heraus, das es sich bei den Karten um den Typ "Mifare Classic 1k" handelt. Das ist ziemlich schlecht, da die Sicherheitsfunktionen dieses Kartentyps schon vor etwa 10 Jahren geknackt wurden. Schauen wir uns also einfach mal an, was auf einer New Motion-Karte gespeichert ist:

$ xxd newmotion.mfd
00000000: XXXX XXXX XXXX XX88 4400 c820 0000 0000
00000010: 0000 0000 0000 0000 0000 0000 0000 0000
00000020: 0000 0000 0000 0000 0000 0000 0000 0000
00000030: ffff ffff ffff ff07 8069 ffff ffff ffff
00000040: 0000 0000 0000 0000 0000 0000 0000 0000
00000050: 0000 0000 0000 0000 0000 0000 0000 0000
00000060: 0000 0000 0000 0000 0000 0000 0000 0000
00000070: ffff ffff ffff ff07 8069 ffff ffff ffff
[...]
000003c0: 0000 0000 0000 0000 0000 0000 0000 0000
000003d0: 0000 0000 0000 0000 0000 0000 0000 0000
000003e0: 0000 0000 0000 0000 0000 0000 0000 0000
000003f0: ffff ffff ffff ff07 8069 ffff ffff ffff

Richtig — die Karte ist leer. Im ersten Block sieht man die Kartennummer (XXXX XXXX XXXX XX). Ansonsten stehen da nur Nullen und die Standardberechtigungen in den Datenblöcken. Es reicht also aus, einer Ladesäule eine existierende Kartennummer zu geben — und schon startet der Ladevorgang.

Die Werkzeuge: Links der Chameleon Mini, rechts mein NFC-Leser.

Eigentlich wird die Kartennummer von einem Kartenleser dazu genutzt, unterschiedliche Karten voneinander unterscheiden zu können. Ein Kartenleser findet zunächst heraus, welche Karten in der Nähe sind. Dazu fragt er alle Karten nach der Kartennummer. Dann spricht er über die Kartennummer gezielt einzelne Karten an. Die Kartennummer muss also öffentlich und unverschlüsselt sein und sollte lediglich für die Initialisierung der Datenverbindung genutzt werden. Das kann man in der ISO 14443-3 nachlesen ("initialization and anticollision").

New Motion nutzt jedoch die Kartennummer zur Abrechnung des Ladevorgangs. Das ist wie eine alte Kreditkarte: Die Kreditkartennummer reicht aus, um damit einkaufen zu können.

Man braucht also noch nicht einmal die (defekte) Verschlüsselung der Mifare Classic zu knacken, um eine Ladekarte zu klonen. Ein beliebiger Kartenleser und die mit der Chameleon Mini gelieferten Werkzeuge reichen aus, um eine perfekte Kopie der New Motion-Karte herzustellen:

python3 ./chamtool.py -s 2 -c MF_CLASSIC_1K_7B -U <Kartennummer> \
    -p /dev/<device> -u <kartendump.mfd>

Genau das sieht man oben im Video. Und über die Roaming-Funktion funktioniert der Kartenklon auch an Ladesäulen der folgenden Ladeverbünde:

  1. New Motion selbst
  2. BMW Charge Now
  3. E-Wald
  4. Ladenetz

Ich gehe allerdings davon aus, das so ziemlich jeder Ladeverbund damit funktioniert, auch wenn ich noch nicht alle testen konnte. Neben New Motion ist z.B. auch die Karte der Stadtwerke Kaiserslautern als Whitelabel-Lösung von Ladenetz bis auf die Kartennummer leer. Im OCPP-Protokoll, mit dem die Ladesäulen an ein Abrechnungsbackend angebunden werden, ist ebenfalls nur eine Kartennummer und keine weiteren Informationen vorgesehen.

Kurzes Zwischenfazit: Ladekarten sind nicht verschlüsselt und man kann sehr einfach perfekte Klone herstellen. Diese Klone funktionieren an Ladesäulen verschiedener Ladeverbünde über die Roaming-Funktion. Es kommt allerdings noch schlimmer.

Ladekarten raten

Bislang hab ich nur meine existierende Karte kopiert — ich will ja nicht auf fremde Kosten laden. Aber es ist ziemlich einfach, eine fremde Kartennummer zu raten. Wenn man sich eine Reihe von New Motion-Karten anschaut, so liegen die Kartennummern recht nahe beieinander:

  1. XX aa bb XX XX XX XX
  2. XX cc dd XX XX XX XX
  3. XX ee ff XX XX XX XX
  4. XX gg hh XX XX XX XX
  5. XX ii jj XX XX XX XX

Das XX meint einfach eine Zahl, die bei allen Kartennummern gleich ist. Die kleinen Buchstaben zeigen Ziffern an, die bei den Karten unterschiedlich sind. Um eine funktionierende Kartennummer zu raten würde ich Folgendes machen:

  1. An einer Ladesäule meinen Elektroauto-Simulator leicht modifiziert so anbringen, das ein Raspberry Pi diesen fernsteuern kann.
  2. Den Chameleon Mini mit dem Raspberry Pi verbinden und ihn Kartennummern durchprobieren lassen.
  3. Sobald Strom aus der Ladesäule kommt hat man eine fremde Kartennummer gefunden und kann diese zum Laden nutzen.

Im Endeffekt müsste man zwei Bytes, also 2^16=65536 Kombinationen, durchprobieren. Allerdings reicht es ja, einfach die nächste gültige Kombination zu raten. Wenn man davon ausgeht, das jede 100ste Kombination gültig ist, kommt man mit 100 Versuchen zum Ziel. Mein Desktop-Kartenleser kann in Kombination mit dem Chameleon Mini alle 2,5 Sekunden eine neue Kombination testen. Da noch etwas Datenkommunikation für die Ladesäule anfällt würde ich von 7 Sekunden/Test ausgehen. Macht 700 Sekunden oder knapp 12 Minuten. Das ist durchaus nachts auf einem Parkplatz machbar. Im Prinzip kann also jeder eine passende Kartennummer raten und diese dann zum Laden benutzen — ohne das der Besitzer der Ladekarte davon etwas mitbekommt.

Fazit

Es ist für jedermann recht einfach, Ladekarten zu klonen und auf fremde Kosten laden. Liebe Ladenverbundbetreiber — ihr habt Mist gebaut:

  1. Ihr benutzt keine Verschlüsselung.
  2. Die Karten, die ihr ausgebt, haben zwar Möglichkeiten zur Verschlüsselung, aber diese sind seit 10 Jahren gebrochen. Ist aber egal, weil ihr sowieso keine Verschlüsselung benutzt.
  3. Eure Kunden dürften es sehr schwer haben, eine unberechtigte Nutzung zu belegen.

Dooferweise ist diese Technik nun im Feld. Sowohl die Ladesäulen als auch die Abrechnungssysteme dahinter sind komplett auf diese Technik ausgelegt. Es dürfte also noch eine ganze Weile dauern, bis diese Technik durch etwas Besseres ersetzt wird. Leider müssen die Kunden solange mit dieser Unsicherheit leben.

FAQ

Warum veröffentlichst Du das? Jetzt kann jeder auf meine Kosten laden!

Nein, das kann schon immer jeder machen. Mich würde es sehr wundern, wenn es nicht schon längst Leute geben würde, die genau das machen. Im Übrigen hab ich keine spezielle Technik verwendet oder Verschlüsselungssysteme gebrochen. Das Prinzip der Ladekarten ist einfach kaputt.

Warum kontaktierst Du nicht die Ladeverbundbetreiber?

Nun, das habe ich versucht, mehrfach. Bei New Motion scheint es intern keinen Prozess zu geben um mit Meldungen über Schwachstellen umzugehen. Weder über Email noch am Telefon. Bei anderen sieht es ähnlich aus.

Was sagen die Ladesäulenhersteller?

Auch mit denen habe ich Kontakt aufgenommen — mit mäßigem Erfolg. Ein Vertreter eines Herstellers sagte mir ins Gesicht, das dieses Problem bekannt ist und irgendwann behoben wird. Keiner hat irgendwelchen Handlungsbedarf gesehen. Die Sicherheit von Ladesäulen selbst ist übrigens auch schrecklich. Das werde ich mal separat aufschreiben.

Wie ist das denn mit den Ladekarten, die ich in meinem Carsharing-Auto finde?

Im goingelectric-Forum tauchte der interessante Hinweis auf, das davon natürlich auch die Anbieter von Carsharing-Fahrzeugen betroffen sind. Doofe Situation — da sollte dann der Ladeverbundbetreiber für Abhilfe sorgen.

Was sollen die Ladeverbünde nun machen?

Ihre Hausaufgaben! Statt unsicheren Eigenentwicklungen sollten sie auf bewährte Technik wie z.B. die Abrechnung über girogo setzen. Damit können Kleinbeträge mit der normalen Girokarte kontaktlos beglichen werden.

Sind das alle Schwachstellen?

Nein, leider nicht.

Ich arbeite für einen Ladeverbund/Ladesäulenhersteller/Carsharing-Anbieter.

Ich bin gerne bereit, meine Erkenntnisse zu teilen und nach Lösungen zu suchen. Eine Mail an md@gonium.net und wir können schauen, wie es nach vorne gehen kann.

Wie kann ich mich schützen?

Vorerst keine Ladekarte mehr verwenden und diese deaktivieren (lassen). Bei New Motion kann man alternativ auch die Handyapp verwenden. Andere Anbieter wie z.B. Innogy setzen sowieso auf eine App.

Was kann ich sinnvoll tun?

Schreibt Euren Ladeverbund an und weist sie auf das Problem hin!


Mathias Dalheimer

Yours truly.

likes distributed & embedded systems

GPG key: B6501625
fingerprint: E7BA B68E A2D3 9B6A ECEF 4DE4 823E 0DBE B650 1625
github | twitter


Proudly made using vim, jekyll, bootstrap (cosmo theme) & coffee. Last update: 09 Nov 2017