Ein Pfandsystem mit Barcodes hacken, oder: Hurra, wir drucken Geld!

Eins gleich vorab: Wer die Attacke, wie sie hier beschrieben ist, tatsächlich ausführt und sich Geld auszahlen lässt, macht sich strafbar (das gilt schon für den Versuch, es handelt sich um Computerbetrug). Daher weise ich darauf hin, dass diese Anleitung lediglich zu Informationszwecken verfasst wurde und die gravierenden Sicherheitslücken in Pfandautomaten dokumentieren soll. Außerdem gelten die Dinge, die dokumentiert sind, vielleicht nicht für alle Pfandsysteme, und dann wird man so oder so erwischt und kann sich auf einen Eintrag im Führungszeugnis freuen. Nun zum spannenden Teil!

Der Fall

Als ich neulich im Hackerspace war und das RFID-Bezahlsystem auf einem Festival reverse engineeren wollte (dazu später mehr), erzählte mir einer der Anwesenden, dass er gerade etwas ähnliches tun würde. Ihm war aufgefallen, dass die Selbstbedienungskasse einer größeren Supermarktkette sofort gesperrt wird, wenn man einen Pfandbon einlöst. Eine Kassiererin taucht auf, reißt einem das Ding aus der Hand und muss die Kasse manuell wieder freischalten. Das ließ eigentlich nur einen Schluss zu: Es war möglich, die Pfandbons mehrfach einzulesen. Dies wiederum sprach dafür, dass die Automaten nicht mit dem Warensystem der Kasse verbunden waren, sondern Wertmarken druckten, die nicht zentral gespeichert und abgeglichen wurden. Somit besteht eine eklatante Lücke im System, die ein Angreifer für sich nutzen kann, denn Pfandbons kann man deutlich leichter und billiger fälschen als 20€-Scheine, die mittlerweile die meistgefälschte Banknote sind, und ~20€ sind keine unüblichen Pfandbeträge.

Reverse Engineering für Barcodes

Wenn man genügend krimin…kreative Energie hat, kann man sich nun daran machen, das System mit einfachsten Mitteln auszutricksen. Wir beschauten also mehrere Pfandbons mit unterschiedlichen Beträgen aus zwei Automaten der selben Filiale. Zuerst stellten wir den Typ des Barcodes fest, was eine handelsübliche Scanner-App für das Handy erledigt, sonst sucht man eben über Tabelle. Dann guckt man, welche Zahlen gleich bleiben und welche Zahlen sich wie verändern. Daraus konnten wir ablesen, wofür die Zahlenreihen jeweils stehen. Ein eindimensionaler Barcode codiert mit Balken, deren Abstände und Breite vom Lesegerät gemessen werden, die Ziffern von 0-9, das ist kein Hexenwerk und kann mittlerweile wie gesagt von jeder Handycam ausgelesen und dechiffriert werden. Beim Betrachten der unterschiedlichen Ziffernreihen stellt man dann Folgendes fest:

  1. Kennzeichnung als „andere Ware oder Dienstleistung“
  2. Statische Automatennummer
  3. Dynamische und fortlaufende Pfandbonnummer
  4. Reihe auffüllender Nullen
  5. Pfandbetrag im Klartext/Cent
  6. Vermutlich Filialnummer
  7. Prüfzahl

Punkt 1, 2, 4 und 6 bringt man durch das Drucken eines üblichen Pfandbons in Erfahrung. Nummer 3 kann man sich einfach ausdenken, sofern man in der richtigen Reichweite bleibt, die man ebenfalls aus einem Pfandbon ablesen kann. Die Prüfziffer/Zahl 7 kann über einen Algorithmus, den jeder in Wikipedia nachlesen kann oder im Studium programmieren muss, leicht berechnet werden. Jetzt fehlt nur noch unser Pfandbetrag, Nummer 5: Der Fantasie sind nur Grenzen bis zur Anzahl der auffüllenden Nullen gesetzt, allerdings sollte man sich in einem realistischen, aber lohnenswerten Rahmen bewegen, irgendwas zwischen 10-20€. Obwohl ich gerne mal das Gesicht einer Kassiererin sehen würde, wenn sie 432.567,25€ auszahlen soll.

Herstellung eigener Barcodes und Pfandbons

Jeder kann Barcodes selbst erstellen, dafür gibt es zahlreiche offene Bibliotheken für alle möglichen Sprachen, hier wäre eine für Javascript. Die bringen wir im Grafikprogramm unserer Wahl nur noch auf Wunschgröße. Die restlichen grafischen Elemente kopieren wir aus einem gescanten Pfandbon. Das ganze drucken wir natürlich nicht auf einem normalen Drucker. Bons werden in der Regel von Thermodruckern beschrieben. Üblich sind Preise von 120-200€, es gibt allerdings bereits Modelle für 18.99€, das war der günstigste Preis, den ich auf die Schnelle gefunden habe. Wir schustern alles in GIMP zusammen, klicken einmal auf „Print“, und schon haben wir unsere eigene Bundesbank für Flaschensammler.

Risiken für den Angreifer

Das erste Risiko besteht darin, dass der Pfandbon als Fälschung erkannt wird. Einer Selbstbedienungskasse würde das nie auffallen, einer Kassiererin möglicherweise schon. Deshalb nutzen viele Supermärkte inzwischen Rollen mit Wasserzeichen. Deren Fälschungssicherheit gucke ich mir bei Gelegenheit mal an. An Originale zu kommen dürfte allerdings nicht so schwierig sein, aber die Anleitung dazu unterlasse ich an dieser Stelle (Hint: Die Dinger müssen ja auch gewartet werden, und wo die Rollen im Supermarkt liegen, entgeht keinem aufmerksamen Beobachter). „Unser“ Supermarkt verwendete zu allem Überfluss Blankopapier.

Das zweite Problem ist Videoüberwachung. Vermutlich kann die Uhrzeit ermittelt werden, zu der ein entsprechender Pfandbon eingelöst wurde. Dann muss man nur noch die Überwachungskameras zum entsprechenden Zeitpunkt sichten. Das kann man mehr oder weniger raffiniert schwieriger machen, unmöglich wird die Identifikation nicht.

Schutz vor dem Angriff

Der sicherste Schutz wäre es, die Pfandautomaten direkt an das Warensystem anzuschließen. Wird ein Pfandbon ausgestellt, wird dessen Ziffernreihe gespeichert und an der Kasse abgeglichen und für ungültig erklärt, bzw. überhaupt nicht angenommen, wenn die Ziffernreihe nicht hinterlegt ist.

Zudem kann die lange Reihe an Nullen auch genutzt werden, um eine Zahl zu hinterlegen, die aus den anderen Daten errechnet wird. Reverse Engineering wäre auch hier möglich, aber mit deutlich höherem Aufwand verbunden als im bestehenden System.

Was für Unsinn kann man noch mit Barcodes anstellen?

Im Zuge weiterer Recherchen stellte ich fest, dass wir natürlich nicht die Einzigen waren, die auf solche Ideen gekommen waren. Es scheint, als wären darüber hinaus unter anderem Injection und Buffer Overflow Attacken möglich. Nach Sicht dieses hochinformativen Vortrages auf der DEFCON 16 kam mir eine Idee, wie man Pfandautomaten permanent erneut lahmlegen und somit untauglich für den Betrieb machen könnte. Aber das fällt unter „sinnbefreiter Vandalismus um seiner selbst Willen“, daher dokumentiere ich das nicht. Dass es funktioniert, habe ich bereits getestet, aber anschließend den Stecker gezogen und den Automaten ohne das Sabotageelement neu gestartet, es ist also kein Schaden entstanden.

Happy Hacking und macht keinen Blödsinn!

 

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*