NFC unter Android: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
No edit summary
Line 39: Line 39:
==== Umsetzung unter Android ====
==== Umsetzung unter Android ====
Nachdem man den Schlüssel, mit dem auf allen Mensakarten die kritischen Sektoren verschlüsselt sind, über ''mfoc'' ermittelt hat, braucht man diese Information nur noch mittels des Android NFC API in die Form einer Android App zu bringen. Wir haben dafür erste Schritte unter Android mit Hilfe des Android Emulators unternommen, welcher Teil des Android Eclipse Plugins ist.
Nachdem man den Schlüssel, mit dem auf allen Mensakarten die kritischen Sektoren verschlüsselt sind, über ''mfoc'' ermittelt hat, braucht man diese Information nur noch mittels des Android NFC API in die Form einer Android App zu bringen. Wir haben dafür erste Schritte unter Android mit Hilfe des Android Emulators unternommen, welcher Teil des Android Eclipse Plugins ist.
Nach den ersten kleinen selbst gebauten Apps ist man schnell in der Lage, sich mit dem NFC API zu beschäftigen um eine App zu schreiben, welche mit Hilfe der bereitgestellten Funktionalitäten und dem ermittelten Schlüssel gezielt die richtigen Bytes der Mensakarte ausliest, um damit korrekt das jeweilige Guthaben anzuzeigen.


Links:
Links:
Line 45: Line 44:
* [http://developer.android.com/sdk/installing/installing-adt.html Install Anleitung für das Eclipse Plugin]
* [http://developer.android.com/sdk/installing/installing-adt.html Install Anleitung für das Eclipse Plugin]
* [http://developer.android.com/training/basics/firstapp/index.html Erste Schritte unter Android]
* [http://developer.android.com/training/basics/firstapp/index.html Erste Schritte unter Android]


Nach den ersten kleinen selbst gebauten Apps ist man schnell in der Lage, sich mit dem NFC API zu beschäftigen um eine App zu schreiben, welche mit Hilfe der bereitgestellten Funktionalitäten und dem ermittelten Schlüssel gezielt die richtigen Bytes der Mensakarte ausliest, um damit korrekt das jeweilige Guthaben anzuzeigen.

Da der Android Emulator des Eclipse Plugins aber leider keinen Zugriff auf USB Geräte bietet, kommt man ab hier mit einem USB Kartenleser nicht mehr weiter, sondern benötigt ein NFC fähiges Android Smartphone oder Tablet. Wir hatten im Rahmen des Workshops die Möglichkeit mit einem Google/Asus Nexus 7 Tablet und einem Google/Samsung Nexus S arbeiten zu können, welche beide über einen eingebauten NFC Chip verfügen. Somit konnte man direkt in Eclipse die erstellte App starten, welche dann nicht über den Emulator sondern direkt auf dem über USB angeschlossenen Android Gerät ausgeführt wurde.

Links:
* [http://en.wikipedia.org/wiki/Nexus_7 Nexus 7 Tablet]
* [http://en.wikipedia.org/wiki/Nexus_S Nexus S Smartphone]
* [http://developer.android.com/training/basics/firstapp/index.html Android NFC API]
* [http://developer.android.com/training/basics/firstapp/index.html Android NFC API]
* [http://www.nfcworld.com/nfc-phones-list/ Liste von NFC fähigen Smartphones]



Der Quelltext unserer Guthaben-App befindet sich als Git-Repository namens ''android.nfc'' auf dem SAR-Github ''gitsar'' und steht frei zur Verfügung.
Der Quelltext unserer Guthaben-App befindet sich als Git-Repository namens ''android.nfc'' auf dem SAR-Github ''gitsar'' und steht frei zur Verfügung.


Die fertige App steht <strike>hier</strike> zum Download.
Die fertige App steht <strike>hier</strike> zum Download.






Revision as of 09:25, 2 October 2012

Dies ist der Ergebnisartikel des Projekts "NFC Interface unter Android" im Rahmen des IT-Security Workshops 2012. Ziel des Projekts war es, zu untersuchen, welche Möglichkeiten sich auf mobilen Android Gerät bieten, mit dem NFC Interface von Android zu arbeiten. Grundlegende Eckpunkte bildeten dabei das Auslesen des Guthabens der Mensakarte in Form einer "Guthaben App" für Android und das Emulieren einer solchen mit einem Android Gerät.

Guthaben-App

Unser erstes Ziel war es, eine Android App zu erstellen, welche in der Lage ist, das Guthaben einer beliebigen Mensakarte auszulesen und anzuzeigen. Die zum aktuellen Zeitpunkt (Sep. 2012) im Umlauf befindlichen Mensakarten sind vom Typ Mifare Classic 1k.

Diese Karten stellen einen 1024 Byte großen Speicher dar, welcher in Sektoren unterteilt ist. Dabei sind die Sektoren, in denen wichtige Informationen wie z.B. das Guthaben gespeichert sind, mit einem Schlüssel versehen. Nur wenn ein Lesegerät diesen spezifischen Schlüssel kennt, kann es diese Sektoren auslesen.

libnfc & nfc-tools

Um diesen Schlüssel zu knacken haben wir unter Ubuntu 12.04 das Programm mfoc verwendet, welches Teil des NFC-Tools Paket ist, welches wiederum die Library libnfc verwendet. Alle Tools und Libraries wurden in der aktuellsten Version bzw. Revision verwendet.

Links:

Zum compilieren und installieren genügt:

autoreconf -vis
./configure
make
make install

Danach kann man dann z.B. mit

nfc-list

und einem USB-Kartenleser erstmals eine Smartcard am PC erkennen und nach einfachen Informationen scannen.

< ! > Dabei ist zu beachten, dass ab der Version 3.2 des Linux Kernels vor dem Scannen mit nfc-list zwei Module in der korrekten Reihenfolge entfernt werden müssen:

rmmod pn533
rmmod nfc
nfc-list

Wird über nfc-list eine Mifare Classic Karte am Kartenleser erkannt, kann nun von dieser ein dump mittels mfoc erstellt werden:

mfoc -O /Zielpfad/für/das/DumpFile

Dem Dumpfile kann man nun den Schlüssel der kritischen Sektoren und den kompletten Speicherinhalt der (Mensa)Karte in Hexadezimaldarstellung entnehmen. Dabei stellte sich heraus, dass für alle Mensakarten ein und der selbe Schlüssel für die kritischen Sektoren verwendet wurde, sodass ein einmaliges Knacken einer beliebigen Mensakarte ausreicht, um dann mit dem erlangten Schlüssel weiterarbeiten zu können. Desweiteren konnte man an Hand mehrer Dumps mit unterschiedlichen Guthaben erkennen, in welchen Bytes der Karte das Guthaben kodiert ist und konnte dieses somit mit einem kleinen selbst gebauten Skript leicht automatisiert ablesen.

Umsetzung unter Android

Nachdem man den Schlüssel, mit dem auf allen Mensakarten die kritischen Sektoren verschlüsselt sind, über mfoc ermittelt hat, braucht man diese Information nur noch mittels des Android NFC API in die Form einer Android App zu bringen. Wir haben dafür erste Schritte unter Android mit Hilfe des Android Emulators unternommen, welcher Teil des Android Eclipse Plugins ist.

Links:


Nach den ersten kleinen selbst gebauten Apps ist man schnell in der Lage, sich mit dem NFC API zu beschäftigen um eine App zu schreiben, welche mit Hilfe der bereitgestellten Funktionalitäten und dem ermittelten Schlüssel gezielt die richtigen Bytes der Mensakarte ausliest, um damit korrekt das jeweilige Guthaben anzuzeigen.

Da der Android Emulator des Eclipse Plugins aber leider keinen Zugriff auf USB Geräte bietet, kommt man ab hier mit einem USB Kartenleser nicht mehr weiter, sondern benötigt ein NFC fähiges Android Smartphone oder Tablet. Wir hatten im Rahmen des Workshops die Möglichkeit mit einem Google/Asus Nexus 7 Tablet und einem Google/Samsung Nexus S arbeiten zu können, welche beide über einen eingebauten NFC Chip verfügen. Somit konnte man direkt in Eclipse die erstellte App starten, welche dann nicht über den Emulator sondern direkt auf dem über USB angeschlossenen Android Gerät ausgeführt wurde.

Links:


Der Quelltext unserer Guthaben-App befindet sich als Git-Repository namens android.nfc auf dem SAR-Github gitsar und steht frei zur Verfügung.

Die fertige App steht hier zum Download.


Kartenemulation unter Android

coming soon ...