Reite die (NFC-)Welle: Difference between revisions

From
Jump to navigation Jump to search
 
(22 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Ziel des Seminars war es, den neuen Reiner SCT cyberJack wave Comfort-Kartenleser<ref>[http://www.reiner-sct.com/produkte/chipkartenleser/cyberjack_wave.html cyberJack wave]</ref> mittels eines Smartphones (Android) über Bluetooth anzusprechen. Weiterhin haben wir versucht die Kommunikation zu einem PC weiterzureichen um damit (bspw.) die AusweisApp<ref>[https://www.ausweisapp.bund.de/ AusweisApp]</ref> oder einen anderen Service ([https://www.buergerserviceportal.de/bayern/wuerzburg/bspx_selbstauskunft Selbstauskunft]) für den neuen Personalausweis (nPA) benutzen zu können. Damit wäre ein Man-In-The-Middle-Angriff denkbar/durchführbar.
Ziel des Seminars war es, den neuen [http://www.reiner-sct.com/produkte/chipkartenleser/cyberjack_wave.html 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 [https://www.ausweisapp.bund.de/ AusweisApp] oder einen anderen Service ([https://www.buergerserviceportal.de/bayern/wuerzburg/bspx_selbstauskunft 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.
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 ([[#Fazit |siehe Fazit]]).


==Voraussetzungen==
==Voraussetzungen==
* Reiner SCT cyberJack wave
* [http://www.reiner-sct.com/produkte/chipkartenleser/cyberjack_wave.html Reiner SCT cyberJack wave]
* Reiner SCT cyberJack wave Android SDK
* Reiner SCT cyberJack wave Android API
* Android SDK
* [http://developer.android.com/sdk/index.html Android SDK]
* VirtualSmartCard
* [http://vsmartcard.sourceforge.net/ VirtualSmartCard (VSC)]
* Client-Software

** [https://www.ausweisapp.bund.de/ AusweisApp] (für Linux nur 32Bit!)
==Vorbereitung==
** [https://www.openecard.org/ Open eCard App]
Für die erfolgreiche Umsetzung der Aufgabe sollte der PC mit einem Smart Card Deamon ausgestattet werden. Die Sourcen befinden sich in der [http://git.code.sf.net/p/vsmartcard/git Git-Repository]. Die Anleitung zur Installation der Pakete liegt [http://vsmartcard.sourceforge.net/virtualsmartcard/README.html hier]. Zum Einarbeiten in das Thema sind [https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html BSI TR 03119]
* Dokumentation
und [http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816.aspx ISO 7816] zu empfehlen.
** [https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03119/index_htm.html TR 3119]
Zum Programmieren benötigt man eine [http://developer.android.com/sdk/index.html Android-IDE].
** Reiner SCT cyberjack wave Android-API-Dokumentation


==Virtual Smart Card==
==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.


[[File:Ride_wave_1.PNG]]


==Einzelnachweise==
==Fazit==
Trotz aller Bemühungen, ist es uns nicht gelungen die Zielvorgaben im gegeben Zeitrahmen vollständig umzusetzen.
<references />
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.

Latest revision as of 12:12, 17 October 2013

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.