- Bei der Zerlegung und Firmware-Analyse des in der Schweiz eingesetzten Worldline Yomani XR-Zahlungsterminals zeigte sich, dass über eine über die rückseitige Klappe zugängliche serielle Konsole durch bloßes Eingeben von
rooteine Root-Shell erreichbar war - Das Terminal verfügte über Tamper-Schutz, der das Öffnen des Gehäuses, das Trennen von PCB-Kontakten, das Durchschneiden von Zickzack-Leiterbahnen und Beschädigungen der Flex-PCB rund um den Kartenleser erkennt, doch der exponierte Debug-Port stellte einen separaten Angriffsweg dar
- Die aus dem Onboard-Flash extrahierte Firmware enthielt ein unverschlüsseltes Dateisystem und lief auf Basis von Linux-Kernel 3.6, Buildroot 2010.02, BusyBox, uClibc und dem Custom-Bootloader Booter v1.7
- Sicherheitsfunktionen wie Karte, PIN, Bildschirm und Keypad scheinen von einem separaten Prozessor
mp1und dem verschlüsselten sowie signiertenmp1.imgübernommen zu werden; Hinweise auf direkt aus Linuxmp2möglichen Zugriff wurden nicht gefunden - Die anfällige Firmware-Version konnte nicht eindeutig bestimmt werden, und es gab auch Geräte mit deaktiviertem Root-Login, doch in Umgebungen, in denen ein Terminal kurzzeitig physisch exklusiv verfügbar ist, bleibt eine unnötig große Angriffsfläche bestehen
Analyseziel: Worldline Yomani XR
- Untersucht wurde ein in der Schweiz weit verbreitetes Worldline Yomani XR-Zahlungsterminal
- Da weder die UI-Prüfung nach dem Booten noch Port-Scans auffällige Ergebnisse lieferten, wurde das Gerät hardwareseitig zerlegt
- Das Innere besteht aus mehreren PCBs
- kleine Platine für externe Anschlüsse
- Hauptplatine
- vertikale Platine mit montiertem Kartenslot
- Der Main-SoC scheint ein Dual-Core-Arm-basierter Custom-ASIC zu sein, der in der Firmware unter dem Codenamen „Samoa II“ auftaucht
- Laut Worldline-Dokumentation handelt es sich bei diesem Chip nicht um ein Rebranding eines Standardchips, sondern um einen Custom-ASIC
- Neben dem SoC befinden sich ein kleiner externer Flash und RAM
Struktur des Hardware-Tamper-Schutzes
- Ein üblicher Gehäuseöffnungsschalter wurde nicht gefunden; stattdessen diente das board-to-board interconnect selbst als Öffnungserkennung
- Zwischen den Platinen befinden sich druckempfindliche Zebra-Strips, sodass der Kontakt nur bei fest verschraubten Platinen erhalten bleibt
- Schon das Lösen einiger Schrauben kann den Kontakt unterbrechen und ein Tamper-Ereignis auslösen
- Da die Erkennung auch bei getrenntem Strom funktionieren muss, wird eine Coin-Cell-Batterie verwendet
- Empfindliche PCB-Bereiche sind mit zickzackförmigen Tamper-Erkennungsleiterbahnen bedeckt
- Bereits das Durchtrennen nur einer einzigen Kupferleiterbahn bei einem physischen Eingriff kann eine Tamper-Erkennung auslösen
- Der Kartenslot sitzt in einem separaten internen Gehäuse, und eine ihn umgebende Flex-PCB dient als Tamper-Schutz
- Nach dem Zusammenbau zeigte das Terminal nur noch einen großen roten Bildschirm mit „TAMPER DETECTED“ und schien in diesem Modus nicht auf externe Eingaben zu reagieren
Flash-Extraktion und Wiederherstellung des Dateisystems
- Da die Laufzeituntersuchung blockiert war, wurde der Onboard-Flash-Chip ausgelötet, per Kabel angebunden und ausgelesen
- Der Dump war entgegen der Erwartung insgesamt nicht verschlüsselt
- Im Flash wurde eine ungewöhnliche ECC-Anordnung verwendet
- Es handelte sich nicht um das Standardlayout mit 2048 Byte Payload + 64 Byte ECC/Spare
- Es gab drei Daten-Chunks mit je 694 Byte, hinter denen jeweils 10 ECC-Bytes folgten
- Die letzten 16 Byte des Spare-Areas wirkten wie YAFFS2-Dateisystem-Metadaten
- Da der Metadatenbereich kleiner war als bei gewöhnlichem YAFFS2, musste das Dateisystem gepatcht werden, um eine kleinere Metadatenstruktur zu verarbeiten
- Nach der Implementierung eines kompatiblen Dateisystem-Readers konnte der Inhalt des Dateisystems erfolgreich extrahiert werden
Veraltetes Linux-basiertes System
- Das extrahierte Dateisystem bestätigte, dass das Terminal Linux ausführt
- Das System enthält veraltete Komponenten
- Linux kernel 3.6
- Buildroot 2010.02
- Build vom Februar 2023
- Custom-Bootloader
Booter v1.7 - init-Skript, BusyBox, uClibc
libcrypt0.9.26
- Wie aktuell die gedumpte Firmware-Version war, ließ sich nicht verifizieren, sie muss jedoch nach Februar 2023 veröffentlicht worden sein
Root-Shell ohne Passwort
- Nachdem der Flash-Chip per Kabel wieder angeschlossen worden war, bootete das Terminal trotz Tamper-Meldung erneut
- Um das Linux-Boot-Log zu sehen, wurde der Bereich um den Debug-Connector mit einem Logic Analyzer untersucht; auf einem Pad des unbestückten Debug-Connectors wurde Aktivität gefunden
- Auf der seriellen Konsole erschien zusammen mit dem Linux-Boot-Log ein Login-Prompt
- Im Boot-Log stand „Reset reason: Tamper“
- Außerdem erschienen Logs wie
dropbear is not present, Prüfung auf Firmware-Updates und Start eines Application-Monitoring-Daemons - Am Ende erschien der Prompt
samoa login:
- Nach Eingabe von
rootals Login erschien ohne Passwort der Shell-Prompt~ # - Für diesen Zugriff waren weder eine Exploit-Kette noch Brute-Force-Passwort-Cracking nötig
Von außen zugänglicher Debug-Port
- Der Zugriff auf die Root-Shell war nicht nur auf Fälle mit geöffnetem Terminal beschränkt
- Der serial port war von außen über eine kleine Klappe auf der Rückseite des Terminals zugänglich
- So ließ sich eine Verbindung zum Debug-Connector herstellen, ohne das Gerät zu öffnen und den Tamper-Schutz auszulösen
- Wenn man das Terminal kurzzeitig exklusiv in Besitz hat, erscheint ein Szenario möglich, in dem man sich mit dem seriellen Port verbindet, sich einloggt, Malware platziert und wieder verschwindet
Aufgabentrennung zwischen Sicherheitsprozessor und Linux
- Die exponierte Root-Shell bedeutet nicht automatisch Zugriff auf Karten- oder PIN-Daten
- Das Linux-System ist nur ein Teil der Gesamtarchitektur; es wurden keine Hinweise gefunden, dass Display, Keypad oder Kartenleser direkt aus Linux heraus zugänglich wären
- Auch die Bildschirmausgabe schien nicht direkt über einen Framebuffer-Treiber zu laufen; stattdessen wurden Strings an das Binary
display_toolübergeben, das dann Interprozessor-Nachrichten sendete - Sicherheitsrelevante Funktionen wie Karte, PIN-Eingabe und Bildschirmanzeige scheinen von einem separaten Prozessor
mp1verarbeitet zu werden - Linux auf dem zweiten Prozessor
mp2übernimmt Networking, Updates und Business-Logik
Boot-Ablauf und gesichertes Image
- Der Linux-Core scheint unabhängig vom Tamper-Status immer zu booten
- Anschließend lädt Linux den Secure-Bootloader
loadercodein den Speicher loadercodeprüft dann, ob der Tamper-Schutz ausgelöst wurde- Wenn Tamper erkannt wurde, zeigt es den roten Bildschirm an
- Wenn kein Problem vorliegt, bootet es das eigentliche Secure-Image
mp1.img
mp1.imgbefindet sich im Linux-Dateisystem, scheint aber verschlüsselt und von zwei Entitäten signiert zu sein- Das Secure-Image, das Karte, Display und Keypad verarbeitet, war angemessen verschlüsselt und signiert
Offenlegungszeitplan und verbleibende Unsicherheiten
- Der Offenlegungszeitplan wurde wie folgt festgehalten
-
- November 2024: Root-Shell entdeckt
-
- November 2024: Hersteller informiert und geplante Offenlegung nach 90 Tagen angekündigt
-
- November 2024: Hersteller bestätigt den Eingang der Meldung
-
- Juni 2025: Veröffentlichung
-
- Die exponierte Root-Shell stellt eine unnötig große Angriffsfläche dar, doch es wurden keine Hinweise gefunden, dass darüber sensible Daten wie Karteninformationen kompromittiert werden konnten
- Welche Firmware-Versionen anfällig sind, konnte nicht abschließend bestimmt werden
- Während der Untersuchung wurden auch Geräte mit deaktiviertem Root-Login gefunden
- Es konnte nicht geklärt werden, ab wann das Debug-Feature in Production-Firmware enthalten war oder ob der Hersteller das Problem intern bereits entdeckt und behoben hatte
1 Kommentare
Meinungen auf Hacker News
Mit einem USB-Kartenleser für 2 Dollar kann man gefälschte Debit-/Kreditkartentransaktionen erzeugen.
Die Spezifikationen sind alle öffentlich, und das Protokoll ist ebenfalls dokumentiert. Soweit ich mich erinnere, hat das PDF etwa 5000 Seiten und ist sehr mühsam zu lesen.
Um diese Transaktion aber zu verifizieren, muss man sie über das Internet an die Bank schicken, und dann könnten Bundesbehörden/FBI oder Ähnliches vor der Tür stehen.
Im Kartenleser selbst gibt es kaum echten Schutz; meist läuft darauf ein kleines Linux mit miserablen Passwörtern. Der Schutz ergibt sich aus Verträgen und Regulierung zwischen Händler und Bank.
noexecgesetzt.Root-Login ist deaktiviert, es wird ein stark abgespecktes busybox verwendet, und die Schlüssel werden beim Booten aus einem Sicherheitsbereich geladen. Das Injizieren des Master Keys ist nur beim Laden im Werk möglich, auch der Bootvorgang selbst ist bis zu einem gewissen Grad abgesichert, und wenn Manipulation erkannt wird, wird der Chip geleert.
Bei einem billigen, nicht EMV-zertifizierten Android-Terminal aus Asien ist es natürlich gut möglich, dass darauf ein Standard-Linux mit les-/schreibbarem Root-Dateisystem, Root-Login und sogar aktiviertem sudo für den App-ausführenden Benutzer läuft. Manipulationserkennung gibt es dann möglicherweise auch nicht, Screen-Casting ist nicht gesperrt, Ports lassen sich öffnen, und busybox kann fast vollständig vorhanden sein.
Aus meiner Sicht als jemand, der über Jahre EMV-Anwendungen für Kartenakzeptanz entwickelt hat und das gelegentlich immer noch tut: Selbst der Entwicklungsmodus erfordert, dass der Vendor eine Entwickler-ID bereitstellt, und ist ziemlich stark verriegelt.
Deshalb sind auch Verschwörungstheorien falsch, nach denen jemand mit einem tragbaren Kartenleser herumläuft und von kontaktlosen Karten Geld stiehlt. Solche Transaktionen kann man zwar erzeugen, aber das Problem ist, was danach passiert und welche Einrichtung vorher nötig ist.
Es ist nicht einmal sicher, ob man das Geld herausbekäme, bevor man erwischt und gesperrt wird. Heutzutage haben viele Leute Push-Benachrichtigungen für Transaktionen aktiviert, daher dürfte es noch schwieriger sein.
Wenn diese Schlüssel abfließen, kann jemand legitime Transaktionen vortäuschen.
In diesem konkreten Fall scheint das schwierig oder unmöglich zu sein, aber genau deshalb ist Forschung in diesem Bereich sinnvoll.
Ich weiß zwar nicht, wonach ich suchen müsste, war aber versucht, einen meiner Stripe M2 Reader zu öffnen und mir das Innere anzusehen.
Das Problem ist, dass 7 der 36 gekauften Reader „gestorben“ sind. 2 halten die Ladung nicht, 1 kann kein NFC scannen, und 4 zeigen „tampered“ an. Oberflächlich betrachtet ist die Ausfallquote schlecht, aber für das Gesamtbild muss man Nutzungshäufigkeit und Alter berücksichtigen.
Nur fällt die Antwort darauf noch schlechter aus. Die Geräte sind 1 bis 3 Jahre alt und wurden insgesamt höchstens 9 Tage genutzt. Bei insgesamt 9 Nutzungstagen sind also 7 von 36 Geräten auf irgendeine Weise ausgefallen. Beim Transport werden sie außerdem alle in einem Hartschalenkoffer mit Schaumstoffeinlage und separatem Slot pro Reader aufbewahrt.
Deshalb bin ich kein großer Fan der M2 Reader, aber sie sind für mich immer noch die beste Option.
[0] Als Hintergrund: Unser Unternehmen wickelt Zahlungen auf Festivals ab. Wir fahren zu Veranstaltungsorten und verarbeiten Vor-Ort-Zahlungen mit iPads und M2 Readern; die meisten Zahlungen passieren im Web/in der App. Daher gibt es über 3 Jahre hinweg so wenige „Nutzungstage“.
Und die Manipulationserkennung braucht wahrscheinlich ebenfalls einen funktionsfähigen Akku.
Es könnte so aufgebaut sein, dass eine Manipulationssiegelung beim Auslösen eine Root-Shell öffnet.
Also entweder befindet sich das System in einem sicheren Modus mit den für den Betrieb nötigen kryptografischen Schlüsseln, oder in einem unsicheren Modus mit geöffneter Root-Shell für Debugging und Fehleranalyse, wobei beim Übergang wichtige private Schlüssel gelöscht werden.
Ich frage mich, ob man tatsächlich an so ein Terminal kommen kann. Wenn sie gerade ersetzt werden und verschwinden, ist es vielleicht gar nicht so schwer, eines gebraucht zu finden.
Für Leute, die sich leicht aufregen, noch der Hinweis: Dort steht, dass „die offengelegte Root-Shell kein so großes Risiko zu sein scheint, wie zunächst befürchtet. Es wurden keine Hinweise gefunden, dass sensible Daten wie Karteninformationen auf diese Weise kompromittiert werden könnten.“
Für Sicherheitsarchitekten ist es trotzdem eine gute Lektüre.
In der Sicherheit gilt physischer Zugriff, und in geringerem Maße auch Root-Zugriff, praktisch fast als erfolgreicher Hack.
Wenn das kompromittierte Linux entscheidet, ob es den Code für den „kompromittierten Modus“ oder das mp1-Sicherheitssystem lädt, wirkt das wie ein untersuchenswerter Pfad.
Der Bootloader selbst soll zwar sicher sein, aber wenn er je nach tatsächlichem Ausführungsort in die kompromittierte Umgebung geladen wird, könnte das wenig bedeuten.
Man könnte den Co-Prozessor als eine Art Secure Enclave betrachten, aber dass Linux einen separaten Bootloader laden und ausführen kann, ist bedenklich.
loadercodezu manipulieren, aber damit bootete es nicht.Daher vermute ich, dass eine dritte Instanz, vermutlich das Boot-ROM, ihn verifiziert.
Außerdem scheint Linux unabhängig vom Manipulationszustand immer
loadercodeundmp1.imgzu laden. Der je nach Manipulationszustand unterschiedliche Codepfad scheint innerhalb vonloadercodeausgewählt zu werden, der durch Integritätsschutz abgesichert ist.Wenn man den einfachen Modus will, sollte man sich die heutigen Android-basierten Kartenterminals ansehen.
Vor allem, weil die PIN direkt auf dem Bildschirm eingegeben wird, dürfte das deutlich lohnender sein.
Bei der Eingabe sensibler Daten wie PIN oder PAN wird die Ausgabe des Touch-Controllers direkt zum Sicherheitsprozessor geroutet und umgeht dabei das Android-artige Betriebssystem, das für die GUI zuständig ist.
Deshalb können Zwischenanwendungen, die bei solchen Angriffen zugänglich sind, die PIN nicht sehen.
Moderne Karten führen viele kryptografische Operationen im Inneren der Karte aus, um solche Angriffe zu verhindern.
Dieser Angriff dürfte höchstens bei Terminals funktionieren, bei denen von den Zahlungsoptionen nur noch der Magnetstreifenleser aktiv ist; bei solchen Terminals sollten die Skimmer-Warnlampen schon leuchten, bevor man überhaupt eine PIN-Abfrage sieht.
Großartig. Ich mag es, darüber nachzudenken, wie man solche umfassenden Hardware-Beschränkungen wie Manipulationsschutz umgehen und ausnutzen kann, war aber bisher davon ausgegangen, dass es vorbei ist, sobald er ausgelöst wird.
Das ist aber offenbar nicht zwingend so; es blieben immer noch viele interessante Bereiche zum Hineinschauen. Dass der Sicherheitsteil ordentlich deaktiviert wird, ist allerdings selbstverständlich. Andernfalls hätte ich jegliches Vertrauen in die Entwickler verloren.
Es sieht so aus, als würden nur Textstrings an ein Binary namens
display_toolübergeben, das dann offenbar Nachrichten zwischen Prozessoren verschickt. Beim Tastenfeld und Kartenleser ist es ähnlich. Ich habe keinen Hinweis gefunden, dass diese Peripherie direkt von Linux aus zugänglich ist.Stattdessen scheint ein völlig separater Prozessor namens
mp1die „sicheren“ Aufgaben zu übernehmen, etwa Kartenverarbeitung, PIN-Eingabe und die Anzeige von Bildschirminformationen. Das „nicht sichere“ Linux, das auf dem zweiten Prozessormp2läuft, kümmert sich nur um Networking, Updates und Business-Logik.Ich hoffe trotzdem, dass die Architektur nur erlaubt zu sehen, dass eine Manipulation stattgefunden hat. Andernfalls könnte man sich erst eine Root-Shell verschaffen und dann eine Chance bekommen, zu verhindern, dass ein Manipulationsereignis die Sicherheitsschlüssel löscht.
Beim Lesen über all die Manipulationserkennung des Geräts habe ich mich gefragt, wie man den Manipulationsmodus wohl am einfachsten auslöst.
Wenn man am Ende nur ein paar solcher Geräte in diesen Zustand bringen kann, wäre das für ein Geschäft, in dem die meisten oder alle Zahlungen über diese Terminals laufen, ein effizienter Denial-of-Service-Angriff.
Es ist interessant, sich solche Geräte anzusehen, aber ich verstehe nicht, warum man es sofort geöffnet und damit den Manipulationszustand ausgelöst hat. Wusste man nicht, dass die meisten Lesegeräte so etwas haben?
Die eigentlichen Tests im Manipulationszustand könnten bedeutungslos sein. Es ist durchaus möglich, dass bei einem Manipulationszustand zu Initialisierungszwecken eine Shell geöffnet wird.
Meiner Ansicht nach sollte das Öffnen des Geräts etwas sein, das man ganz am Ende versucht.
Sonst tappt man zu sehr im Dunkeln. Im Rückblick hätte ich natürlich auch einfach den Debug-Connector anzapfen und fertig sein können.
Und ich habe auch auf einem zweiten, nicht manipulierten Gerät eine Shell bekommen.
Solche Geräte gibt es überall in Europa. Bei der Schweiz bin ich mir nicht sicher, aber in weiten Teilen Europas, die ich kenne, besitzt oder nutzt man Kreditkarten eigentlich nicht besonders viel.
Ich würde das POS nennen, also ein Point-of-Sale-System. Solche Geräte können alle möglichen Arten von Karten lesen. Jedenfalls ein guter Artikel.
Ich sehe auch nicht den Reiz, noch mehr Dinge ins Handy oder in die Smartwatch zu packen. Ich bevorzuge mechanische Uhren, und wenn ich mein Handy verliere, ist das aus Datenschutzsicht ohnehin schon Katastrophe genug. Aber klar, das ist nur bei mir so.