iOS Mobile Application Testing - Eine Einführung

iOS Mobile Application Testing

Eine Einführung

Ian Boschung
von Ian Boschung
am 15. Februar 2024
Lesezeit: 13 Minuten

Keypoints

Grundlagen des iOS Pentesting

  • Der Einstieg in die Analyse von mobilen Apps ist nicht schwer
  • Eine Vielzahl an Tools hilft beim durchführen verschiedener Tests
  • Statische und dynamische Analyse sind die beiden grossen Bereiche des mobilen Pentesting
  • Die sich schnell verändernde Umgebung ist eine grosse Herausforderung

Mobile Anwendungen erfreuen sich heutzutage grosser Beliebtheit und werden unter anderem für soziale Medien, Shopping und Bankgeschäfte verwendet. Mit der zunehmenden Verwendung mobiler Apps steigt auch die Menge an sensitiven Daten auf den Smartphones an und die Sicherheit der Apps wird zu einem immer wichtigeren Thema. Der Markt für Smartphone-Betriebssysteme ist in zwei Systeme unterteilt: Android und iOS. Beide funktionieren leicht unterschiedlich und eine für iOS entwickelte App kann nicht auf Android ausgeführt werden und umgekehrt. Dies erschwert das Leben von Softwareentwicklern und Sicherheitstestern, die dieselbe Anwendung zweimal schreiben bzw. testen und die Sicherheitsmerkmale beider Betriebssysteme kennen müssen. In einem früheren Blogbeitrag von Tomaso Vasella wurden bereits die Grundlagen der Analyse von Android-Apps gezeigt. In diesem Artikel werden ähnliche Techniken für iOS-Apps vorgestellt, um einen Überblick über die verfügbaren Tools und die Unterschiede zwischen den beiden Systemen zu geben.

Alle in diesem Artikel gezeigten Tools können auf Geräten ohne jailbreak ausprobiert werden. Auch wenn bestimmte Sicherheitsaspekte nur mit jailbreak getestet werden können und ein gründlicher Pentest beide Arten von Geräten umfassen sollte, soll es in diesem Artikel darum gehen, einen leicht zugänglichen Einstieg ins iOS App testing zu zeigen.

Das IPA-Package auftreiben

iOS-Apps werden in IPA-Packages ausgeliefert, die ähnlich wie apk-Dateien bei Android sind. Die ausführbaren Dateien in einem IPA werden mit einem DRM (Digital Rights Management) namens FairPlay geschützt und gespeichert. Um eine unverschlüsselte Version der ausführbaren Datei zu erhalten, gibt es die folgenden Möglichkeiten:

  1. Die App auf einem Gerät mit Jailbreak starten und die unverschlüsselte Binärdatei aus dem Speicher lesen.
  2. Eine unverschlüsselte Version von jemandem aus dem Internet herunterladen (dies sollte mit besonderer Vorsicht geschehen, da es keine Garantie dafür gibt, dass die App nicht verändert wurde).
  3. Eine unverschlüsselte Version direkt vom Entwickler erhalten. Dies geschieht häufig bei Pentests.

Für den Rest dieses Artikels wird die absichtlich unsichere App iGoat-Swift verwendet. Der Quellcode und das unverschlüsselte IPA können von github heruntergeladen werden.

Anatomie von iOS-Apps

Ein IPA-Paket ist eine Zip-Datei, die die ausführbaren Dateien, UI-Definitionen und weitere Ressourcenfiles enthält. Nachdem es entpackt ist, kann der Inhalt der iGoat-App aufgelistet werden:

> Datei iGoat-Swift.ipa
iGoat-Swift.ipa: Zip-Archivdaten, mindestens v1.0 zu extrahieren, Kompressionsmethode=stored

> unzip -q iGoat-Swift.ipa -d iGoat-Swift-app

> ls iGoat-Swift-app
AppThinning.plist Nutzdaten

> ls -lX iGoat-Swift-app/Payload/iGoat-Swift.app
gesamt 6276
drwxr-xr-x 3 iabo iabo 4096 Apr 18 2020 Frameworks
-rw-r--r-- 1 iabo iabo 8 Apr 18 2020 PkgInfo
drwxr-xr-x 2 iabo iabo 4096 Apr 18 2020 _CodeSignature
-rwxr-xr-x 1 iabo iabo 5648352 Apr 18 2020 iGoat-Swift
drwxr-xr-x 2 iabo iabo 4096 Apr 18 2020 SVProgressHUD.bundle
-rw-r--r-- 1 iabo iabo 470543 Apr 18 2020 Assets.car
-rwxr-xr-x 1 iabo iabo 595 Apr 18 2020 KRvWAssociates.html
...
-rwxr-xr-x 1 iabo iabo 2961 Apr 18 2020 splash.html
drwxr-xr-x 4 iabo iabo 4096 Apr 18 2020 Base.lproj
-rw-r--r-- 1 iabo iabo 7512 Apr 18 2020 embedded.mobileprovision
drwxr-xr-x 2 iabo iabo 4096 Apr 18 2020 CoreData.momd
drwxr-xr-x 2 iabo iabo 4096 Apr 18 2020 AboutCell.nib
...
drwxr-xr-x 2 iabo iabo 4096 Apr 18 2020 YapExerciseVC.nib
-rw-r--r-- 1 iabo iabo 48407 Apr 18 2020 Assets.plist
-rw-r--r-- 1 iabo iabo 81 Apr 18 2020 Berechtigungsnachweise.plist
-rw-r--r-- 1 iabo iabo 1517 Apr 18 2020 Info.plist
-rw-r--r-- 1 iabo iabo 3058 Apr 18 2020 AppIcon29x29@2x.png
...
-rw-r--r-- 1 iabo iabo 15151 Apr 18 2020 AppIcon60x60@3x.png
-rwxr-xr-x 1 iabo iabo 324 Apr 18 2020 README.txt
-rwxr-xr-x 1 iabo iabo 67 Apr 18 2020 Sentinel.txt

Die wichtigen Dateien in diesem Ordner sind:

MobSF für die statische Analyse verwenden

Wenn man versucht, sich einen Überblick über eine Anwendung und ihre Konfiguration zu verschaffen, kann MobSF ein gutes Tool sein. Anstatt die verschiedenen Dateien zu durchsuchen und verschiedene Tools zu verwenden, um die benötigten Informationen zu extrahieren, erledigt MobSF all das und zeigt einen Überblick über die App an. MobSF läuft aus einem Docker-Container heraus und bietet eine Webschnittstelle. Es kännte auch dynamische Analysen durchführen, allerdings nur in Verbindung mit proprietärer, kostspieliger Software zur Simulation von iOS-Umgebungen.

Screenshot der MobSF-Übersichtsseite

Reverse Engineering

Das Dekompilieren und Reverse Engineering von iOS-Apps ist ähnlich wie bei anderen kompilierten Sprachen wie c. Eine kurze Einführung in dieses Thema finden Sie in diesem Artikel. Zum grundlegenden Reverse Engineering gehören die String-Analyse mit dem Befehl string und die Extraktion von Metadaten mit dem Befehl otool (nur macOS). Um tief in den Code einer Anwendung einzutauchen, müssen vollständige Disassembler/Decompiler verwendet werden. Die bekanntesten Tools hierfür sind Ghidra, radare2 und IDA Pro (kommerziell). Im Vergleich zu Android-Apps ist das Reverse Engineering bei iOS mühsamer. Der Grund dafür ist die zugrunde liegende Programmiersprache: Der von Java verwendete Bytecode speichert mehr Informationen als der Assembler-Code, in dem eine iOS-App ausgeliefert wird.

Dynamische Analyse mit Objection

Nachdem wir nun wissen, wie man ein iOS IPA-Paket analysiert, können wir uns dem zweiten grossen Bereich des Testens zuwenden: Die dynamische Analyse, d.h. die Analyse der App während sie auf einem Gerät läuft. In diesem Artikel werden wir uns auf das Tool objection konzentrieren. Objection bietet sich für die dynamische Analyse an, weil damit einfach eine App so verändert werden kann, dass man sie auf einem Gerät ohne jailbreak laufen lassen kann und sich trotzdem mit einem Prozess der App verbinden kann. Dieser Vorgang nennt sich “patchen”. Hinweis: Das Patchen von iOS-Anwendungen funktioniert nur unter macOS.

Um ein IPA zu patchen und auszuführen, folgen wir den Anweisungen auf der Webseite von objection. Nachdem wir Objection mit dem Befehl objection explore mit der gepatchten Anwendung verbunden haben, können wir leicht auf viele Informationen zugreifen, die wir bereits während der statischen Analyse gesehen haben, aber auch auf einige weitere Informationen, die nur in einer laufenden App-Instanz verfügbar sind. Die wichtigsten Befehle aus der Sicht eines Pentesters sind die folgenden:

OWASP.iGoat-Swifth.iabo on (iPhone: 16.0) [usb] # ls
NSFileType  Perms  NSFileProtection  Read  Write  Owner           Group           Size       Creation                   Name
----------  -----  ----------------  ----  -----  --------------  --------------  ---------  -------------------------  --------------------------------------
Directory     493  None              True  False  _installd (33)  _installd (33)  160.0 B    1970-01-01 00:00:00 +0000  WebkitCacheExerciseVC.nib
Regular       420  None              True  False  _installd (33)  _installd (33)  81.0 B     2024-01-30 12:43:58 +0000  Credentials.plist
Regular       420  None              True  False  _installd (33)  _installd (33)  463.0 B    2024-01-30 12:43:58 +0000  rutger.html
...
Regular       420  None              True  False  _installd (33)  _installd (33)  327.0 B    2024-01-30 12:43:58 +0000  mansi.html

Readable: True  Writable: False

OWASP.iGoat-Swifth.iabo on (iPhone: 16.0) [usb] # ios plist cat Credentials.plist
{
    Password = "Secret@123";
    User = admin;
}

Screenshot von iGoat Plist challenge

OWASP.iGoat-Swifth.iabo on (iPhone: 16.0) [usb] # ios nsuserdefaults get
{
    AKLastEmailListRequestDateKey = "2024-01-30 12:18:39 +0000";
    AKLastIDMSEnvironment = 0;
    AddingEmojiKeybordHandled = 1;
    AppleLanguages =     (
        "de-CH"
    );
    PIN = 53cr3tP;
    ...
}

OWASP.iGoat-Swifth.iabo on (iPhone: 16.0) [usb] # ios keychain dump
Note: You may be asked to authenticate using the devices passcode or TouchID
Save the output by adding `--json keychain.json` to this command
Dumping the iOS keychain...
Created                    Accessible    ACL   Type      Account  Service   Data
-------------------------  ------------  ----  --------  -------  --------  -----
2024-01-30 15:47:39 +0000  WhenUnlocked  None  Password  iGoat    SaveUser  taoGi

Screenshot von iGoat Keychain challenge

Objection ist auch für Android-Smartphones verfügbar und bietet noch viel mehr fortgeschrittene Funktionen wie Methodenüberwachung, Hooking und sogar das Ersetzen einer Funktion durch eigenen Code.

Dynamische Analyse: Web-Requests mit Burp anschauen und verändern

Viele Apps stellen eine Verbindung zu einem Webserver her, um Daten mit einer zentralen Datenbank auszutauschen. Um diesen Datenverkehr zu analysieren, können ähnliche Tools wie bei Sicherheitstests von Webseiten eingesetzt werden, zum Beispiel Burp Proxy. Um verschlüsselten https-Verkehr abzufangen und zu analysieren, muss der Proxy die Anfragen entschlüsseln und das Zertifikat des Proxys muss vom iOS-Gerät als vertrauenswürdig eingestuft werden. Glücklicherweise ist es mit Burp einfach, das Zertifikat auf einem iPhone zu installieren. Nachdem der Proxy gestartet wurde, kann man auf dem iOS Gerät mit dem Browser die IP-Adresse des Proxys öffnen. Auf der angezeigten Burp-Woillkommensseite hat es oben rechts einen Button, um das Zertifikat zu installieren. Nach dem akzeptieren der Popups muss das Zertifikat dann noch in den Systemeinstellungen akzeptiert werden.

Burp-Willkommensseite mit CA-Installationsschaltfläche

Burp CA in den iOS-Einstellungen installieren

Abfangen von iOS-Datenverkehr mit Burp

Je nach App reicht dies noch nicht aus, um den Datenverkehr mit Burp abzufangen: Certificate Pinning ist eine Sicherheitsmassnahme, die die Sicherheit erhöhen soll und nur ein ganz bestimmtes Serverzertifikat akzeptiert. Je nach Implementierung kann objection oder ein Gerät mit jailbreak verwendet werden um diese Massnahme zu umgehen.

Fazit

Auch ohne ein Gerät mit jailbreak ist eine allgemeine Analyse und ein Sicherheitstest von iOS-Anwendungen möglich. Es gibt eine Vielzahl von freien Open-Source-Tools, die jeweils ein bestimmtes Testszenario abdecken können. Absichtlich verwundbare Apps helfen dabei, die Fähigkeiten eines Tools zu testen und die Entdeckung und Ausnutzung von Schwachstellen zu üben. Eine Herausforderung für Sicherheitstester besteht darin, mit der sich verändernden Umgebung Schritt zu halten: Mit neuen iOS-Versionen werden neue Sicherheitsmassnahmen eingeführt, die bestimmte Tools unbrauchbar machen können und einige Tools werden lange Zeit nicht aktualisiert, während häufig neue erscheinen.

Über den Autor

Ian Boschung

Ian Boschung nimmt seit dem Gymnasium an Programmierwettbewerben teil und hat während des Studiums an der ETH mit einem Master in Elektrotechnik & Infromationstechnologie seine Leidenschaft für Cyber Security entdeckt. Er fokussiert sich auf die Sicherheitsüberprüfung von Webapplikationen und Linux/Unix-Systemen.

Links

Sie wollen die Sicherheit Ihrer Firewall prüfen?

Unsere Spezialisten kontaktieren Sie gern!

×
Security Testing

Security Testing

Tomaso Vasella

Active Directory-Zertifikatsdienste

Active Directory-Zertifikatsdienste

Eric Maurer

Fremde Workloadidentitäten

Fremde Workloadidentitäten

Marius Elmiger

Active Directory-Zertifikatsdienste

Active Directory-Zertifikatsdienste

Eric Maurer

Sie wollen mehr?

Weitere Artikel im Archiv

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

Sie wollen mehr?

Weitere Artikel im Archiv