Reite die (NFC-)Welle
Ziel des Seminars war es, den neuen Reiner SCT cyberJack wave Komfort-Kartenleser mittels eines Smartphones (Android) über Bluetooth anzusprechen. Weiterhin 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 war noch nicht ausgereift.
Voraussetzungen
- Reiner SCT cyberJack wave
- Reiner SCT cyberJack wave Android SDK
- Android SDK
- VirtualSmartCard (VSC)
- AusweisApp
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 -
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 Server 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.
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 3B ... gab der Wave 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.