# iOS Testing Environment {{#include ../../banners/hacktricks-training.md}} ## Apple Developer Program Eine **Provisionierungsidentitä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 Provisionierungsidentität zu erhalten. Ohne dies können Sie Anwendungen aus dem Quellcode auf einem physischen Gerät nicht ausführen. Eine andere Möglichkeit, dies zu tun, besteht darin, ein **jailbroken Gerät** zu verwenden. Seit Xcode 7.2 hat Apple eine Option bereitgestellt, um ein **kostenloses iOS-Entwicklungs-Provisionierungsprofil** zu erstellen, das es ermöglicht, Ihre Anwendung auf einem echten iPhone zu schreiben und zu testen. Gehen Sie zu _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Neues Apple ID mit Ihren Anmeldeinformationen hinzufügen) --> _Klicken Sie auf die erstellte Apple ID_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Fertig_\ \_\_Um Ihre Anwendung auf Ihrem iPhone auszuführen, müssen Sie zuerst **das iPhone anweisen, dem Computer zu vertrauen.** Dann können Sie versuchen, **die Anwendung auf dem Mobilgerät aus Xcode auszuführen**, aber es wird ein Fehler angezeigt. Gehen Sie also zu _Settings_ --> _General_ --> _Profiles and Device Management_ --> Wählen Sie das nicht vertrauenswürdige Profil aus und klicken Sie auf "**Trust**". Beachten Sie, dass **Anwendungen, die mit demselben Signierungszertifikat signiert sind, Ressourcen auf sichere Weise teilen können, wie z.B. Schlüsselbundobjekte**. Die Provisionierungsprofile werden im Telefon unter **`/Library/MobileDevice/ProvisioningProfiles`** gespeichert. ## **Simulator** > [!NOTE] > Beachten Sie, dass ein **Simulator nicht dasselbe ist wie ein Emulator**. Der Simulator simuliert lediglich das Verhalten und die Funktionen des Geräts, 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 Tools, die zum Erstellen und Unterstützen einer iOS-App erforderlich sind, werden **nur offiziell auf Mac OS unterstützt**.\ Das de facto-Tool von Apple zum Erstellen/Debuggen/Instruieren 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//Library/Developer/CoreSimulator/Devices`. Um den Simulator zu öffnen, starten Sie Xcode, drücken Sie dann im _Xcode-Tab_ --> _Open Developer tools_ --> _Simulator_\ \_\_Im folgenden Bild können Sie durch Klicken auf "iPod touch \[...\]" ein anderes Gerät zum Testen auswählen: ![](<../../images/image (270).png>) ![](<../../images/image (520).png>) ### Anwendungen im Simulator Im Verzeichnis `/Users//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, **herauszufinden, in welchem die App installiert ist**. Ein schneller Weg, um **die richtige UID zu finden**, besteht darin, die App im Simulator auszuführen und Folgendes auszuführen: ```bash xcrun simctl list | grep Booted iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted) ``` Sobald Sie die UID kennen, können die installierten Apps unter `/Users//Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application` gefunden werden. Überraschenderweise finden Sie die Anwendung jedoch nicht hier. Sie müssen auf `/Users//Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/` zugreifen. 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 Unternehmens-SaaS-Lösung mit einem Lizenzmodell pro Benutzer und es wird keine Testlizenz angeboten. ## Kein Jailbreak erforderlich Überprüfen Sie diesen Blogbeitrag, wie man eine iOS-Anwendung auf einem **nicht gejailbreakten Gerät** pentestet: {{#ref}} ios-pentesting-without-jailbreak.md {{#endref}} ## Jailbreaking Apple verlangt strikt, dass der auf dem iPhone ausgeführte Code **von einem von Apple ausgestellten Zertifikat signiert sein muss**. **Jailbreaking** ist der Prozess, aktiv **solche Einschränkungen** und andere Sicherheitskontrollen, die vom Betriebssystem festgelegt wurden, zu **umgehen**. Daher wird, sobald das Gerät gejailbreakt ist, die **Integritätsprüfung**, die für die Überprüfung der installierten Apps verantwortlich ist, gepatcht, sodass sie **umgangen** wird. > [!NOTE] > 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. ### 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 **die Installation der `su`-Binary** oder **den Austausch des Systems durch ein gerootetes benutzerdefiniertes ROM** umfassen, was nicht unbedingt Exploits erfordert, wenn der Bootloader entsperrt ist. **Das Flashen benutzerdefinierter 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 aufgrund der Einschränkung des Bootloaders, nur von Apple signierte Images zu booten, keine benutzerdefinierten ROMs flashen. **Jailbreaking iOS** zielt darauf ab, Apples Code-Signierungsschutz zu umgehen, um nicht signierten Code auszuführen, ein Prozess, der durch Apples kontinuierliche Sicherheitsverbesserungen kompliziert wird. ### Herausforderungen beim Jailbreaking Jailbreaking iOS wird zunehmend schwieriger, da Apple Schwachstellen schnell patcht. **Das Downgrade von iOS** ist nur für eine begrenzte Zeit nach einer Veröffentlichung möglich, was Jailbreaking zu einer zeitkritischen Angelegenheit macht. Geräte, die für Sicherheitstests verwendet werden, sollten nicht aktualisiert werden, es sei denn, das 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 ermöglicht. Dieser Mechanismus, bekannt als "Signing Window", schränkt die Möglichkeit ein, OTA-Firmware-Pakete zu speichern und später zu verwenden. Die [IPSW Downloads-Website](https://ipsw.me) ist eine Ressource, um aktuelle Signing Windows zu überprüfen. ### Jailbreak-Varianten - **Tethered Jailbreaks** erfordern eine Computerverbindung für jeden Neustart. - **Semi-tethered Jailbreaks** ermöglichen das Booten in den nicht gejailbreakten Modus ohne Computer. - **Semi-untethered Jailbreaks** erfordern ein manuelles Re-Jailbreaking ohne Computer. - **Untethered Jailbreaks** bieten eine permanente Jailbreak-Lösung ohne die Notwendigkeit einer erneuten Anwendung. ### Jailbreaking-Tools und Ressourcen 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 Modifikation Ihres Geräts birgt Risiken, und Jailbreaking sollte mit Vorsicht angegangen werden. ### Vorteile und Risiken des Jailbreakings Jailbreaking **entfernt die vom Betriebssystem auferlegte Sandbox**, sodass Apps auf das gesamte Dateisystem zugreifen können. Diese Freiheit ermöglicht die Installation von nicht genehmigten Apps und den Zugriff auf mehr APIs. Für reguläre Benutzer wird Jailbreaking jedoch **nicht empfohlen** aufgrund potenzieller Sicherheitsrisiken und Instabilität des Geräts. ### **Nach dem Jailbreaking** {{#ref}} basic-ios-testing-operations.md {{#endref}} ### **Jailbreak-Erkennung** **Mehrere Anwendungen versuchen zu erkennen, ob das Mobilgerät gejailbreakt ist, und in diesem Fall wird die Anwendung nicht ausgeführt.** - Nach dem Jailbreaking werden auf iOS **Dateien und Ordner normalerweise installiert**, die durchsucht werden können, um festzustellen, ob das Gerät gejailbreakt ist. - Auf einem gejailbreakten Gerät erhalten Anwendungen **Lese-/Schreibzugriff auf neue Dateien** außerhalb der Sandbox. - Einige **API** **Aufrufe** werden **anders reagieren**. - Das Vorhandensein des **OpenSSH**-Dienstes. - Der Aufruf von `/bin/sh` wird **1** anstelle von 0 zurückgeben. **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 mit **objection's** `ios jailbreak disable` zu vermeiden. ## **Umgehung der Jailbreak-Erkennung** - Sie können versuchen, diese Erkennungen mit **objection's** `ios jailbreak disable` zu vermeiden. - Sie könnten auch das Tool **Liberty Lite** (https://ryleyangus.com/repo/) installieren. Sobald das Repo hinzugefügt wurde, sollte die App im Tab „Suche“ erscheinen. ## Referenzen - [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/) {{#include ../../banners/hacktricks-training.md}}