Untersuchung NFC Interface auf Android Telefonen

From
Jump to navigation Jump to search

Wie schon im Vorjahr im Artikel NFC unter Android ist auch dieses Jahr Near-field communication (NFC) ein Thema des Seminars IT Security Workshop WS2013.

Ziele

Evaluation der Hardware

Im Rahmen des Seminars wird ein Samsung Galaxy Nexus <ref>http://www.areamobile.de/handys/3014-samsung-galaxy-nexus/datenblatt</ref> zu Verfügung gestellt. Auf diesem ist als NFC-fähiger Chip ein NXP PN65N <ref>http://www.nfc-tag.de/was-sind-nfc-tags/nfc-tag-kompatibilitatsliste/</ref><ref>http://www.nxp.com/news/press-releases/2011/11/nxp-nfc-solution-implemented-in-galaxy-nexus-from-google.html</ref> verbaut, der aus einem NXP PN544 und einem SecureElement SmartMX besteht.

Als weitere NFC-fähige Geräte stehen ein Google Nexus 7 (2013) und ein Samsung Galaxy S4 Mini zu Verfügung. Diese besitzen jedoch mit einem Broadcom BCM20793M (Nexus 7) bzw. BCM20794 (S4 Mini) einen im Grunde NFC-fähigen Chip, der aber durch die fehlenden proprietären Protokollerweiterung von NXP Tags vom Typ Mifare Classic nicht mehr unterstützt. Lediglich ein Auslesen der UID ist möglich; ein lesender oder schreibender Zugriff auf weitere Daten schlägt fehl.<ref>http://www.andytags.com/nfc-tags-compatibility-issues.html</ref>

Die zur Verfügung stehenden NFC-Transponder sind meist vom Typ Mifare Classic. Hier ist die klassische Mensakarte (Mifare Classic 1K) und die Karte für das Zugangssystem zum Johann von Neumann Haus (Mifare Classic 4K) zu erwähnen.

Da Nexus Geräte generell eine gute Treiberunterstützung bieten und das Galaxy Nexus schon seit 2011 auf dem Markt ist, ist dieses für die Zwecke des Seminarthemas gegenüber den neueren Geräten zu bevorzugen. Die fehlende Kompatibilität der zur Verfügung stehenden Karten unterstützt diese Entscheidung zusätzlich.

Evaluation der Software

Android stellt für die Kommunikation mit dem NFC-Chip lediglich eine High-Level-API in Java bereit, die keine Kommunikation auf dem Raw-Device zulässt. Aus dieser Tatsache entstehen zwei Probleme: Eine einfache Anbindung von in C-geschriebener Software (z.B. mfoc, zum Brechen der Schlüssel von Mifare Classic Karten) ist nicht möglich. Hierzu muss ein Binding zwischen der Java-NFC-API mittels JNI (Java Native Interface) erstellt werden. Das weitaus größere Problem ist jedoch die fehlende direkte Kommunikationsmöglichkeit mit dem NFC-Chip auf device-level.

Der Android Kern basiert auf dem Linux Kernel und es gibt diverse Projekte, die zum Ziel haben auf Android-fähigen Geräten einen Linux-Kernel mit zugehörigem Userland zu betreiben. Hierfür existieren prinzipiell drei Methoden: Eine Variante besteht darin Linux innerhalb des Android-Systems in einem Container zu betreiben oder zu emulieren <ref> http://www.archlinuxuser.com/2013/01/how-to-install-archlinux-arm-on-any.html</ref>. Die andere Möglichkeit ist eine native Installation auf dem Android-Gerät <ref>http://www.ubuntu.com/phone</ref>. Als weitere Variante ist noch der parallele Einsatz des Linux-Userlands zu nennen, das die Möglichkeiten des Android-Userlands um bekannte GNU-Tools erweitert<ref> http://www.awa.tohoku.ac.jp/~benda/projects/android.html</ref>.

Da für den Zugriff auf das NFC-Device entweder ein direkter Zugriff über einen Kerneltreiber (kernelinterner NFC-Subsystem, seit Kernel 3.1) oder libnfc (via libusb) als Stack benötigt wird, entfällt die Containerlösung. Die Erweiterung des Android-Userlands um bekannte Tools aus der Linuxwelt erscheint reizvoll, ist aber zum jetzigem Standpunkt noch in einer sehr frühen Entwicklungsphase. Etwas reifer hingegen ist Ubuntu Touch, welches einen CyanogenMod 10.1.2 Kernel (Android 4.2 / Kernel 3.0) nutzt und bereits vorgefertigte Images bereitstellt.


Weiterführende Links

libnfc basierend:

mfcuk

wireshark nfc plugin

kernel-stack basierend:

neard

neardAL

Kartenemulation:

Emulation auf Android

Ein Tool um Karten-Dumps auf einem NFC-fähigen Android-Handy zu erstellen:

NFC War

Einzelnachweise

<references />