Reite die (NFC-)Welle

From SarWiki
Jump to: navigation, search

Ziel des Seminars war es, den neuen Reiner SCT cyberJack wave Komfort-Kartenleser mittels eines Smartphones (Android) über Bluetooth anzusprechen. Außerdem haben wir versucht die Kommunikation zu einem PC weiterzureichen um damit (bspw.) die AusweisApp oder einen anderen Service (Selbstauskunft) für den neuen Personalausweis (nPA) benutzen zu können. Damit wäre ein Man-In-The-Middle-Angriff denkbar/durchführbar. Zum Zeitpunkt des Seminars befand sich der cyberJack wave noch in Entwicklung und dessen Firmware (1.2, später 1.4.4) war noch nicht ausgereift und wies noch einige "Stolpersteine" auf (siehe Fazit).

Voraussetzungen

Virtual Smart Card

Da uns die Installation/Benutzung der Virtual Smart Card (VSC)-Komponenten einige Probleme bereitet hat, wollen wir im Folgendem kurz unser Vorgehen erläutern um anderen den Einstieg zu erleichtern! Die Installation erfolgte unter Ubuntu/Linux 12.10. Folgende Pakete werden inkl. Abhängigkeiten für die "Installation" der VSC benötigt:

 sudo apt-get install git autoconf swig libtool libpcsclite-dev help2man gengetopt libusb-dev libusb-1.0.0-dev

Da noch zusätzlich weitere Software kompiliert werden muss, empfiehlt es sich einen seperaten Ordner zu erstellen

 mkdir build; cd build

Auf der Webseite wird beispielhaft für jede Komponente der Compile-Vorgang beschrieben. Wir empfehlen sich daran zu halten, da OpenSSL gepatcht und neu kompiliert wird. Das kann auf einem produktiven System zu Nebenwirkungen führen, wenn die neu kompilierten Bibliotheken in die Standard-Verzeichnisse installiert werden! Deshalb definiert man ein entsprechendes Installations-Prefix:

 PREFIX=/tmp/install

(Achtung!: /tmp wird nach einem Neustart gelöscht! ;) )

Compile & Install OpenPACE

 OPENPACE=openpace
 git clone http://git.code.sf.net/p/openpace/git $OPENPACE
 cd $OPENPACE
 autoreconf --verbose --install
 # with `--enable-openssl-install` OpenSSL will be downloaded and installed along with OpenPACE
 ./configure --enable-openssl-install --prefix=$PREFIX --enable-python --enable-java #CFLAGS=-fno-stack-protector
 make install && cd -

Compile & Install OpenSC

 VSMARTCARD=vsmartcard
 git clone http://git.code.sf.net/p/vsmartcard/git $VSMARTCARD

Das auf der Webseite beschriebene Submodul funktionierte bei uns nicht, deshalb holen wir uns die Quellen seperat...

 cd $VSMARTCARD/npa/src/opensc
 git clone https://github.com/OpenSC/OpenSC.git .
 autoreconf --verbose --install
 # adding PKG_CONFIG_PATH here lets OpenSC use the patched OpenSSL
 ./configure --prefix=$PREFIX PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig --enable-sm
 make install && cd -

Compile & Install nPA-Lib

 cd $VSMARTCARD/npa
 autoreconf --verbose --install
 ./configure --prefix=$PREFIX PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig OPENSC_LIBS="-L$PREFIX/lib -lopensc -lcrypto"
 make install && cd -

Compile & Install VirtualSmartCard

 cd $VSMARTCARD/virtualsmartcard/
 autoreconf --verbose --install
 ./configure --prefix=$PREFIX
 make
 make install
 cd -

Standardmäßig werden 10 virtuelle Reader erzeugt. Um das zu ändern muss man die Datei vsmartcard/virtualsmartcard/src/vpcd/ifd-vpcd.c Zeile 33 editieren und eine gewünschte Readerzahl eintragen.

Compile & Install USB CCID

 cd $VSMARTCARD/ccid 
 autoreconf --verbose --install
 ./configure --prefix=$PREFIX OPENSC_LIBS="-L$PREFIX/lib -lopensc" PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
 make install && cd -

Compile & Install LibNFC

 LIBNFC=libnfc
 git clone https://code.google.com/p/libnfc $LIBNFC
 cd $LIBNFC
 autoreconf -i
 # See `./configure --help` for enabling support of additional hardware
 ./configure --prefix=$PREFIX
 make
 make install
 cd -

Compile & Install PC/SC-Relay

 cd $VSMARTCARD/pcsc-relay/
 autoreconf --verbose --install
 ./configure --prefix=$PREFIX PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
 make
 make install
 cd -

VSC-Reader starten & VSC emulieren

Um nun den Emulator zu starten wird zunächst der entsprechende Service angehalten

 sudo service pcscd stop

Überprüfen mittels

 sudo service pcscd status

Jetzt können wird den Emulator mit der "mitgelieferten" config starten

 sudo pcscd -f -d -a -c $PREFIX/etc/reader.conf.d/vpcd

Der Emulator bleibt im Vordergrund (-f) und gibt verschieden Informationen aus (-d / -a). Testen, ob die VSC-Reader korrekt erzeugt wurden:

 pcsc_scan

Eine Smart Card (z.B. nPA) lässt sich nun mit dem Befehl

 $PREFIX/bin/vicc -t nPA

emulieren. Sowohl im Fenster von pcscd als auch bei pcsc_scan sollten nun entsprechende Ausgaben erscheinen.

Umsetzung

Die von uns programmierte APP baut eine Bluetooth-Verbindung mit dem Wave und eine TCP-Verbindung mit dem PC/Server (virtual Reader) auf. Der Kanal TCP→BT ist gepuffert, um die valide Befehle zu erkennen und entsprechend zu formatieren. Der Rückkanal ist direkt, hier findet nur eine Umformatierung statt.

Ride wave 1.PNG

Fazit

Trotz aller Bemühungen, ist es uns nicht gelungen die Zielvorgaben im gegeben Zeitrahmen vollständig umzusetzen. Zum einen hat das Aufsetzen und Einarbeiten in die VSC-Software einige Zeit in Anspruch genommen. Zum Anderen war die Firmware des cyberjack wave teilweise unausgereift und hat uns einige fiese Fallen gestellt. Bspw. übertrug der Wave das erste Byte des nPA über Bluetooth "falsch"! Statt eines ATR (Hex) 3B ... gab der Wave über Bluetooth ein ATR beginnend 4B zurück. Damit erkannte die AusweisApp die weitergeleitete Karte nicht als nPA. Prinzipiell sollte unsere App funktionieren, da die jeweiligen Kommandos nur an PC bzw. Wave weitergeleitet werden.