Persistente Identifizierung eines Nutzers in der iOS – Keychain

Viele Apps bieten ihren Nutzern auf iOS Geräten wie dem iPhone oder dem iPad einen einmaligen Testzeitraum an. Lässt sich dieser Zeitraum verlängern?

Die Keychain


Die Privatsphäre Einstellungen von Apple machen es den Entwicklern nicht leicht, ein Gerät eindeutig zu identifizieren (ganz im Gegensatz zu Android).
So werden beim Deinstallieren einer App grundsätzlich alle ihre Daten und Einstellungen gelöscht. Apple hat den Entwicklern aber ein kleines Schlupfloch gelassen. So kann eine App kleinere Datenmengen in einem besonders gesicherten Bereich ablegen. Dieser Bereich nennt sich Keychain.

Ursprünglich ist dieser Bereich dafür gedacht, dass besonders sensible Nutzerdaten wie Passwörter sicher gespeichert werden können.

Das Besondere an dieser Keychain ist, dass sie erst dann gelöscht wird, wenn das Gerät in den Werkszustand zurückgesetzt wird.

Wenn ein Entwickler also seinen Nutzern einen Testzeitraum anbieten möchte, dann ist dieser Ort die einzige Möglichkeit Daten dauerhaft zu speichern. Auch wenn die App zwischenzeitlich deinstalliert und wieder installiert wurde. So kann sichergestellt werden, dass ein Testzeitraum nur einmal pro Gerät genutzt wird.

Da es sich allerdings wie oben beschrieben um einen besonders sensiblen Bereich handelt, hat Apple den Zugriff auf diesen Bereich stark eingeschränkt.

So ist es Apps grundsätzlich nicht erlaubt die Keychain einer anderen App zu lesen, zu verändern oder zu löschen.

Mit einer Ausnahme: Apps vom selben Hersteller mit der gleichen TeamID dürfen Keychain Daten austauschen.

Die Hürden um eine Keychain zurückzusetzen sind daher recht hoch. Folgende Bedingungen müssen erfüllt sein:

  1. Entwicklerzertifikat mit gleicher TeamID
  2. App A mit Keychain Daten
  3. App B zum Zurücksetzen der Keychain
  4. App A und B müssen mit der gleichen TeamID signiert worden sein

Praxistest

Wie das Ganze in der Praxis aussehen kann, schauen wir uns jetzt an. Hierfür wird folgendes benötigt:

  1. kostenpflichtiges Entwickler-Konto oder ein Signaturzertifikat und Provisioning-Profil
  2. iOS App Signer [1]
  3. Mac OS X 10.9 oder neuer (auf Mac oder in virtueller Machine)

Um die Daten aus der Keychain zu löschen, habe ich eine kleine App entwickelt. Beim Starten löscht diese App automatisch alle Einträge aus der Keychain, auf die sie zugreifen kann.

Source Code und IPA sind hier zu finden: https://github.com/irmo-de/KeychainCleaner

Download Keychain.ipa

Um diese auf einem iOS Gerät zu installieren, muss sie zunächst signiert werden. Hierzu nutzen wir iOS App Signer.

Der Name der Application ID (hier de.irmo) kann frei gewählt werden. Wichtig ist nur, dass der erste Teil bei beiden Signaturen übereinstimmt (a.blablabla.xxxx und a.blablabla.yyyy) Sonst kann yyyy nicht auf die keychain von xxxx zugreifen.
Im nächsten Schritt muss die App, bei der die Keychain gelöscht werden soll, ebenfalls signiert werden.

Fazit

Sollte man sich als Entwickler einer App mit angebotenen Testzeiträumen Sorgen machen? Die Antwort dürfte ein klares Nein sein. Die hier beschriebene Vorgehensweise ist mit einem hohen technischen Aufwand verbunden und es ist kaum zu erwarten, dass sie von einer relevanten Nutzerzahl genutzt wird. Auf der anderen Seite überwiegen die Vorteile eines einfachen Testzeitraums für einen neuen Nutzer einer App eindeutig.

[1] https://dantheman827.github.io/ios-app-signer

Leave a Reply

Your email address will not be published. Required fields are marked *