Wie Sie Ihre Online-Konten schützen können
Ian Boschung
Grundlagen des iOS Pentesting
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.
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:
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.
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:
<appName>
— In diesem Fall iGoat-Swift. Das kompilierte, ausführbare Programm. Mit dem folgenden Befehl (macOS) kann der Verschlüsselungsstatus überprüft werden: > otool -l <Anwendungsname> | grep -A 4 LC_ENCRYPTION_INFO
Info.plist
— Eine Datei mit Informationen über die Anwendung, welche als xml formatiert sind und Key/Value Paare enthält._CodeSignature/
— Enthält eine Datei mit einer Signatur über alle Dateien, um die Integrität der Anwendung zu gewährleistenCoreData.momd
— Platz für die Datenspeicherung, normalerweise in Form einer SQLite-Datenbank. Die Verschlüsselung wird dem App-Entwickler überlassen.PkgInfo
— Enthält einige der Informationen der Datei Info.plist in einem speziellen Format. Diese Datei ist optional und kann zur Verbesserung der Leistung hinzugefügt werden..lproj
— Dateien, die für die Internationalisierung verwendet werden..nib
, .xib
, .storyboard
— Dateien mit UI-DefinitionenFrameworks/
, Plugins/
— Enthält native Bibliotheken und FrameworksWenn 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.
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.
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:
ls
zeigt uns die Dateien im Paket an.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
ios plist cat <Dateiname>.plist
zeigt den Inhalt von plist-Dateien an. Wir können dies verwenden, um die Plist-Challenge in der iGoat-App zu lösen.OWASP.iGoat-Swifth.iabo on (iPhone: 16.0) [usb] # ios plist cat Credentials.plist { Password = "Secret@123"; User = admin; }
ios nsuserdefaults get
zeigt, welche Daten im NSUserdefaults-Speicher gespeichert sind. Wir können dies verwenden, um die NSUserDefaults-Challenge in der iGoat-App zu lösen.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; ... }
ios keychain dump
gibt den Inhalt des Schlüsselbundes aus, einem speziellen Speicher für iOS-Anwendungen. Wir können dies verwenden, um die Schlüssel-Challenge in der iGoat-App zu lösen.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
ios jailbreak simulate
und ios jailbreak disable
: Diese Befehle sind nützlich, um zu testen, ob die Jailbreak-Erkennung einer App richtig implementiert wurde oder nicht.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.
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.
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.
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.
Unsere Spezialisten kontaktieren Sie gern!
Ian Boschung
Unsere Spezialisten kontaktieren Sie gern!