Reite die (NFC-)Welle: Difference between revisions
m (→Fazit) |
|||
(22 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
Ziel des Seminars war es, den neuen |
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 |
* 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]] |
|||
== |
==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
- Reiner SCT cyberJack wave
- Reiner SCT cyberJack wave Android API
- Android SDK
- VirtualSmartCard (VSC)
- Client-Software
- AusweisApp (für Linux nur 32Bit!)
- Open eCard App
- Dokumentation
- TR 3119
- Reiner SCT cyberjack wave Android-API-Dokumentation
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.
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.