How-to: Lesen Sie eine FedEx Kinko’s Smart Card (SLE4442)

Unsere Geldbörsen füllen sich mit SIM- und RFID-Karten auf, die ausgeblendete Informationen enthalten. Mit unserem neuesten Projekt, der seriellen Bus-Pirat-Universal-Schnittstelle, können wir den Speicher von vielen gängigen Chipkarten ausführen. In der heutigen How-to zeigen wir Ihnen, wie Sie gemeinsame Smart Cards anlegen, und Sie durch die auf der Prepaid-Wertekarte von FedEx Kinko gespeicherten Daten gehen.

Hintergrund

Die Prepaid-Karte von FedEx Kinko ist eigentlich eine SLE4442-Smart-Karte. Es gibt nichts in der SLE4442-Geheimnis, es ist im Datenblatt (PDF) vollständig dokumentiert, und Sie können leere Karten im Web kaufen.

Die Karte ist offen lesbar, wir können den Inhalt ohne ein bösartiges Eindringen ansehen. Es ist von einem Drei-Byte-Passwort vor Schreibern geschützt, mit einem ‘drei Streiks, das Sie rausmachen, der die Karte nach drei fehlgeschlagenen Kennwortversuchen nutzlos macht.

Aufgrund seiner weit verbreiteten Verwendung in Kinko- und anderen Kapazitäten war das SLE4442 das Ziel mehrerer hochkarätiger Hacks. Bei der ’06 ToorCon, [Bunnie] und [Chris Tarnovsky] veranstaltete sich eine Diskussion auf der Karte. [Chris] untersuchte das Silizium-Matrize und schlug vor, dass das Kurzschluss einer Spur die Sicherheitsmaßnahmen besiegen könnte. Sie können hochauflösende Bilder der Matrize auf seiner Website sehen. [Strom Carlson] ging direkt auf die Quelle und schnappte das Kennwort mit einem logischen Analysator, wie in seiner berühmten ’06-Defcon-Präsentation dokumentiert. Die Karte macht sogar Auftritte in Kunstwerken.

Wir planen nicht, böswillig auf die Karte eindringen, aber wir können den Inhalt immer noch anschauen und demonstrieren, wie Sie willkürliche Protokolle mit unserem neuesten Projekt, dem Bus-Pirat, einstellen können.

Anschließen an die SLE4442

Stift
Funktion
Bus-Piraten-Pin.

1.
+ 5 volts.
+ 5Volt-Versorgung.

2.
Zurücksetzen
AUX.

3
Uhr
SCL.

4.
Daten io.
Sda

5.
N / c.

6.
Boden
Boden

Greifen Sie das SLE4442-Datenblatt (PDF), wenn Sie es noch nicht getan haben. Die PINOUT ist in dem obigen Bild dargestellt. Wenn Sie Schwierigkeiten haben, die Karte zu orientieren, beachten Sie, dass das große Zentralkissen mit Masse verbunden ist.

Die Karte erfordert 5Volts DC (Datasheet Page 27, Tabelle 3.2.2), wir haben die praktische 5Volt-Versorgung des Bus-Pirats verwendet. Die Schnittstelle bei fünf Volt ist kein Problem, da die Bus-Pirateneingänge alle 5Volt tolerant sind.

Eine Zwei-Draht-Schnittstelle wird mit einer Taktlinie und einer bidirektionalen Datenleitung verwendet. Wir haben diese mit den SDA- und SCL-Pins des Bus-Piraten angeschlossen. Ein drittes Signal, Reset, ist erforderlich, um den Chip initialisieren; Wir haben den Hilfsausgang des Bus-Piraten verwendet, um die Reset-Leitung zu steuern. Die maximale Taktfrequenz, die wir mit der Schnittstelle verwenden können, ist 50 kHz mit einem mindestens 7 kHz angegebenen Minimum (Seite 28, Tabelle 3.2.4: FCLK). Das rohe 2-Draht-Protokoll des Bus-Piraten läuft bei etwa 5 kHz, aber wir hatten keine Probleme, das Gerät zu verbinden.

Der SLE4442 hat offene Kollektorausgänge und hängt von Pull-Up-Widerständen ab, um den Bus hoch zu halten. Anstatt den Datenstift zwischen Boden und 5 VOLLT zu schalten, wechselt er zwischen Boden- und High-Impedanz-Zuständen. Die hohe Impedanz bedeutet, dass der Chip keinen Zustand in der Zeile ausübt, lässt es wie ein Mikrocontroller-Eingangspin schwimmen.

Jede der Signalleitungen muss mit einem 2K-10K-Widerstand auf 5VOLTS gezogen werden, der Wert ist nicht besonders wichtig. Ohne den Pull-Up-Widerstand sehen wir nie etwas anderes als 0 (Boden) im Bus, da der SLE4442 keine eigene Spannung ausübt. Ein Vorteil dieser Technik ist, dass der Bus-Pirat, der nur bei 3,3Volt umschaltet, mit dem SLE4442 bei einem vollen 5-Volt-Taucher mit der minimalen Spannung von 3,5volt für einen hohen Niveau spricht (Datenblatt, Seite 27, Tabelle 3.2.3 : Vih).

Die Karte initialisieren

Bevor wir Daten von der Karte lesen können, müssen wir sie initialisieren. Dies erfolgt mit einer Norm ISO 7816-3-Antwort auf den Rücksetzbefehl (ATR). Nach der Initialisierung können wir mit einem einfachen zwei Drahtprotokoll von der Karte lesen.

RAW-2-Drahtmodus einrichten

Die Schnittstelle teilt einige Merkmale mit I2C, aber es ist nicht kompatibel. Wir haben den RAW 2-Bus-Modus des Bus-Piraten verwendet, um das Gerät angrenzt.

Raw2> M.
1. SPI
2. I2C.
3. UART.
4. RAW 2 Draht
5. RAW 3 Draht
Modus> 4 <- RAW 2 -Kabel-Bus-Modus 900-Modus-Set. ... Geschwindigkeit> 1 <- Die Geschwindigkeitseinstellung wird in der aktuellen Firmware ignoriert 901 Geschwindigkeits-Set. 1. High-Z-Ausgänge (H = Eingang, L = GND) 2. Normale Ausgänge (H = VCC, L = GND) Modus> 1 <- hoher Impedanz-Ausgangstyp 9xx-Ausgang Hochz 402 RAW2Wire Ready, P für Pullups Raw2>

Der Bus-Pirat verfügt über Bord-Pull-Up-Widerstände, aber sie ziehen nur auf 3.3Volts. Wir müssen externe Pull-Ups auf 5Volts verwenden, wie im Bild gezeigt. Der High-Z-Ausgabemodus ist mit dem Bus kompatibel, normale Ausgänge würden 3.3Volts in den Bus einfügen und potenziell etwas beschädigen.

Raw2> l <-configure MSB / LSB 1. MSB zuerst 2. LSB zuerst Modus> 2 <- LSB zuerst 9xx lsb: am wenigsten sig bis zuerst Raw2>

Die Karte liest und schreibt jedes Byte am wenigsten signifikante Bit zuerst (Datenblatt Seite 10). Wir verwenden Menüoption L, um den Datenmodus zuerst auf LSB einzustellen.

Senden Sie 7816-3 ISO-Antwort auf den Zurücksetzen des Befehls

ISO 7816-3 “Antwort auf Reset” ist ein standardisierter Befehl, der unter vielen Smartcards verwendet wird. Die ATR-Sequenz ist oben dargestellt: Reset wird hoch gehalten, ein Taktimpuls wird gesendet, Reset ist freigebenD. Die nächsten 32 Uhrimpulse (4 Bytes) lesen einen generischen ATR-Header von der Karte. Der Header enthält Informationen zum Kartentyp und des Protokolls. Multi-Card-Chipkartenleser verwenden dies, um zu bestimmen, wie Sie jede Karte lesen können.

Raw2> @ ^ ARRRRR <- Aux High (Highz), Uhrakt, Aux Low, 4 Bytes gelesen 952 Aux High IMP, Lesen: 1 4xx Raw2Wire 0x01 Uhr Ticks 950 aux niedrig. 430 Raw2wire Lesen: 0xa2 <-begin ATR Header Bytes 430 Raw2wire Lesen: 0x13 430 Raw2wire Lesen: 0x10 430 Raw2wire Lesen: 0x91 Raw2>

Wir stellen den Befehl @ ^ ARRRRR auf den Bus-Pirat aus. @ Setzt den Hilfsstift in den Eingangsmodus mit hoher Impedanz, der Pull-Up-Widerstand hält den Reset bei 5 volts. ^ Gibt einen Taktimpuls mit Verzögerung aus. A gibt den Hilfsstift zurück, um den Ausgang auszugeben und die Reset-Leitung am Boden zu hält.

R gibt 8 Uhrenimpulse aus und zeigt die zurückgegebenen Bits als Byte an. Dies ist eine Instanz, in der das Protokoll mit I2C nicht kompatibel ist. I2c enthält ein zusätzliches Bestätigungsbit zwischen jedem Byte, wobei die SLE4442-Ausgänge 32Bits aufeinanderfolgend ausgeführt werden.

Seite 25 des Datenblatts erläutert den Header ISO7816-3. Es ist am einfachsten, in Binär zu interpretieren. Anstatt alles in die Binäre umzuwandeln, setzen wir den Bus-Pirat in den binären Anzeigemodus ein und erteilte einen anderen ATR-Befehl.

RAW2> O <-Setup Der Ausgabemodus 1. Hex. 2. Dezember 3. Bin. 4. RAW. Ausgabemodus> 3 <-Show-Zahlen in Binär 903 Ausgangsmodus-Set RAW2> @ ^ ARRRRR <-anöherer ATR-Befehl 952 Aux High IMP, Lesen: 1 4xx Raw2wire 0B00000001 Uhr Ticks 950 aux niedrig. 430 RAW2WIRE Lesen: 0B10100010 <-0XA2 430 Raw2wire Lesen: 0B00010011 <-0x13 430 Raw2wire Lesen: 0B00010000 <-0x10 430 Raw2wire Lesen: 0B10010001 <-0x91 Raw2>

Die ersten 2 Bytes sind Protokollkopfbytes gemäß ISO 7816-3 (Datenblatt Page 25).

Byte 1 identifiziert den Protokolltyp.

0b10100010.
7: 4 – Protokolltyp (1010 = 2 Draht)
3: 3 – RFU (0)
2: 0 – Strukturkennung (010 = allgemein)

Byte 2, Protokollparameter erzählt uns von der Karte, wenn wir kein Datenblatt haben.

0b00010011.
7: 7 – Unterstützt zufällige Leselängen (0 = Nein, zum Ende lesen)
6: 3 – Dateneinheiten (0010 = 256Units)
2: 0 – Dateneinheitsbits (011 = 8Bit pro Gerät)

Aus dem Header können wir sagen, dass der Protokolltyp 10 ist, ein zweier Drahtbus. Die Karte muss bis zum Ende gelesen werden, bevor er einen neuen Befehl akzeptiert. Es hat 8Bit zu einer Einheit und 256-Leuten; 256 BYTES TOTAL LAGERUNG. Die letzten beiden Bytes sind 7814-4 Daten, die uninteressant erscheint (siehe Datenblatt Seite 26).

Haupt-Hauptspeicher (256 Bytes)

Sobald die Karte zurückgesetzt ist und die ATR-Bytes gelesen werden, können wir Befehle an die Karte senden. Befehle sind drei Bytes lang; Sie beginnen mit einem Startzustand mit I2C-Stil und enden mit einem Haltestand von I2C-Stil. Start- und Anschlagbedingungen können manuell mit \ – / _ \ \ _ / – \ erzeugt werden, aber die RAW-2-Wire-Bibliothek enthält auch die Verknüpfungen {und}. Die Start- und Anschlagbedingungen sind die gleichen wie I2C, aber sie werden an einem anderen Punkt in der Übertragung verwendet.

Der Hauptspeicherbefehl “Hauptspeicher” lautet 0x30, gefolgt von einer Lesestartadresse (0), und ein drittes Byte, das keine Rolle (0xFF) spielt. Nach dem STOP-Zustand gibt die Karte Daten auf jeder Uhr an, bis er das Ende des Speichers erreicht. Wie vom ATR-Header beschrieben, können keine neuen Befehle gesendet werden, bis die Karte den letzten Speicherbyte erreicht. Beginnend bei der Leseadresse 0 dauert es 256 * 8 Uhrimpulse, um den Lesezyklus abzuschließen.

RAW2> {0x30 0 0xFF} 0R255 0R10 <-Command 410 RAW2Wire-Startbedingung (\ - / _ \) 420 RAW2WIRE WRITE: 0x30 420 RAW2WIRE WRITE: 0x00 420 RAW2WIRE WRITE: 0x00 440 RAW2Wire-Stopp-Bedingung (_ / - \) 431 RAW2Wire-Massenlese, 0xFF Bytes: <-Bulk Lesen von 255 Bytes 0xa2 0x13 0x10 0x91 0x46 0xFF 0x81 0x15 0xFF 0x01 0x4b 0x03 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xd2 0x76 0x00 0x00 0x04 0x09 0xFF 0xFF 0xFF 0xFF 0xFF 0x7b 0x14 0xAE 0x47 0xE1 0x7a 0x94 0x3f 0x4c 0x46 0xc6 0x3b 0x00 0x00 0x00 0x00 0x20 0x08 0x03 0x04 0x09 0x ** 0x ** 0x ** 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x30 0x31 0x3 * 0x3 * 0x30 0x30 0x31 0x33 0x3 * 0x3 * 0x3 * 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x43 0x61 0x73 0x68 0x20 0x43 0x75 0x73 0x74 0x6f 0x6d 0x65 0x72 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x39 0x39 0x31 0x31 0x00 0x31 0x30 0x31 0x00 0x30 0x30 0x30 0x30 0x30 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x03 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x20 0x08 0x03 0x04 0x09 0x ** 0x ** 0x ** 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 431 Raw2Wire-Massenlese, 0x0a Bytes: <-Again, um das letzte Byte zu bekommen (256) 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF Raw2>

{Gibt die Bus-Startbedingung aus. 0x30 sendet die Leseadresse, 0 ist das Startbyte, und 0xFF könnte alles sein.} sendet den Bushaltestand. 0R255 Uhren in 255 8bit Bytes und zeigt sie auf dem Bildschirm an. Die Karte hat tatsächlich 256 Bytes des Hauptspeichers, sodass wir einen zusätzlichen Lesebefehl ausgeben, um das letzte Byte zu erhalten, und vergewissern Sie sich, dass der Bus nach dem Lesen nach oben zurückkehrt. Wir können 0R256 nicht verwenden, da der Bus-Pirat keine Dezimalzahlen versteht als 255 (wir sollten das ansprechen).

Was bedeuten die Daten?

Wir haben die Karte entsprechend dem Datenblatt, [STROM]’s Defcon-Präsentation und diesem praktischen Leitfaden (PDF) gesehen.

32 Byte Header …

0xa2 0x13 0x10 0x91 <-Die erster vier Bytes sind eine Wiederholung der ATR-Daten 0x46 0xFF 0x81 0x15 <-Manufacturer Tags, anderer Müll 0xFF 0x01 0x4b 0x03 0x00 <-iccf, IC Card Fabricator ID 0xFF 0xFF 0xFF 0xFF <-ICCN, IC Seriennummer, 0 0xFF 0xFF 0xFF 0xFF <- Misc-Tags und Längen, 0 0xd2 0x76 0x00 0x00 0x04 0x09 <-Application-ID (Kinko's?) 0xFF 0xFF 0xFF 0xFF 0xFF

Leave a Reply

Your email address will not be published.