iOS Testumgebung

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Apple Developer Program

Eine provisioning identity ist eine Sammlung von öffentlichen und privaten Schlüsseln, die mit einem Apple-Entwicklerkonto verknüpft sind. Um Apps zu signieren müssen Sie 99$/year bezahlen, um sich im Apple Developer Program zu registrieren und Ihre provisioning identity zu erhalten. Ohne diese Möglichkeit können Sie Anwendungen aus dem Quellcode nicht auf einem physischen Gerät ausführen. Eine andere Option ist die Verwendung eines jailbroken device.

Ab Xcode 7.2 bietet Apple die Option, ein free iOS development provisioning profile zu erstellen, das es erlaubt, Ihre Anwendung auf einem echten iPhone zu schreiben und zu testen. Gehen Sie zu Xcode –> Preferences –> Accounts –> + (Neues Apple ID mit Ihren Zugangsdaten hinzufügen) –> Click on the Apple ID created –> Manage Certificates –> + (Apple Development) –> Done
__Dann, um Ihre Anwendung auf Ihrem iPhone auszuführen, müssen Sie zunächst das iPhone anweisen, dem Computer zu vertrauen. Danach können Sie versuchen, die Anwendung vom Xcode auf dem Mobilgerät auszuführen, aber ein Fehler wird erscheinen. Gehen Sie also zu Settings –> General –> Profiles and Device Management –> Wählen Sie das nicht vertrauenswürdige Profil und klicken Sie auf “Trust”.

Auf iOS 16+ muss auf dem Gerät außerdem Developer Mode aktiviert sein, bevor lokal installierte, development-signed Anwendungen (oder Apps, die mit get-task-allow neu signiert wurden) ausgeführt werden. Diese Option erscheint nur nachdem das Gerät mit Xcode gepairt wurde oder nachdem einmal eine development-signed App installiert wurde. Der Ablauf ist: pair the device, einen Installationsversuch aus Xcode auslösen, dann Settings –> Privacy & Security –> Developer Mode aktivieren, neu starten und die Eingabeaufforderung nach dem Entsperren bestätigen.

Beachten Sie, dass Anwendungen, die mit demselben Signing-Zertifikat signiert wurden, Ressourcen sicher teilen können, z. B. keychain items.

Die provisioning profiles werden auf dem Telefon in /Library/MobileDevice/ProvisioningProfiles gespeichert.

Moderne hostseitige Gerätetools

Für aktuelles iOS-Testing ist das Host-Tooling zunehmend aufgeteilt in:

  • xcrun simctl zur Verwaltung von Simulatoren
  • xcrun xctrace list devices zum Auflisten von Simulatoren und physischen Geräten
  • xcrun devicectl (Xcode 15+) um von der Kommandozeile mit gepaarten physischen Geräten zu interagieren

Nützliche Beispiele:

# List booted simulators
xcrun simctl list | grep Booted

# List all visible devices/simulators
xcrun xctrace list devices

# List paired physical devices (Xcode 15+)
xcrun devicectl list devices

devicectl ist besonders nützlich in Automatisierungspipelines, wenn du einen Test-Build installieren oder starten musst, ohne Xcode zu öffnen:

xcrun devicectl device install app --device <udid> <path_to_app_or_ipa>
xcrun devicectl device launch app --terminate-existing --device <udid> <bundle_id>

Keep Xcode updated when testing iOS 17+ devices. Apple moved developer services to the CoreDevice stack and also changed how Developer Disk Images are handled, so outdated host tooling frequently fails with pairing, image-mounting, or app-launch errors.

Simulator

Tip

Beachte, dass ein Simulator nicht dasselbe wie ein Emulator ist. Der Simulator simuliert nur das Verhalten des Geräts und seiner Funktionen, benutzt diese aber nicht tatsächlich.

Simulator

Das Erste, was du wissen musst, ist, dass das Durchführen eines pentest innerhalb eines Simulator weitaus eingeschränkter ist als auf einem jailbroken device.

Alle Tools, die zum Erstellen und Unterstützen einer iOS-App benötigt werden, sind nur offiziell auf Mac OS unterstützt.
Apples de-facto-Tool zum Erstellen/Debuggen/Instrumentieren von iOS-Anwendungen ist Xcode. Es kann verwendet werden, um andere Komponenten wie simulators und verschiedene SDK versions herunterzuladen, die zum Bauen und test deiner App erforderlich sind.
Es wird dringend empfohlen, Xcode aus dem offiziellen App Store herunterzuladen. Andere Versionen könnten Malware enthalten.

The simulator files can be found in /Users/<username>/Library/Developer/CoreSimulator/Devices

Der Simulator ist weiterhin sehr nützlich, um schnell filesystem artifacts, NSUserDefaults, plist parsing, custom URL schemes, und basic runtime instrumentation zu testen. Beachte jedoch, dass er nicht mehrere Sicherheitsmerkmale physischer Geräte emuliert, die bei einem pentest oft relevant sind, wie die Secure Enclave, baseband, bestimmte keychain access-control behaviours, realistische biometric flows und jailbreak-spezifische Ausführungsbedingungen.

Um den Simulator zu öffnen, starte Xcode, dann wähle im Xcode tab –> Open Developer tools –> Simulator
__In dem folgenden Bild kannst du durch Klicken auf “iPod touch […]” ein anderes Gerät zum Testen auswählen:

Anwendungen im Simulator

Inside /Users/<username>/Library/Developer/CoreSimulator/Devices you may find all the installed simulators. If you want to access the files of an application created inside one of the emulators it might be difficult to know in which one the app is installed. A quick way to find the correct UID is to execute the app in the simulator and execute:

xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)

Sobald du die UID kennst, befinden sich die innerhalb davon installierten Apps in /Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application

Allerdings wirst du die Anwendung überraschenderweise nicht dort finden. Du musst auf /Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/ zugreifen.

Und in diesem Ordner kannst du das Package der Anwendung finden.

Emulator

Corellium ist der einzige öffentlich verfügbare iOS-Emulator. Es handelt sich um eine Enterprise SaaS-Lösung mit einem nutzerbasierten Lizenzmodell und bietet keine Testlizenz an.

No Jailbreak needed

Siehe diesen Blogpost darüber, wie man eine iOS-Anwendung auf einem non jailbroken device pentestet:

iOS Pentesting withuot Jailbreak

Jailbreaking

Apple verlangt strikt, dass der auf dem iPhone laufende Code von einem von Apple ausgestellten Zertifikat signiert ist. Jailbreaking ist der Prozess des aktiven Umgehens solcher Beschränkungen und anderer vom OS implementierter Sicherheitskontrollen. Daher wird, sobald das Gerät jailbroken ist, die Integritätsprüfung, die dafür verantwortlich ist, installierte Apps zu prüfen, so gepatcht, dass sie umgangen wird.

Tip

Im Gegensatz zu Android kannst du in iOS nicht in den “Developer Mode” wechseln, um unsigned/untrusted code auf dem Gerät auszuführen.

Android Rooting vs. iOS Jailbreaking

Obwohl oft verglichen, sind rooting auf Android und jailbreaking auf iOS grundlegend unterschiedliche Prozesse. Rooting von Android-Geräten kann das Installieren des su-Binaries oder Ersetzen des Systems durch ein gerootetes Custom ROM umfassen, was nicht unbedingt Exploits erfordert, wenn der Bootloader entsperrt ist. Das Flashen von Custom ROMs ersetzt das OS des Geräts nach dem Entsperren des Bootloaders und erfordert manchmal einen Exploit.

Im Gegensatz dazu können iOS-Geräte keine Custom ROMs flashen, da der Bootloader nur Apple-signierte Images booten darf. Jailbreaking iOS zielt darauf ab, Apples Code-Signing-Schutz zu umgehen, um unsigned code auszuführen — ein Prozess, der durch Apples kontinuierliche Sicherheitsverbesserungen erschwert wird.

Jailbreaking Challenges

Das Jailbreaking von iOS wird zunehmend schwieriger, da Apple Schwachstellen schnell schließt. Downgrading iOS ist nur für eine begrenzte Zeit nach einer Veröffentlichung möglich, wodurch Jailbreaking zeitkritisch wird. Geräte, die für Sicherheitstests verwendet werden, sollten nicht aktualisiert werden, es sei denn, re-jailbreaking ist garantiert.

iOS-Updates werden durch einen Challenge-Response-Mechanismus (SHSH blobs) gesteuert, der die Installation nur für von Apple signierte Antworten erlaubt. Dieser Mechanismus, bekannt als “signing window”, begrenzt die Möglichkeit, OTA-Firmwarepakete zu speichern und später zu verwenden. Die IPSW Downloads website ist eine Ressource, um aktuelle signing windows zu prüfen.

Jailbreak Varieties

  • Tethered jailbreaks erfordern bei jedem Neustart eine Verbindung zu einem Computer.
  • Semi-tethered jailbreaks erlauben das Booten in einen non-jailbroken Modus ohne Computer.
  • Semi-untethered jailbreaks erfordern manuelles Re-jailbreaking, ohne einen Computer zu benötigen.
  • Untethered jailbreaks bieten eine permanente Jailbreak-Lösung, ohne dass ein erneutes Anwenden nötig ist.

Jailbreaking Tools and Resources

Jailbreaking-Tools variieren je nach iOS-Version und Gerät. Ressourcen wie Can I Jailbreak?, The iPhone Wiki und Reddit Jailbreak liefern aktuelle Informationen. Beispiele sind:

  • Checkra1n für ältere Forschungsgeräte der A7–A11/iOS-12–14-Ära.
  • Palera1n für checkm8-kompatible Geräte (A8–A11) auf iOS/iPadOS 15+.
  • Dopamine für viele arm64/arm64e-Geräte auf iOS 15/16 unter Verwendung eines modernen rootless jailbreaks.
  • Unc0ver bleibt hauptsächlich für ältere iOS-Versionen bis einschließlich 14.8 relevant.

Das Modifizieren deines Geräts birgt Risiken, und jailbreaking sollte mit Vorsicht angegangen werden.

Rootless jailbreaks

Moderne iOS-15+-jailbreaks sind häufig rootless statt rootful. Aus Sicht eines Testers ist das wichtig, weil viele ältere Anleitungen noch davon ausgehen, dass Jailbreak-Dateien direkt unter / oder /Library/... liegen, was bei vielen aktuellen Setups nicht mehr zutrifft.

  • Rootless jailbreaks vermeiden es, das sealed system volume direkt zu verändern.
  • Bei palera1n werden Jailbreak-Dateien typischerweise unter einem randomisierten Pfad in /private/preboot/... abgelegt und über den stabilen Symlink /var/jb verfügbar gemacht.
  • Tweaks, launch daemons und Hilfs-Binaries können daher unter /var/jb statt an den klassischen rootful-Standorten existieren.

Dies hat direkte Auswirkungen auf die Umgebungsvalidierung, das Frida-Setup und die Umgehung der jailbreak-Erkennung:

  • Bei der Überprüfung, ob deine Tools korrekt installiert wurden, prüfe sowohl Legacy-Pfade als auch /var/jb.
  • Bei der Analyse der jailbreak-detection-Logik einer App bedenke, dass moderne Checks oft nach rootless-Artefakten und Symlinks suchen zusätzlich zu klassischen Indikatoren wie Cydia.app.
  • Wenn ein Drittanbieter-Skript oder -Tweak ein rootful-Filesystem-Layout voraussetzt, kann es auf einem rootless-Gerät stillschweigend fehlschlagen.

Jailbreaking Benefits and Risks

Jailbreaking entfernt die vom OS auferlegte Sandbox, sodass Apps auf das gesamte Dateisystem zugreifen können. Diese Freiheit ermöglicht die Installation nicht genehmigter Apps und den Zugriff auf mehr APIs. Für normale Nutzer ist jailbreaking jedoch nicht empfohlen wegen möglicher Sicherheitsrisiken und Instabilität des Geräts.

After Jailbreaking

iOS Basic Testing Operations

Jailbreak Detection

Mehrere Anwendungen versuchen zu erkennen, ob das Gerät jailbroken ist, und laufen in diesem Fall nicht.

  • Nach dem Jailbreaking werden auf iOS in der Regel Dateien und Ordner installiert, diese können durchsucht werden, um festzustellen, ob das Gerät jailbroken ist.
  • Bei modernen rootless-jailbreaks können diese Dateien unter /var/jb erscheinen oder über Symlinks in /private/preboot/... aufgelöst werden, statt nur an klassischen rootful-Standorten.
  • Auf einem jailbroken Gerät erhalten Anwendungen Lese-/Schreibzugriff auf neue Dateien außerhalb der Sandbox.
  • Einige API-Aufrufe verhalten sich anders.
  • Das Vorhandensein des OpenSSH-Dienstes.
  • Der Aufruf von /bin/sh wird 1 statt 0 zurückgeben.

Mehr Informationen darüber, wie man Jailbreaking erkennt, findest du hier.

Du kannst versuchen, diese Erkennungen mit objection’s ios jailbreak disable zu umgehen.

Jailbreak Detection Bypass

  • Du kannst versuchen, diese Erkennungen mit objection’s ios jailbreak disable zu umgehen.
  • Du könntest auch das Tool Liberty Lite (https://ryleyangus.com/repo/) installieren. Sobald das Repo hinzugefügt ist, sollte die App im ‘Search’-Tab erscheinen.

References

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks