From 552cfaeb9bd4df332104b970b5350b6ca782fbdb Mon Sep 17 00:00:00 2001 From: hukl Date: Sat, 18 Feb 2012 20:46:54 +0000 Subject: committing page revision 5 --- pages/hackabike.md | 108 +++++++++++++++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 52 deletions(-) (limited to 'pages/hackabike.md') diff --git a/pages/hackabike.md b/pages/hackabike.md index 4f788d47..eeb6a4a2 100644 --- a/pages/hackabike.md +++ b/pages/hackabike.md @@ -1,30 +1,31 @@ -title: hackabike +title: Hack a Bike date: 2009-11-02 01:04:00 -updated: 2009-11-02 01:51:14 +updated: 2012-02-18 20:46:54 author: erdgeist -tags: deutsche bahn, hack, bike, call, avr +tags: deutsche bahn, hack, bike, call, avr, hackabike previewimage: /images/01.jpg Schon immer mal nachts ohne Transportmöglichkeit in einem fremden Bezirk aufgewacht? "Mal schnell" ein Fahrrad benötigt? In Berlin und anderen Großstädten Deutschlands bietet Die Deutsche Bahn mit dem Call-A-Bike Service Abhilfe. -## **Kurzeinführung in das CallABike System** {#kurzeinführung-in-das-callabike-system .quote} +## Kurzeinführung in das Call a Bike System {#kurzeinführung-in-das-call-a-bike-system .quote} Als Kunde ruft man die CallABike-Zentrale und gibt per DTMF-Wahl die vierstellige Radnummer durch. Von der Zentrale erhält man dann den vierstelligen Code, mit dem man das CallABike-Fahrad öffnen kann. Zur Sicherheit wird man nach dem Anruf von der Zentrale zurückgerufen. Die letzten vier Ziffern des Rückrufes enthalten nochmal den Code - annehmen -muss man den Anruf deswegen nicht.\ +muss man den Anruf deswegen nicht. + Jetzt läuft die Uhr und der Kunde muss pro Minute 6 Cent bezahlen (mit Bahncard nur 4 Cent). Wenn der Kunde das CallABike einfach mal schnell abstellen will (z.B. für einen kurzen Einkauf), kann man das CallABike abschließen und im Display auf ‘Nicht Abgeben’ tippen. Es ist sozusagen kurz geparkt. Danach kann man das CallABike mit dem gleichen Code wie beim ersten Mal öffnen. Das kann man so oft wiederholen, wie man möchte. -Die Zeit, die man bezahlen muss, läuft natürlich weiter.\ -\ +Die Zeit, die man bezahlen muss, läuft natürlich weiter. + Wenn der Kunde das CallABike dann endgültig abgeben will, muss er beim Schließen auf ‘Abgeben’ tippen; das CallABike gibt einem dann den Rückgabecode. Mit diesem Code kann man gegenüber der Zentrale @@ -32,15 +33,13 @@ Rückgabecode. Mit diesem Code kann man gegenüber der Zentrale Man ruft jetzt einfach wieder die Zentrale an und gibt den Rückgabecode durch. Danach muss man noch die Straßenecke auf Band sprechen, an der man das CallABike abgestellt hat. Die Mietzeit wird damit dann auch -beendet.\ -\ -Es ist auch möglich, zwei Räder mit einem Anruf auszuleihen oder -abzugeben. Wenn der Kunde in seiner Nähe kein CallABike-Rad findet, kann -er auch die Zentrale anrufen und fragen, wo das nächste CallABike- Rad -steht. Ein Servicemitarbeiter der Bahn schaut dann in der Datenbank nach -und gibt den Standort des nächstgelegenen CallABike-Rads durch.\ -[Offizielle CallABike Webseite](http://www.callabike.de/i_fahrrad.html)\ -\ +beendet. Es ist auch möglich, zwei Räder mit einem Anruf auszuleihen +oder abzugeben. Wenn der Kunde in seiner Nähe kein CallABike-Rad findet, +kann er auch die Zentrale anrufen und fragen, wo das nächste CallABike- +Rad steht. Ein Servicemitarbeiter der Bahn schaut dann in der Datenbank +nach und gibt den Standort des nächstgelegenen CallABike-Rads durch.\ +[Offizielle CallABike Webseite](http://www.callabike.de/i_fahrrad.html) + ..."Es gibt natürlich auch andere Zeitgenossen, die haben, schon aus sportiven Gründen, allerlei versucht, um die Standfestigkeit der Hardware oder das elektronische Prinzip der eingebauten Mikrochips und @@ -53,8 +52,10 @@ Ausflüge auf einem grünen Puky-Rad unternahm, sich heutzutage aber als “postmoderner Urbaniker”, denn als “Fahrradfreak” versteht. Er lächelt und sagt: “Erst diese Technik macht uns zum weltweit einzigen stationsunabhängigen Stadtradsystem. Der Code ist nicht zu knacken und -darauf sind wir richtig stolz.”... Kurzer Auszug eines Interviews mit -einem Call A Bike Techniker im Magazin Mobil der Deutschen Bahn +darauf sind wir richtig stolz."... + +*Kurzer Auszug eines Interviews mit einem Call A Bike Techniker im +Magazin Mobil der Deutschen Bahn* ## Artikel: @@ -68,15 +69,17 @@ durch Batterien sichergestellt (3x 1.5V Mono). Die beiden Kästen sind durch eine Art Bügel miteinander verbunden. In diesem Bügel befindet sich ein sechspoliges Kabel für den Strom und zwei Spulen. Damit kann geprüft werden, ob das Schloss wirklich geschlossen ist, oder einfach -kein oder nur irgendein anderer Bolzen zum Verschließen genommen wurde.\ -\ +kein oder nur irgendein anderer Bolzen zum Verschließen genommen wurde. + +  + Der Kasten mit dem Display enthält den Exzentermotor zum öffnen des Schlosses, zwei Taster (Mikroschalter) und ein kapazitives 5x2-Touchpad. Die Hauptlogik sitzt unter dem Display. Sie ist nochmal durch eine Metallplatte abgesichert, welche nur die Kabel zum Display/Touchpad durchlässt. Damit wird der Motor und der Verschlussmechanismus vor einer -Attacke durchs Display geschützt.\ -\ +Attacke durchs Display geschützt. + Die gesamte Platine ist mit schwarzem Silikon übergossen, das man erstmal runterkratzen muss. Das geht prima mit einer Mess-Spitze. Außer einer streichholzschachtelgroßen Platine (Rückseite Datenschleuder 82), @@ -92,8 +95,8 @@ Aktion gemacht, aber dann lag die Technik erstmal zwei Monate einsam in einer Kiste, weil wir es nicht geschafft haben, das CallABike zu booten. Es dauerte eine Weile, bis wir merkten, dass das System nach dem Booten durch ein Infrarot-Signal aktiviert werden muss. Das war mehr oder -weniger Zufall.\ -\ +weniger Zufall. + Wenn man eine normale Glühlampe benutzt, um besser sehen zu koennen, piepte die Elektronik gelegentlich scheinbar unmotiviert. Wie sich später herausstellte, reichte der durch die Glühlampe emittierte @@ -105,8 +108,8 @@ Infrarot-Photon-Micro-Light ersetzt. Bei unserer weiteren Analyse des Systems begannen wir damit, alle Anschlüsse des Atmel durchzumessen, um uns einen ungefähren Schaltplan zu erstellen (siehe Bild). Die Datenblätter für den Atmel und das verwendete Display haben wir uns aus -dem Web besorgt.\ -\ +dem Web besorgt. + Im Januar hatte einer der Beteiligten dann endlich eine Idee, wie weiter vorzugehen sei. Auf der Platine war uns eine unbenutzte 6-polige Steckerleiste aufgefallen, und wie sich herausstellte, handelt es sich @@ -119,8 +122,8 @@ AVR microcontrollers which can interface to many hardware in-system programmers”) benutzt. Die auf dem Atmel vorhandenen „Intellectual-Property“-Bits waren in einem undefinierten Zustand, deswegen konnten wir das Flash des Atmels mit der 8KB großen Firmware -auslesen.\ -\ +auslesen. + In den nächsten Wochen waren mehrere Hacker damit beschäftigt, den ausgelesenen Assemblercode zu verstehen und zu dokumentieren. Dazu verwendeten wir AVR-Studio und [Ida @@ -129,8 +132,8 @@ berechnen der Ausleih- und Abgabecodes) fanden wir relativ schnell, da sich dort eine Menge rotate-und-shift-Befehle befanden. Den Initialisierungscode erkannten wir wieder, da wir wussten, dass der Motor sich beim Einschalten zweimal herumdreht. So konnten wir das -gelernte immer wieder an unserem Prototyp auf Richtigkeit überprüfen.\ -\ +gelernte immer wieder an unserem Prototyp auf Richtigkeit überprüfen. + Die Ausleih- und Abgabecodes werden durch einen Scrambler generiert, der mit einem 16Bit-Counter des CallABikes und einem Zustandswert aufgerufen wird. Ein gerader Counterwert erzeugt Ausleihcodes und ein ungerader @@ -148,8 +151,8 @@ geöffnet haben und die wir wegen der Lockbits nicht auslesen konnten, haben wir mit einem Script 511 mal resetten lassen (bei einem Reset erhöht sich der Counter immer um zwei). Damit haben wir den ursprünglichen Zustand wiederhergestellt, und das CallABike war wieder -‘in sync’ mit der Zentrale.\ -\ +‘in sync’ mit der Zentrale. + Wer sich das Display mal genauer angeschaut hat, wird festgestellt haben, dass der Zeichensatz ein proportionaler ist. Dazu gibt es im Code eine Tabelle, in der die Länge des Zeichens und die Position im Flash @@ -157,15 +160,15 @@ gespeichert sind. Ein ‘i’ und ein ‘!’ belegen nur ein Byte, wogegen z.B. ein ‘w’ sieben Bytes belegt. Die großen Logos und das Zahleneingabefeld liegen als 400 Byte große Bitmaps vor. Die lange schwarze Linie im CallABike-Logo zeigt die Stärke der Spule im Schloss an. Das haben wir -nur durch das Code-Auditing herausgefunden.\ -\ +nur durch das Code-Auditing herausgefunden. + Unser erstes Ziel war es, den aus unserem Disassembler erhaltenen Sourcecode so anzupassen, dass nach dem Assemblieren mit dem Commandline Tool [Avra](http://avra.sourceforge.net/) (“Assembler for the Atmel AVR microcontrollers”) ein EXAKT identisches Binary herauskam. Auf der Grundlage dieses Referenzcodes konnten wir dann endlich änderungen -vornehmen.\ -\ +vornehmen. + Nachdem wir uns diese Grundlage geschaffen hatten, konnten wir das CallABike mit unserem eigenen Code flashen. Da wir keine Vulnerabilities oder Backdoors fanden (jedes CallABike hat einen eigenen Key, der im @@ -185,8 +188,8 @@ ja der öffner nichts bezahlen muss und deswegen nicht motiviert ist, sich weiter um das Rad zu kümmern, und es aber auch niemand anders aufmachen könnte. Um das HackABike auch auf größere Entfernung noch von seinen unbehandelten Verwandten unterscheiden zu können, haben wir ihm -eine leicht veränderte Blink-Sequenz beigebracht.\ -\ +eine leicht veränderte Blink-Sequenz beigebracht. + Im Verlauf der weiteren Analyse des Codes ist uns aufgefallen, dass das CallABike im Abgabecode integriert Statusinformationen an die Zentrale durchgeben kann. Je nachdem, in welchem technischen Zustand sich das @@ -197,8 +200,8 @@ Schloss nicht mehr in der richtigen Stellung ist. Wenn man z.B. den Schließknopf sieben mal ohne eingeführten Bolzen drückt, liefert der Scrambler einen entsprechenden Rückgabecode, der gültig ist, diesen Zustand aber für die Zentrale erkennbar anzeigt. Von diesen Codes gibt -es 52 (eine Matrix aus 4x13).\ -\ +es 52 (eine Matrix aus 4x13). + Die Backdoor erlaubt, das HackABike mit einem von uns festgelegten Ausleihcode einfach zu öffnen. Wenn man das HackABike dann wieder abgibt, ist es ganz normal wieder ausleihbar. Es steht auch wieder der @@ -206,8 +209,8 @@ Ausleihcode des vorherigen Kunden im Display. Die Zentrale merkt von diesem eingeschobenen Ausleihvorgang nichts - außer, dass es an einem anderem Ort steht, als es in der Datenbank vermerkt ist. Wenn es dann aber wieder normal ausgeliehen und abgestellt wird, ist auch in der -Zentrale alles wieder in Ordnung.\ -\ +Zentrale alles wieder in Ordnung. + Um ein CallABike in ein HackABike zu verwandeln, mussten wir sechs Schrauben auf der Innenseite des Schlosskastens mit dem Display öffnen und das Kabel des STK500 an den ISP-Anschluss der Platine stecken. @@ -222,8 +225,8 @@ ihnen eine neue firmware verpasst wurde. Da UISP das Setzen der Lockbits nicht korrekt unterstützte, mussten wir das erstmal einbauen. Dazu haben wir den Output von AVR-Studio mit einem serial sniffer mitgelesen und uns die entsprechenden Kommandos für das STK500 rausgesucht und in UISP -eingebaut.\ -\ +eingebaut. + Abschließend ist festzustellen, dass das technische Design des CallABike in unseren Augen sehr gut ist. Jedes CallABike hat vermutlich einen eigenen 1024 Bit Key, der benötigt wird, um die Abgabe- und Ausleihcodes @@ -232,6 +235,8 @@ ausgelesen werden. Es wurde nur versäumt, die Lockbits zu setzen, um die Firmware vor dem Auslesen zu schützen. Unsere Attacke ist von den verbrauchten Mannstunden wohl mehr Wert als ein paar Dutzend CallABikes. +  + EEPROM Content: 0x0000 - 0x0001 unused @@ -244,14 +249,13 @@ verbrauchten Mannstunden wohl mehr Wert als ein paar Dutzend CallABikes. 0x00A0 - 0x00A2 first three bytes of key again 0x00A3 - 0x00AF unused 0x00B0 - 0x01FF textmessages for display - bikecounter: 0x015E EEPROM belongs to bike 3856 Counter 0x0162: 3042 9843 5360 <-- rentcode - -00- -01- -02- -03- -04- -05- -06- -07- -08- -09- -10- -11- -12- -13- + -00- -01- -02- -03- -04- -05- -06- -07- -08- -09- -10- -11- -12- -13- 00: 8584 7572 6970 4597 9119 4285 2144 0277 3197 0072 5545 6487 6341 9664 01: 5244 2345 5463 6065 9493 2971 9352 5402 5519 4579 8355 9533 9245 4926 10: 6615 7508 8159 7355 8125 3632 2920 4348 0484 7784 0084 6154 8905 6742 @@ -259,30 +263,28 @@ verbrauchten Mannstunden wohl mehr Wert als ein paar Dutzend CallABikes. Counter 0x0164: 7240 7043 9766 <-- rentcode - -00- -01- -02- -03- -04- -05- -06- -07- -08- -09- -10- -11- -12- -13- + -00- -01- -02- -03- -04- -05- -06- -07- -08- -09- -10- -11- -12- -13- 00: 1542 5463 4821 7206 8181 5293 5100 8370 7662 7831 6561 1071 9350 7554 01: 8480 7640 5094 4420 7470 5025 6472 0596 9260 5499 4274 0341 7092 7363 10: 6369 3545 6991 9042 0121 7702 7931 5600 6755 8264 9063 9596 6918 8761 11: 4254 0960 8294 7529 9793 4954 5455 9345 0183 3995 4992 5949 4392 9538 - Here you see the open and close pins of the bike 3856 with + //Here you see the open and close pins of the bike 3856 with the counter at 0x0162 At first the Customer gets the open pin 3042. When the customer closes the lock and everything is ok he gets the return code 8584. When for example the battery (-01-) is exhausted he gets the return code 7572. - - The following commands are possible via infrared: + //The following commands are possible via infrared: 0x5B read bikenumber 0xCE calibrate coil 0xC5 read RAM from 0x00AD - after transmit of the first 32 bytes of the key + //after transmit of the first 32 bytes of the key 0xCA enable watchdog (reboot) 0xC8 write and read the key of the EEPROM 0xCD write and read other parts of the EEPROM - //Code zum Generieren der Abgabe/Ausleihcodes bei gegebenem Key aus dem eeprom @@ -351,3 +353,5 @@ verbrauchten Mannstunden wohl mehr Wert als ein paar Dutzend CallABikes. 0x3E,0xBE,0xB9,0x1F,0xA8,0xF9,0x61,0x0B, 0xD6,0x7F,0x75,0xE7,0xF4,0x31,0x3F,0x6B }; + +  -- cgit v1.2.3