# iOS Grundlegende Testoperationen {{#include ../../banners/hacktricks-training.md}} ## **Zusammenfassung der Identifizierung und des Zugriffs auf iOS-Geräte** ### **Identifizierung der UDID eines iOS-Geräts** Um ein iOS-Gerät eindeutig zu identifizieren, wird eine 40-stellige Sequenz verwendet, die als UDID bekannt ist. Auf macOS Catalina oder neuer kann dies in der **Finder-App** gefunden werden, da iTunes nicht mehr vorhanden ist. Das Gerät, einmal über USB verbunden und im Finder ausgewählt, zeigt seine UDID zusammen mit anderen Informationen an, wenn die Details unter seinem Namen durchgeklickt werden. Für Versionen von macOS vor Catalina erleichtert iTunes die Entdeckung der UDID. Detaillierte Anweisungen finden Sie [hier](http://www.iclarified.com/52179/how-to-find-your-iphones-udid). Befehlszeilenwerkzeuge bieten alternative Methoden zum Abrufen der UDID: - **Verwendung des I/O Registry Explorer-Tools `ioreg`:** ```bash $ ioreg -p IOUSB -l | grep "USB Serial" ``` - **Verwendung von `ideviceinstaller` für macOS (und Linux):** ```bash $ brew install ideviceinstaller $ idevice_id -l ``` - **Verwendung von `system_profiler`:** ```bash $ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:" ``` - **Verwendung von `instruments`, um Geräte aufzulisten:** ```bash $ instruments -s devices ``` ### **Zugriff auf die Geräteshell** **SSH-Zugriff** wird durch die Installation des **OpenSSH-Pakets** nach dem Jailbreak aktiviert, was Verbindungen über `ssh root@` ermöglicht. Es ist entscheidend, die Standardpasswörter (`alpine`) für die Benutzer `root` und `mobile` zu ändern, um das Gerät abzusichern. **SSH über USB** wird notwendig, wenn kein Wi-Fi verfügbar ist, wobei `iproxy` verwendet wird, um die Geräteports für SSH-Verbindungen zuzuordnen. Diese Einrichtung ermöglicht den SSH-Zugriff über USB, indem Folgendes ausgeführt wird: ```bash $ iproxy 2222 22 $ ssh -p 2222 root@localhost ``` **On-device shell applications**, wie NewTerm 2, ermöglichen eine direkte Interaktion mit dem Gerät, was besonders nützlich für die Fehlersuche ist. **Reverse SSH shells** können ebenfalls für den Remote-Zugriff vom Host-Computer eingerichtet werden. ### **Zurücksetzen vergessener Passwörter** Um ein vergessenes Passwort auf das Standardpasswort (`alpine`) zurückzusetzen, ist es notwendig, die Datei `/private/etc/master.passwd` zu bearbeiten. Dies beinhaltet das Ersetzen des vorhandenen Hashs durch den Hash für `alpine` neben den Einträgen für die Benutzer `root` und `mobile`. ## **Datenübertragungstechniken** ### **Übertragen von App-Daten-Dateien** **Archivierung und Abruf über SSH und SCP:** Es ist einfach, das Data-Verzeichnis der Anwendung mit `tar` zu archivieren und dann mit `scp` zu übertragen. Der folgende Befehl archiviert das Data-Verzeichnis in eine .tgz-Datei, die dann vom Gerät abgerufen wird: ```bash tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693 exit scp -P 2222 root@localhost:/tmp/data.tgz . ``` ### **Graphische Benutzeroberflächen-Tools** **Verwendung von iFunbox und iExplorer:** Diese GUI-Tools sind nützlich für die Verwaltung von Dateien auf iOS-Geräten. Allerdings hat Apple ab iOS 8.4 den Zugriff dieser Tools auf den Anwendungs-Sandbox eingeschränkt, es sei denn, das Gerät ist jailbroken. ### **Verwendung von Objection zur Dateiverwaltung** **Interaktive Shell mit Objection:** Das Starten von objection ermöglicht den Zugriff auf das Bundle-Verzeichnis einer App. Von hier aus können Sie zum Dokumentenverzeichnis der App navigieren und Dateien verwalten, einschließlich des Herunterladens und Hochladens von und zu dem iOS-Gerät. ```bash objection --gadget com.apple.mobilesafari explorer cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents file download ``` ## **Erhalten und Extrahieren von Apps** ### **Erwerb der IPA-Datei** **Over-The-Air (OTA) Verteilungslink:** Apps, die zur Testzwecken über OTA verteilt werden, können mit dem ITMS-Dienst-Asset-Downloader-Tool heruntergeladen werden, das über npm installiert wird und verwendet wird, um die IPA-Datei lokal zu speichern. ```bash npm install -g itms-services itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa ``` ### **Extrahieren der App-Binärdatei** 1. **Von einer IPA:** Entpacken Sie die IPA, um auf die entschlüsselte App-Binärdatei zuzugreifen. 2. **Von einem Jailbroken-Gerät:** Installieren Sie die App und extrahieren Sie die entschlüsselte Binärdatei aus dem Speicher. ### **Entschlüsselungsprozess** **Überblick über die manuelle Entschlüsselung:** iOS-App-Binärdateien sind von Apple mit FairPlay verschlüsselt. Um eine Reverse-Engineering durchzuführen, muss man die entschlüsselte Binärdatei aus dem Speicher dumpen. Der Entschlüsselungsprozess umfasst das Überprüfen des PIE-Flags, das Anpassen der Speicherflags, das Identifizieren des verschlüsselten Abschnitts und dann das Dumpen und Ersetzen dieses Abschnitts durch seine entschlüsselte Form. **Überprüfen und Ändern des PIE-Flags:** ```bash otool -Vh Original_App python change_macho_flags.py --no-pie Original_App otool -Vh Hello_World ``` **Identifizieren des verschlüsselten Abschnitts und Dumpen des Speichers:** Bestimmen Sie die Start- und Endadressen des verschlüsselten Abschnitts mit `otool` und dumpen Sie den Speicher vom jailbroken Gerät mit gdb. ```bash otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO dump memory dump.bin 0x8000 0x10a4000 ``` **Überschreiben des verschlüsselten Abschnitts:** Ersetzen Sie den verschlüsselten Abschnitt im ursprünglichen App-Binary durch den entschlüsselten Dump. ```bash dd bs=1 seek= conv=notrunc if=dump.bin of=Original_App ``` **Finalisierung der Entschlüsselung:** Ändern Sie die Metadaten der Binärdatei, um das Fehlen von Verschlüsselung anzuzeigen, indem Sie Tools wie **MachOView** verwenden und den `cryptid` auf 0 setzen. ### **Entschlüsselung (Automatisch)** #### **frida-ios-dump** Das [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) Tool wird verwendet, um **Apps automatisch zu entschlüsseln und zu extrahieren** von iOS-Geräten. Zunächst muss `dump.py` konfiguriert werden, um eine Verbindung zum iOS-Gerät herzustellen, was über localhost an Port 2222 über **iproxy** oder direkt über die IP-Adresse und den Port des Geräts erfolgen kann. Anwendungen, die auf dem Gerät installiert sind, können mit dem Befehl aufgelistet werden: ```bash $ python dump.py -l ``` Um eine bestimmte App, wie Telegram, zu dumpen, wird der folgende Befehl verwendet: ```bash $ python3 dump.py -u "root" -p "" ph.telegra.Telegraph ``` Dieser Befehl initiiert den App-Dump, was zur Erstellung einer `Telegram.ipa`-Datei im aktuellen Verzeichnis führt. Dieser Prozess ist für jailbroken Geräte geeignet, da nicht signierte oder gefälscht signierte Apps mit Tools wie [**ios-deploy**](https://github.com/ios-control/ios-deploy) neu installiert werden können. #### **flexdecrypt** Das [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt) Tool, zusammen mit seinem Wrapper [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), ermöglicht das Extrahieren von IPA-Dateien aus installierten Anwendungen. Die Installationsbefehle für **flexdecrypt** auf dem Gerät umfassen das Herunterladen und Installieren des `.deb`-Pakets. **flexdump** kann verwendet werden, um Apps aufzulisten und zu dumpen, wie in den folgenden Befehlen gezeigt: ```bash apt install zip unzip wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump flexdump list flexdump dump Twitter.app ``` #### **bagbak** [**bagbak**](https://github.com/ChiChou/bagbak), ein weiteres auf Frida basierendes Tool, erfordert ein jailbroken Gerät für die App-Dekryptierung: ```bash bagbak --raw Chrome ``` #### **r2flutch** **r2flutch**, das sowohl radare als auch frida nutzt, dient der App-Dekodierung und dem Dumping. Weitere Informationen finden Sie auf seiner [**GitHub-Seite**](https://github.com/as0ler/r2flutch). ### **Apps installieren** **Sideloading** bezieht sich auf die Installation von Anwendungen außerhalb des offiziellen App Stores. Dieser Prozess wird vom **installd daemon** verwaltet und erfordert, dass Apps mit einem von Apple ausgestellten Zertifikat signiert sind. Jailbroken Geräte können dies durch **AppSync** umgehen, was die Installation von gefälscht signierten IPA-Paketen ermöglicht. #### **Sideloading-Tools** - **Cydia Impactor**: Ein Tool zum Signieren und Installieren von IPA-Dateien auf iOS und APK-Dateien auf Android. Anleitungen und Fehlersuche finden Sie auf [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/). - **libimobiledevice**: Eine Bibliothek für Linux und macOS zur Kommunikation mit iOS-Geräten. Installationsbefehle und Anwendungsbeispiele für ideviceinstaller werden bereitgestellt, um Apps über USB zu installieren. - **ipainstaller**: Dieses Befehlszeilentool ermöglicht die direkte Installation von Apps auf iOS-Geräten. - **ios-deploy**: Für macOS-Benutzer installiert ios-deploy iOS-Apps über die Befehlszeile. Das Entpacken der IPA und die Verwendung des `-m`-Flags für den direkten App-Start sind Teil des Prozesses. - **Xcode**: Verwenden Sie Xcode, um Apps zu installieren, indem Sie zu **Window/Devices and Simulators** navigieren und die App zu **Installed Apps** hinzufügen. #### **Anwendung Installation auf Nicht-iPad-Geräten erlauben** Um iPad-spezifische Anwendungen auf iPhone- oder iPod touch-Geräten zu installieren, muss der **UIDeviceFamily**-Wert in der **Info.plist**-Datei auf **1** geändert werden. Diese Modifikation erfordert jedoch eine erneute Signierung der IPA-Datei aufgrund von Signaturvalidierungsprüfungen. **Hinweis**: Diese Methode könnte fehlschlagen, wenn die Anwendung Fähigkeiten verlangt, die exklusiv für neuere iPad-Modelle sind, während ein älteres iPhone oder iPod touch verwendet wird. ## Referenzen - [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/index.html) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/) {{#include ../../banners/hacktricks-training.md}}