Nebenbeierfindung: Die Lampomate! (CC-BY-SA 3.0 ;) )

Wochenende Nr. 1: Zum ersten mal trafen wir uns, um die beim 27C3 gepriesene Opensource-Firmware OsmocomBB auf unserem Testphone Motorola C118 auszuprobieren. Eher unvorbereitet kommt es dazu, denn obwohl unser Kollege in Flensburg hardwaretechnisch gut ausgestattet ist, fehlt ihm der notwendige PL2303-chip um einen Adapter von Serial auf 2.5mm 3-poligen Klinkestecker (also known as T191 unlock cable) selber zu basteln. Konkret benötigt dieser Adapter auf der Seite des Handys eine Betriebsspannung von 3.3V. Ein kurzfristig bei MediaMarkt teuer erworbener Adapter (_ enter model name here _) von Serial auf USB sollte ungeachtet einer Betriebsspannung von 7.0V+ trotzdem unser Handy mit der Osmocom-Firmware flashen, jedoch ohne Erfolg. Nachdem wir uns #osmocom irc-channel hatten bestätigen lassen, dass unser Handy definitiv getoasted ist (oder zumindest die Datenpins der Headsetbuchse) war die letzte Rettung eine Samstag-Abend-Einkaufaktion dank Ebay Kleinanzeigen für ein Motorola C139. Denn wie sich herausstellte, war der MediaMarkt-USB-Adapter mit einem zusätzlichen MAX1797 Step-Up-Wandler ausgestattet, der sich von unserem Profilötmeister dedo ohne größere Komplikationen entfernen ließ. Ohne diesen Wandler konnten wir nun den Headsetstecker direkt an die TXD- und RXD-Connectors von PL2303 löten. Zum Test messten wir beim flashen von einer Firmware die Peaks der Betriebsspannung mit einem Multimeter, welche bei akzeptablen ~4V lagen. Das Kompilieren von OsmocomBB ging ohne Probleme und nach der Anleitung von rot13.org war es nun auch möglich, die Firmware auf das C139 zu flashen! Unglücklicherweise, hatten wir wohl genau mit diesem Model pech und waren nicht in der Lage eine Verbindung zu einer Mobilfunkzelle aufzubauen, geschweige denn mit Wireshark oder Tcpdump GSM-Traffic mitzuschneiden. Die Layer23-Applikation mobile blieb still, meldete aber auch keine ungewöhnlichen Fehler.

 Wochenende Nr. 2: Dieses Wochenende ein neuer Versuch, diesmal unter ArchLinux mit einem selbst zusammengeschraubten Buildscript welches im Vergleich zur offiziellen Anleitung die aktuellste Version von dem offiziellen gcc Arm-Toolchain enthält. Somit gillt, ganz einfach und unkompliziert:

yaourt -S osmocombb-git kraken-git wireshark-gtk gnu-netcat

… und schon ist die komplette Suite unter /opt/osmocombb installiert (und auch das Programm “kraken” mit dem sich später der mit A5/1 verschlüsselte GSM-traffic entschlüsseln lässt). Nachdem das Handy mit dem USB-Adapter an den PC angeschlossen ist (bei uns zeigt lsusb den Adapter so an: Bus 002 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port), wird mit osmocon die Firmware wie folgt auf das Motorola-Handy geflashed:

sudo /opt/osmocombb/host/osmocon/osmocon -p /dev/ttyUSB0 -m c123 /opt/osmocombb/target/firmware/board/compal_e88/layer1.compalram.bin

Sollte es zur Problemen bei der Ausführung von layer1 geben, kann man auch den Parameter “-m c123xor” ausprobieren. Zumindest sollte, nachdem man den roten Auflegen-Knopf einmal kurz gedrückt hat, folgender output erscheinen:

(...)
got 1 bytes from modem, data looks like: 43  C
Received PROMPT2 from phone, starting download
(...)
handle_write(): 2555 bytes (47611/47611)
handle_write(): finished
(...)
got 1 bytes from modem, data looks like: 42  B
Received DOWNLOAD ACK from phone, your code is running now!

OSMOCOM Layer 1 (revision osmocon_v0.0.0-906-g5bbea93)
======================================================================
Device ID code: 0xb4fb
Device Version code: 0x0000
ARM ID code: 0xfff3
cDSP ID code: 0x0128
Die ID code: 3783221bd8039bd3
======================================================================
REG_DPLL=0x2413
CNTL_ARM_CLK=0xf0a1
CNTL_CLK=0xff91
CNTL_RST=0xfff3
CNTL_ARM_DIV=0xfff9
======================================================================

THIS FIRMWARE WAS COMPILED WITHOUT TX SUPPORT!!!
Assert DSP into Reset
Releasing DSP from Reset
Setting some dsp_api.ndb values
Setting API NDB parameters
DSP Download Status: 0x0001
DSP API Version: 0x0000 0x0000
Finishing download phase
DSP Download Status: 0x0002
DSP API Version: 0x3606 0x0000
LOST 752!

Parallel dazu wird jetzt die layer23-Applikation “mobile” gestartet mit:

sudo mkdir -p /root/.osmocom/bb/
sudo touch /root/.osmocom/bb/mobile.cfg
sudo /opt/osmocombb/host/layer23/src/mobile/mobile -i 127.0.0.1

Jetzt ist man schon in der Lage mit telnet (default-port 4247) auf die Osmocom-Shell zuzugreifen um EInstellungen vorzunehmen oder Verbindungsinformationen abzurufen. Mit dem Programm “cell_log” kann man sich die verfügbaren Provider und Basisstationen in der Umgebung anzeigen lassen:

<000d> cell_log.c:191 Cell: ARFCN=971 MCC=262 MNC=10 (Germany, DB Systel GSM-R)
<000d> cell_log.c:191 Cell: ARFCN=967 MCC=262 MNC=10 (Germany, DB Systel GSM-R)
<000d> cell_log.c:191 Cell: ARFCN=964 MCC=262 MNC=10 (Germany, DB Systel GSM-R)
<000d> cell_log.c:191 Cell: ARFCN=958 MCC=262 MNC=10 (Germany, DB Systel GSM-R) 

Aber wir wollen ersteinmal Telefonate unserer O2-Handys aufzeichnen, dazu suchen wir uns die ARFCN von den bei uns verfügbaren O2-Zellen raus:

<000d> cell_log.c:191 Cell: ARFCN=676 MCC=262 MNC=07 (Germany, O2)
<000d> cell_log.c:191 Cell: ARFCN=1012 MCC=262 MNC=07 (Germany, O2)
<000d> cell_log.c:191 Cell: ARFCN=1020 MCC=262 MNC=07 (Germany, O2)
<000d> cell_log.c:191 Cell: ARFCN=645 MCC=262 MNC=07 (Germany, O2)
<000d> cell_log.c:191 Cell: ARFCN=1002 MCC=262 MNC=07 (Germany, O2)
<000d> cell_log.c:191 Cell: ARFCN=1009 MCC=262 MNC=07 (Germany, O2)
<000d> cell_log.c:191 Cell: ARFCN=1013 MCC=262 MNC=07 (Germany, O2)
<000d> cell_log.c:191 Cell: ARFCN=1015 MCC=262 MNC=07 (Germany, O2)
<000d> cell_log.c:191 Cell: ARFCN=643 MCC=262 MNC=07 (Germany, O2)
<000d> cell_log.c:191 Cell: ARFCN=653 MCC=262 MNC=07 (Germany, O2) 

Um Trafficanalyse auf einem bestimmten Frequenzbereich durchzuführen, “fixen” wir layer23-ARFCN auf 676 (O2 Germany) mit folgendem Befehl:

/opt/osmocombb/host/layer23/src/misc/ccch_scan -a 676

Parallel dazu:

nc -u -l 4729 > /dev/null &
sudo wireshark -k -i lo -f 'port 4729'

Weitere (unvollständige) Vorgehensweise:

cd /opt/kraken/
sudo wget http://opensource.srlabs.de/attachments/download/41/a51_table_torrents.tgz
sudo tar xvf a51_table_torrents.tgz
sudo aria2c *

Soweit so gut … Wir werden diesen Blogpost noch erweitern!

Tools:

  • osmocon
  • osmoload

Further reading: http://srlabs.de/research/decrypting_gsm/, http://srlabs.de/uncategorized/airprobe-how-to, http://bb.osmocom.org/trac/wiki/Sniffing/, http://cgit.osmocom.org/cgit/osmocom-bb/, http://security.osmocom.org/trac/, Vortrag vom 27c3 zu Angreifen von Handys meist via SMS, Vortrag vom 27c3 zu OsmocomBB, Noch einer der ein Motorola gehackt hat, [Video] Cracking A5 GSM encryption (HAR 2009)

Gloassar:
GSM-R: Global System for Mobile Communications – Rail(way) Ein in Deutschland von der DB Systel betriebenes Rangier- und Bahnsteuerungsfunk.
Ergänzungen::
http://lists.osmocom.org/pipermail/baseband-devel/2011-May/001909.html

URGENT:

need
Bus 002 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
for burst_ind

git clone
git checkout sylvain/burst_ind
git pull
make