iOS Testing Environment

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Apple Developer Program

Eine Bereitstellungsidentität 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 $/Jahr bezahlen, um sich im Apple Developer Program zu registrieren und Ihre Bereitstellungsidentität zu erhalten. Ohne dies können Sie Anwendungen nicht aus dem Quellcode auf einem physischen Gerät ausführen. Eine andere Möglichkeit, dies zu tun, ist die Verwendung eines jailbroken Geräts.

Ab Xcode 7.2 bietet Apple die Möglichkeit, ein kostenloses iOS-Entwicklungs-Bereitstellungsprofil zu erstellen, mit dem Sie Ihre Anwendung auf einem echten iPhone schreiben und testen können. Gehen Sie zu Xcode --> Einstellungen --> Konten --> + (Neue Appli-ID hinzufügen) --> Klicken Sie auf die erstellte Apple-ID --> Zertifikate verwalten --> + (Apple Development) --> Fertig __Dann müssen Sie zunächst das iPhone anweisen, dem Computer zu vertrauen, um Ihre Anwendung auf Ihrem iPhone ausführen zu können. Anschließend können Sie versuchen, die Anwendung vom Xcode aus auf dem Mobilgerät auszuführen, aber es wird ein Fehler angezeigt. Gehen Sie also zu Einstellungen --> Allgemein --> Profile und Geräteverwaltung --> Wählen Sie das nicht vertrauenswürdige Profil aus und klicken Sie auf "Vertrauen".

Beachten Sie, dass von demselben Signierungszertifikat signierte Anwendungen Ressourcen auf sichere Weise gemeinsam nutzen können, wie z. B. Schlüsselbunde.

Die Bereitstellungsprofile werden im Telefon unter /Library/MobileDevice/ProvisioningProfiles gespeichert.

Simulator

Beachten Sie, dass ein Simulator nicht dasselbe wie ein Emulator ist. Der Simulator simuliert nur das Verhalten des Geräts und die Funktionen, verwendet sie jedoch nicht tatsächlich.

Simulator

Das erste, was Sie wissen müssen, ist, dass das Durchführen eines Pentests in einem Simulator viel eingeschränkter ist als in einem jailbroken Gerät.

Alle für den Bau und die Unterstützung einer iOS-App erforderlichen Tools werden nur offiziell auf Mac OS unterstützt. Apples Standardwerkzeug zum Erstellen/Debuggen/Instrumentieren von iOS-Anwendungen ist Xcode. Es kann verwendet werden, um andere Komponenten wie Simulatoren und verschiedene SDK-Versionen herunterzuladen, die zum Erstellen und Testen Ihrer App erforderlich sind. Es wird dringend empfohlen, Xcode aus dem offiziellen App Store herunterzuladen. Andere Versionen könnten Malware enthalten.

Die Simulator-Dateien finden Sie unter /Users/<Benutzername>/Library/Developer/CoreSimulator/Devices

Um den Simulator zu öffnen, führen Sie Xcode aus, klicken Sie dann auf den Xcode-Tab --> Entwicklertools öffnen --> Simulator __In der folgenden Abbildung können Sie durch Klicken auf "iPod touch [...]" ein anderes Gerät zum Testen auswählen:

Anwendungen im Simulator

Innerhalb von /Users/<Benutzername>/Library/Developer/CoreSimulator/Devices finden Sie alle installierten Simulatoren. Wenn Sie auf die Dateien einer Anwendung zugreifen möchten, die in einem der Emulatoren erstellt wurde, kann es schwierig sein zu wissen, in welchem der App installiert ist. Ein schneller Weg, um die richtige UID zu finden, besteht darin, die App im Simulator auszuführen und auszuführen:

xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
Sobald Sie die UID kennen, können die installierten Apps darin unter `/Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application` gefunden werden.

Jedoch werden Sie überraschenderweise die Anwendung hier nicht finden. Sie müssen auf `/Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/` zugreifen.

Und in diesem Ordner können Sie **das Paket der Anwendung finden**.

## Emulator

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

## Jailbreaking

Apple verlangt strikt, dass der Code, der auf dem iPhone läuft, **von einem von Apple ausgestellten Zertifikat signiert sein muss**. **Jailbreaking** ist der Prozess, der aktiv **solche Beschränkungen** und andere Sicherheitskontrollen, die vom Betriebssystem implementiert wurden, umgeht. Daher, sobald das Gerät jailbroken ist, wird die **Integritätsprüfung**, die für die Überprüfung der installierten Apps verantwortlich ist, gepatcht, sodass sie **umgangen wird**.

<div data-gb-custom-block data-tag="hint" data-style='info'>

Im Gegensatz zu Android können Sie in iOS nicht in den "Entwicklermodus" wechseln, um nicht signierten/nicht vertrauenswürdigen Code auf dem Gerät auszuführen.

</div>

### Android Rooting vs. iOS Jailbreaking

Obwohl oft verglichen, sind **Rooting** auf Android und **Jailbreaking** auf iOS grundlegend unterschiedliche Prozesse. Das Rooten von Android-Geräten kann das **Installieren des `su`-Binärs** oder das **Ersetzen des Systems durch eine gerootete benutzerdefinierte ROM** beinhalten, was nicht unbedingt Exploits erfordert, wenn der Bootloader entsperrt ist. Das **Flashen von benutzerdefinierten ROMs** ersetzt das Betriebssystem des Geräts nach dem Entsperren des Bootloaders, was manchmal einen Exploit erfordert.

Im Gegensatz dazu können iOS-Geräte keine benutzerdefinierten ROMs flashen, aufgrund der Beschränkung des Bootloaders auf das Booten von Apple-signierten Images. **Jailbreaking von iOS** zielt darauf ab, Apples Codesignatur-Schutzmechanismen zu umgehen, um nicht signierten Code auszuführen, ein Prozess, der durch Apples kontinuierliche Sicherheitsverbesserungen kompliziert wird.

### Herausforderungen beim Jailbreaking

Das Jailbreaking von iOS wird zunehmend schwieriger, da Apple Sicherheitslücken schnell schließt. Ein **Downgrade von iOS** ist nur für eine begrenzte Zeit nach einem Release möglich, was das Jailbreaking zu einer zeitkritischen Angelegenheit macht. Geräte, die für Sicherheitstests verwendet werden, sollten nicht aktualisiert werden, es sei denn, ein erneutes Jailbreaking ist garantiert.

iOS-Updates werden durch einen **Herausforderungs-Antwort-Mechanismus** (SHSH-Blobs) gesteuert, der nur die Installation von Apple-signierten Antworten ermöglicht. Dieser Mechanismus, bekannt als "Signierungsfenster", begrenzt die Fähigkeit, OTA-Firmwarepakete zu speichern und später zu verwenden. Die [IPSW-Downloads-Website](https://ipsw.me) ist eine Ressource zur Überprüfung der aktuellen Signierungsfenster.

### Arten von Jailbreaks

* **Tethered Jailbreaks** erfordern eine Computer-Verbindung für jeden Neustart.
* **Semi-tethered Jailbreaks** ermöglichen das Booten in den nicht-jailbroken Modus ohne Computer.
* **Semi-untethered Jailbreaks** erfordern manuelles erneutes Jailbreaking ohne Computer.
* **Untethered Jailbreaks** bieten eine dauerhafte Jailbreak-Lösung ohne erneute Anwendung.

### Tools und Ressourcen für Jailbreaking

Jailbreaking-Tools variieren je nach iOS-Version und Gerät. Ressourcen wie [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com) und [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) bieten aktuelle Informationen. Beispiele sind:

* [Checkra1n](https://checkra.in/) für A7-A11-Chip-Geräte.
* [Palera1n](https://palera.in/) für Checkm8-Geräte (A8-A11) auf iOS 15.0-16.5.
* [Unc0ver](https://unc0ver.dev/) für iOS-Versionen bis 14.8.

Die Modifizierung Ihres Geräts birgt Risiken, und Jailbreaking sollte mit Vorsicht angegangen werden.

### Vorteile und Risiken des Jailbreakings

Jailbreaking **entfernt die vom Betriebssystem auferlegte Sandbox**, was Apps den Zugriff auf das gesamte Dateisystem ermöglicht. Diese Freiheit ermöglicht die Installation von nicht genehmigten Apps und den Zugriff auf mehr APIs. Für normale Benutzer wird Jailbreaking jedoch aufgrund potenzieller Sicherheitsrisiken und Geräteinstabilität **nicht empfohlen**.

### **Nach dem Jailbreaking**

<div data-gb-custom-block data-tag="content-ref" data-url='basic-ios-testing-operations.md'>

[basic-ios-testing-operations.md](basic-ios-testing-operations.md)

</div>

### **Jailbreak-Erkennung**

**Mehrere Anwendungen werden versuchen zu erkennen, ob das Mobilgerät jailbroken ist, und in diesem Fall wird die Anwendung nicht ausgeführt**

* Nach dem Jailbreaking eines iOS-Geräts werden in der Regel **Dateien und Ordner installiert**, die durchsucht werden können, um festzustellen, ob das Gerät jailbroken ist.
* Auf einem jailbroken Gerät erhalten Anwendungen **Lese-/Schreibzugriff auf neue Dateien** außerhalb der Sandbox.
* Einige **API-Aufrufe** werden **sich anders verhalten**.
* Die Anwesenheit des **OpenSSH**-Dienstes.
* Der Aufruf von `/bin/sh` gibt anstelle von 0 eine **1** zurück.

**Weitere Informationen zur Erkennung von Jailbreaking** [**hier**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**

Sie können versuchen, diese Erkennungen zu umgehen, indem Sie `ios jailbreak disable` von **objection** verwenden.

## **Umgehung der Jailbreak-Erkennung**

* Sie können versuchen, diese Erkennungen zu umgehen, indem Sie `ios jailbreak disable` von **objection** verwenden.
* Sie könnten auch das Tool **Liberty Lite** (https://ryleyangus.com/repo/) installieren. Sobald das Repo hinzugefügt ist, sollte die App im 'Suchen'-Tab erscheinen.

## Referenzen

* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)

Last updated