<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Es wird dringend empfohlen, diese Seite zu lesen, um mehr über die **wichtigsten Teile im Zusammenhang mit der Android-Sicherheit und die gefährlichsten Komponenten in einer Android-Anwendung** zu erfahren:
**ADB** ermöglicht die Steuerung von Geräten entweder über **USB** oder **Netzwerk** von einem Computer aus. Mit diesem Dienstprogramm können Dateien in beide Richtungen **kopiert**, Apps **installiert** und **deinstalliert**, Shell-Befehle **ausgeführt**, Daten **gesichert**, Logs **gelesen** und andere Funktionen ausgeführt werden.
Manchmal ist es interessant, den Anwendungscode zu **ändern**, um auf **versteckte Informationen** zuzugreifen (vielleicht gut verschleierte Passwörter oder Flags). Dann könnte es interessant sein, die APK zu dekompilieren, den Code zu ändern und sie neu zu kompilieren.\
[**In diesem Tutorial** können Sie **lernen, wie man eine APK dekompiliert, den Smali-Code ändert und die APK neu kompiliert** mit der neuen Funktionalität](smali-changes.md). Dies könnte als **Alternative für mehrere Tests während der dynamischen Analyse** sehr nützlich sein, die vorgestellt werden. **Denken Sie also immer an diese Möglichkeit**.
Zunächst sollten Sie zur Analyse einer APK einen Blick auf den Java-Code werfen, indem Sie einen Decompiler verwenden. Bitte [lesen Sie hier, um Informationen zu verschiedenen verfügbaren Decompilern zu finden](apk-decompilers.md).
Durch das Betrachten der **Strings** der APK können Sie nach **Passwörtern**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **API-Schlüsseln**, **Verschlüsselung**, **Bluetooth-UUIDs**, **Tokens** und allem Interessanten suchen... suchen Sie sogar nach Code-Ausführungs-**Hintertüren** oder Authentifizierungs-Hintertüren (fest codierte Admin-Anmeldeinformationen für die App).
Achten Sie besonders auf **Firebase-URLs** und prüfen Sie, ob sie schlecht konfiguriert sind. [Weitere Informationen dazu, was Firebase ist und wie man es ausnutzen kann, finden Sie hier.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
Die **Untersuchung der Dateien einer Anwendung \_Manifest.xml_ und _strings.xml_** kann potenzielle Sicherheitslücken aufdecken. Diese Dateien können mithilfe von Decompilern oder durch Umbenennen der APK-Dateierweiterung in .zip und anschließendes Entpacken darauf zugegriffen werden.
- **Debugfähige Anwendungen**: Anwendungen, die als debugfähig festgelegt sind (`debuggable="true"`) in der _Manifest.xml_-Datei, stellen ein Risiko dar, da sie Verbindungen zulassen, die zu Ausnutzungen führen können. Für ein besseres Verständnis, wie man debugfähige Anwendungen ausnutzt, siehe ein Tutorial zum Auffinden und Ausnutzen von debugfähigen Anwendungen auf einem Gerät.
- **Backup-Einstellungen**: Das Attribut `android:allowBackup="false"` sollte explizit für Anwendungen festgelegt werden, die mit sensiblen Informationen umgehen, um nicht autorisierte Datenbackups über adb zu verhindern, insbesondere wenn das USB-Debugging aktiviert ist.
- **Netzwerksicherheit**: Benutzerdefinierte Netzwerksicherheitskonfigurationen (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ können Sicherheitsdetails wie Zertifikatspins und HTTP-Verkehrseinstellungen angeben. Ein Beispiel ist die Zulassung von HTTP-Verkehr für bestimmte Domänen.
- **Exportierte Aktivitäten und Dienste**: Die Identifizierung exportierter Aktivitäten und Dienste im Manifest kann Komponenten hervorheben, die missbraucht werden könnten. Eine weitere Analyse während des dynamischen Tests kann aufzeigen, wie diese Komponenten ausgenutzt werden können.
- **Inhaltsanbieter und Dateianbieter**: Exponierte Inhaltsanbieter könnten unbefugten Zugriff oder Änderung von Daten ermöglichen. Auch die Konfiguration von Dateianbietern sollte überprüft werden.
- **Broadcast-Empfänger und URL-Schemata**: Diese Komponenten könnten für Ausnutzungen genutzt werden, wobei besonders darauf geachtet werden sollte, wie URL-Schemata für Eingabesicherheitslücken verwaltet werden.
- **SDK-Versionen**: Die Attribute `minSdkVersion`, `targetSDKVersion` und `maxSdkVersion` geben die unterstützten Android-Versionen an und unterstreichen die Bedeutung, veraltete, anfällige Android-Versionen aus Sicherheitsgründen nicht zu unterstützen.
Aus der **strings.xml**-Datei können sensible Informationen wie API-Schlüssel, benutzerdefinierte Schemas und andere Entwicklerhinweise entdeckt werden, was die Notwendigkeit einer sorgfältigen Überprüfung dieser Ressourcen unterstreicht.
**Tapjacking** ist ein Angriff, bei dem eine **bösartige Anwendung** gestartet wird und sich über einer Opferanwendung positioniert. Sobald sie die Opfer-App sichtbar verdeckt, ist ihre Benutzeroberfläche so gestaltet, dass sie den Benutzer dazu verleitet, mit ihr zu interagieren, während sie die Interaktion an die Opfer-App weitergibt.\
Eine **Aktivität** mit dem **`launchMode`** auf **`singleTask` ohne definiertes `taskAffinity`** ist anfällig für Task-Hijacking. Dies bedeutet, dass eine **Anwendung** installiert werden kann und wenn sie vor der echten Anwendung gestartet wird, könnte sie die Aufgabe der echten Anwendung **übernehmen** (so dass der Benutzer mit der **bösartigen Anwendung interagiert, während er glaubt, die echte zu verwenden**).
In Android sind Dateien, die im internen Speicher **gespeichert** sind, ausschließlich für die **App** zugänglich, die sie **erstellt** hat. Diese Sicherheitsmaßnahme wird vom Android-Betriebssystem durchgesetzt und ist im Allgemeinen für die Sicherheitsanforderungen der meisten Anwendungen ausreichend. Manchmal nutzen Entwickler jedoch Modi wie `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE`, um Dateien zwischen verschiedenen Anwendungen zu **teilen**. Diese Modi **beschränken jedoch nicht den Zugriff** auf diese Dateien durch andere Anwendungen, einschließlich potenziell bösartiger.
* Stellen Sie sicher, dass die Verwendung von `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE`**sorgfältig geprüft** wird. Diese Modi können Dateien potenziell für **unerwünschten oder nicht autorisierten Zugriff freigeben**.
* Überprüfen Sie die **Berechtigungen**, die für von der App erstellte Dateien festgelegt sind. Überprüfen Sie insbesondere, ob Dateien **weltweit lesbar oder beschreibbar sind**. Dies kann ein erhebliches Sicherheitsrisiko darstellen, da es jeder **installierten Anwendung** auf dem Gerät, unabhängig von ihrer Herkunft oder Absicht, ermöglichen würde, diese Dateien zu **lesen oder zu ändern**.
* Dateien auf externem Speicher sind **global lesbar und beschreibbar**. Dies bedeutet, dass jede Anwendung oder Benutzer auf diese Dateien zugreifen kann.
* Führen Sie immer eine **Eingabevalidierung** für Daten durch, die aus externem Speicher abgerufen werden. Dies ist entscheidend, da die Daten aus einer nicht vertrauenswürdigen Quelle stammen.
* Das Speichern von ausführbaren Dateien oder Klassendateien auf externem Speicher für das dynamische Laden wird dringend abgeraten.
* Wenn Ihre Anwendung ausführbare Dateien aus externem Speicher abrufen muss, stellen Sie sicher, dass diese Dateien **signiert und kryptografisch überprüft** werden, bevor sie dynamisch geladen werden. Dieser Schritt ist entscheidend für die Aufrechterhaltung der Sicherheitsintegrität Ihrer Anwendung.
Ab Android 4.4 (**API 17**) hat die SD-Karte eine Verzeichnisstruktur, die **den Zugriff einer App auf das Verzeichnis einschränkt, das speziell für diese App vorgesehen ist**. Dies verhindert, dass bösartige Anwendungen Lese- oder Schreibzugriff auf Dateien einer anderen App erhalten.
* **Geteilte Präferenzen**: Android ermöglicht es jeder Anwendung, XML-Dateien einfach im Pfad `/data/data/<packagename>/shared_prefs/` zu speichern, und manchmal ist es möglich, sensible Informationen im Klartext in diesem Ordner zu finden.
* **Datenbanken**: Android ermöglicht es jeder Anwendung, SQLite-Datenbanken einfach im Pfad `/data/data/<packagename>/databases/` zu speichern, und manchmal ist es möglich, sensible Informationen im Klartext in diesem Ordner zu finden.
Aus irgendeinem Grund akzeptieren Entwickler manchmal alle Zertifikate, auch wenn beispielsweise der Hostname nicht mit Zeilen des Codes übereinstimmt wie der folgenden:
Einige Entwickler speichern sensible Daten im lokalen Speicher und verschlüsseln sie mit einem im Code festgelegten/vorhersehbaren Schlüssel. Dies sollte vermieden werden, da durch Reverse Engineering Angreifer vertrauliche Informationen extrahieren könnten.
Entwickler sollten keine **veralteten Algorithmen** verwenden, um **Autorisierungsprüfungen** durchzuführen, Daten zu **speichern** oder **senden**. Einige dieser Algorithmen sind: RC4, MD4, MD5, SHA1... Wenn **Hashes** beispielsweise zum Speichern von Passwörtern verwendet werden, sollten hash-brute-force **resistente** Hashes mit Salz verwendet werden.
* Es wird empfohlen, die APK zu **verschleiern**, um es Angreifern schwerer zu machen, den Reverse-Engineering-Prozess durchzuführen.
* Wenn die App sensibel ist (wie Bank-Apps), sollte sie ihre **eigenen Ü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 **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/Verschleierer zum Erstellen der APK verwendet wurde.
Laut diesem [**Blog-Beitrag**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) ist Superpacking ein Meta-Algorithmus, der den Inhalt einer Anwendung in eine einzige 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 aus dem Dateisystem zu sammeln.
Das Tool [**mariana-trench**](https://github.com/facebook/mariana-trench) ist in der Lage, **Schwachstellen** zu finden, indem es den **Code** der Anwendung **scannt**. Dieses Tool enthält eine Reihe von **bekannten Quellen** (die dem Tool die **Stellen** anzeigen, an denen die **Eingabe vom Benutzer kontrolliert wird**), **Sinks** (die dem Tool **gefährliche Stellen** anzeigen, an denen bösartige Benutzereingaben Schäden verursachen könnten) und **Regeln**. Diese Regeln geben die **Kombination** von **Quellen-Sinks** an, die auf eine Schwachstelle hinweisen.
Eine Anwendung kann Geheimnisse (API-Schlüssel, Passwörter, versteckte URLs, Subdomains...) enthalten, die Sie möglicherweise entdecken können. Sie könnten ein Tool wie [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) verwenden.
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
> Zunächst benötigen Sie eine Umgebung, in der Sie die Anwendung und die gesamte Umgebung installieren können (insbesondere Burp CA-Zertifikat, Drozer und Frida). Daher wird ein gerootetes Gerät (emuliert oder nicht) dringend empfohlen.
Sie können ein **kostenloses Konto** bei: [https://appetize.io/](https://appetize.io) erstellen. Diese Plattform ermöglicht es Ihnen, APKs **hochzuladen** und **auszuführen**, sodass Sie sehen können, wie sich eine APK verhält.
* [**Android Studio**](https://developer.android.com/studio) (Sie können **x86**- und **arm**-Geräte erstellen, und gemäß [**diesen** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**neuesten x86**-Versionen **unterstützen ARM-Bibliotheken** ohne die Notwendigkeit eines langsamen ARM-Emulators).
* [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Kostenlose Version:** Personal Edition, Sie müssen ein Konto erstellen. _Es wird empfohlen, die Version **MIT**__**VirtualBox** herunterzuladen, um potenzielle Fehler zu vermeiden._)
* [**Nox**](https://es.bignox.com) (Kostenlos, unterstützt jedoch kein Frida oder Drozer).
Beim Erstellen eines neuen Emulators auf jeder Plattform gilt: Je größer der Bildschirm ist, desto langsamer wird der Emulator ausgeführt. Wählen Sie also möglichst kleine Bildschirme aus.
Beachten Sie auch, dass Sie im **Konfigurationsmenü der Android-VM in Genymotion** den **Bridge Network-Modus** auswählen können (dies ist nützlich, wenn Sie von einer anderen VM aus eine Verbindung zur Android-VM mit den Tools herstellen).
> Sobald Sie die Anwendung installiert haben, sollten Sie zunächst versuchen, sie zu testen und zu untersuchen, was sie tut, wie sie funktioniert und sich damit vertraut machen.\
> Ich schlage vor, diese anfängliche 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.
Entwickler sollten vorsichtig sein, Debugging-Informationen öffentlich preiszugeben, 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 aufgrund seiner Benutzerfreundlichkeit und Lesbarkeit bevorzugt.
Beachten Sie, dass ab **Android 4.0 und neuer****Anwendungen nur auf ihre eigenen Protokolle zugreifen können**. Anwendungen können also nicht auf Protokolle anderer Apps zugreifen.\
Das auf dem Android basierende Zwischenspeicher-Framework ermöglicht die Kopieren/Einfügen-Funktionalität in Apps, birgt jedoch ein Risiko, da **andere Anwendungen** auf den Zwischenspeicher zugreifen können, was potenziell sensible Daten offenlegen könnte. Es ist entscheidend, die Kopieren/Einfügen-Funktionen für sensible Bereiche einer Anwendung, wie Kreditkartendaten, zu deaktivieren, um Datenlecks zu verhindern.
Wenn eine Anwendung abstürzt und Protokolle speichert, können diese Protokolle Angreifern helfen, insbesondere wenn die Anwendung nicht reverse-engineered werden kann. Um dieses Risiko zu mindern, vermeiden Sie das Protokollieren von Abstürzen, und wenn Protokolle über das Netzwerk übertragen werden müssen, stellen Sie sicher, dass sie über einen SSL-Kanal sicher gesendet werden.
Anwendungen integrieren oft Dienste wie Google Adsense, die aufgrund einer falschen Implementierung durch Entwickler unbeabsichtigt **sensible Daten preisgeben** können. Um potenzielle Datenlecks zu identifizieren, empfiehlt es sich, den Datenverkehr der Anwendung abzufangen und nach sensiblen Informationen zu suchen, die an Drittanbieterdienste gesendet werden.
Die meisten Anwendungen verwenden **interne SQLite-Datenbanken**, um Informationen zu speichern. Während des Pentests sollten Sie einen **Blick** auf die erstellten **Datenbanken**, die Namen der **Tabellen** und **Spalten** sowie alle **gespeicherten Daten** werfen, da Sie möglicherweise **sensible Informationen** finden könnten (was eine Schwachstelle darstellen würde).\
Datenbanken sollten sich unter `/data/data/die.paket.name/databases` befinden, z. B. `/data/data/com.mwr.example.sieve/databases`
Wenn die Datenbank vertrauliche Informationen speichert und **verschlüsselt ist**, Sie jedoch das **Passwort** innerhalb der Anwendung **finden** können, handelt es sich dennoch um eine **Schwachstelle**.
Aus [Drozer-Dokumentationen](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** ermöglicht es Ihnen, die Rolle einer Android-App anzunehmen und mit anderen Apps zu interagieren. Es kann **alles tun, was eine installierte Anwendung tun kann**, wie z. B. die Verwendung 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 Inhaltanbieter auszunutzen, wie Sie in den folgenden Abschnitten erfahren werden.
[**Lesen Sie dies, wenn Sie auffrischen möchten, was eine Android-Aktivität ist.**](android-applications-basics.md#launcher-activity-and-other-activities)\
Wenn eine Aktivität exportiert ist, können Sie deren Bildschirm von einer externen App aus aufrufen. Daher könnten Sie, wenn eine Aktivität mit **sensiblen Informationen****exportiert** ist, die **Authentifizierungsmechanismen umgehen**, um darauf zuzugreifen.
**Hinweis**: MobSF wird die Verwendung von _**singleTask/singleInstance**_ als `android:launchMode` in einer Aktivität als bösartig erkennen, aber aufgrund [dieses](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) ist dies anscheinend nur auf alten Versionen (API-Versionen <21)gefährlich.
Beachten Sie, dass eine Autorisierungsumgehung nicht immer eine Sicherheitslücke darstellt. Es hängt davon ab, wie die Umgehung funktioniert und welche Informationen offengelegt werden.
**Aktivitäten können auch Ergebnisse zurückgeben**. Wenn es Ihnen gelingt, eine exportierte und ungeschützte Aktivität zu finden, die die Methode **`setResult`** aufruft und **sensible Informationen zurückgibt**, liegt eine sensible Informationslecks vor.
Wenn Tapjacking nicht verhindert wird, könnten Sie die exportierte Aktivität missbrauchen, um den **Benutzer unerwartete Aktionen ausführen zu lassen**. Weitere Informationen zu [**was Tapjacking ist, finden Sie unter dem Link**](./#tapjacking).
Content Provider werden im Wesentlichen verwendet, um **Daten zu teilen**. Wenn eine App Content Provider zur Verfügung stellt, können Sie möglicherweise **sensible Daten** daraus extrahieren. Es ist auch interessant, mögliche **SQL-Injections** und **Pfadtraversierungen** zu testen, da sie anfällig sein könnten.
Ein Service ist im Grunde etwas, das Daten **empfangen**, sie **verarbeiten** und eine Antwort **zurückgeben** (oder auch nicht) kann. Wenn eine Anwendung einige Services exportiert, sollten Sie den **Code** überprüfen, um zu verstehen, was er tut, und ihn **dynamisch testen**, um vertrauliche Informationen zu extrahieren, Authentifizierungsmaßnahmen zu umgehen usw.\
[**Erfahren Sie, wie Sie Services mit Drozer ausnutzen können.**](drozer-tutorial/#services)
Sie können Deep Links manuell suchen, Tools wie MobSF oder Skripte wie [dieses hier](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) verwenden.\
Um den **Code, der in der App ausgeführt wird**, zu finden, gehen Sie zur Aktivität, die durch den Deeplink aufgerufen wird, und suchen Sie die Funktion **`onNewIntent`**.
Jedes Mal, wenn Sie einen Deeplink finden, überprüfen Sie, ob **keine sensiblen Daten (wie Passwörter) über URL-Parameter übertragen werden**, da eine andere Anwendung den Deeplink **nachahmen und diese Daten stehlen könnte!**
Sie **müssen auch überprüfen, ob ein Deeplink einen Parameter im Pfad** der URL verwendet, wie z.B.: `https://api.example.com/v1/users/{username}`, in diesem Fall können Sie einen Pfadtraversal erzwingen, indem Sie auf etwas wie zugreifen: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
Beachten Sie, dass Sie bei Auffinden der richtigen Endpunkte innerhalb der Anwendung möglicherweise eine **Open Redirect** verursachen können (wenn ein Teil des Pfads als Domainname verwendet wird), **Accountübernahme** (wenn Sie Benutzerdetails ohne CSRF-Token ändern können und der verwundbare Endpunkt die richtige Methode verwendet) und andere Schwachstellen. Weitere [Informationen dazu hier](http://dphoeniixx.com/2020/12/13-2/).
* **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 die Verwendung von HTTP-Verbindungen zurückgreifen.
* **Verhandlungen während des SSL/TLS-Handshakes sind manchmal schwach**, wobei unsichere Verschlüsselungssuiten verwendet werden. Diese Schwachstelle 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 sich über sichere Kanäle authentifizieren, dann aber über ungesicherte Kanäle für andere Transaktionen kommunizieren. Dieser Ansatz schützt sensible Daten wie Sitzungscookies oder Benutzerdetails nicht vor dem Abfangen durch bösartige Entitäten.
Wir werden uns auf die **Zertifikatsüberprüfung** konzentrieren. Die Integrität des Serverzertifikats muss überprüft werden, um die Sicherheit zu erhöhen. Dies ist entscheidend, da unsichere TLS-Konfigurationen und die Übertragung sensibler Daten über unverschlüsselte Kanäle erhebliche Risiken darstellen können. Für detaillierte Schritte zur Überprüfung von Serverzertifikaten und zur Behebung von Schwachstellen bietet [**diese Ressource**](https://manifestsecurity.com/android-application-security-part-10/) umfassende Anleitungen.
SSL Pinning ist eine Sicherheitsmaßnahme, bei der die Anwendung das Serverzertifikat mit einer im Anwendungscode gespeicherten Kopie vergleicht. Diese Methode ist entscheidend, um MITM-Angriffe zu verhindern. Die Implementierung von SSL Pinning wird für Anwendungen, die sensible Informationen verarbeiten, dringend empfohlen.
Um den HTTP-Verkehr zu inspizieren, ist es erforderlich, das Zertifikat des Proxy-Tools zu **installieren** (z.B. Burp). Ohne Installation dieses Zertifikats könnte der verschlüsselte Verkehr über den Proxy nicht sichtbar sein. Für eine Anleitung zur Installation eines benutzerdefinierten CA-Zertifikats, [**klicken Sie 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 Netzwerksicherheitskonfiguration, 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 Netzwerksicherheitskonfiguration, [**verweisen Sie auf dieses Tutorial**](make-apk-accept-ca-certificate.md).
Wenn SSL Pinning implementiert ist, ist es erforderlich, es zu umgehen, um den HTTPS-Verkehr zu inspizieren. Dafür stehen verschiedene Methoden zur Verfügung:
* Automatisches **Ändern** der **APK**, um das SSL-Pinning mit [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) zu **umgehen**. Der größte Vorteil dieser Option ist, dass Sie kein Root benötigen, um das SSL Pinning zu umgehen, aber Sie müssen die Anwendung löschen und die neue installieren, und dies funktioniert nicht immer.
* Sie könnten **Frida** (unten diskutiert) verwenden, um diesen Schutz zu umgehen. Hier finden Sie 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/)
* Sie können auch versuchen, das **SSL Pinning automatisch zu umgehen**, indem Sie [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` verwenden
* Sie können auch versuchen, das **SSL Pinning automatisch zu umgehen**, indem Sie die **MobSF-Dynamikanalyse** verwenden (unten erklärt)
* Wenn Sie der Meinung sind, dass Sie immer noch Datenverkehr erfassen, können Sie versuchen, den Datenverkehr an Burp weiterzuleiten, indem Sie iptables verwenden. Lesen Sie diesen Blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
Es ist auch wichtig, nach gängigen Web-Schwachstellen in der Anwendung zu suchen. Detaillierte Informationen zur Identifizierung und Behebung dieser Schwachstellen sind über den Rahmen dieser Zusammenfassung hinaus umfassend abgedeckt.
**Sie können auf die laufende Anwendung zugreifen und Methoden zur Laufzeit anhängen, um das Verhalten zu ändern, Werte zu ändern, Werte zu extrahieren, anderen Code auszuführen...**\
* Einige "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)
* Versuchen Sie, Anti-Debugging-/Anti-Frida-Mechanismen zu umgehen, indem Sie Frida wie in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) angegeben laden (Tool [linjector](https://github.com/erfur/linjector-rs))
In Android ist der Keystore der beste Ort, um sensible Daten zu speichern, jedoch ist es mit ausreichenden Berechtigungen immer noch **möglich darauf zuzugreifen**. Da Apps dazu neigen, hier **sensible Daten im Klartext zu speichern**, sollten Pentests dies überprüfen, da ein Root-Benutzer oder jemand mit physischem Zugriff auf das Gerät in der Lage sein könnte, diese Daten zu stehlen.
Um auf die Daten im Keystore zuzugreifen, könnten Sie dieses Frida-Skript verwenden: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
Mit dem folgenden Frida-Skript könnte es möglich sein, die **Fingerabdruckauthentifizierung** zu umgehen, die Android-Apps möglicherweise durchführen, um **bestimmte sensible Bereiche zu schützen:**
Wenn Sie eine Anwendung im Hintergrund platzieren, speichert Android eine **Momentaufnahme der Anwendung**, sodass beim Wiederherstellen in den Vordergrund das Bild geladen wird, bevor die App geladen wird, sodass es aussieht, als ob die App schneller geladen wurde.
Wenn diese Momentaufnahme jedoch **sensible Informationen** enthält, könnte jemand, der Zugriff auf die Momentaufnahme hat, diese Informationen **stehlen** (beachten Sie, dass Sie Root-Zugriff benötigen, um darauf zuzugreifen).
Android bietet eine Möglichkeit, **das Erfassen von Bildschirmfotos zu verhindern, indem der FLAG\_SECURE** Layout-Parameter festgelegt wird. Durch Verwendung dieses Flags werden die Fensterinhalte als sicher behandelt, sodass sie nicht in Bildschirmfotos erscheinen oder auf nicht sicheren Displays angezeigt werden können.
Dieses Tool könnte Ihnen helfen, verschiedene Tools während der dynamischen Analyse zu verwalten: [https://github.com/NotSoSecure/android\_application\_analyzer](https://github.com/NotSoSecure/android\_application\_analyzer)
Entwickler erstellen oft Proxy-Komponenten wie Aktivitäten, Dienste und Broadcast-Empfänger, die diese Intents verarbeiten und sie an Methoden wie `startActivity(...)` oder `sendBroadcast(...)` weitergeben, was riskant sein kann.
Die Gefahr besteht darin, dass Angreifer nicht exportierte App-Komponenten auslösen oder auf sensible Inhaltsanbieter zugreifen können, indem sie diese Intents umleiten. Ein bemerkenswertes Beispiel ist die `WebView`-Komponente, die URLs in `Intent`-Objekte über `Intent.parseUri(...)` umwandelt und sie dann ausführt, was potenziell zu bösartigen Intent-Injektionen führen kann.
* **SQL-Injektion:** Bei der Arbeit mit dynamischen Abfragen oder Content-Providern stellen Sie sicher, dass Sie parametrisierte Abfragen verwenden.
* **JavaScript-Injektion (XSS):** Stellen Sie sicher, dass JavaScript- und Plugin-Unterstützung für alle WebViews deaktiviert ist (standardmäßig deaktiviert). [Weitere Informationen hier](webview-attacks.md#javascript-enabled).
* **Ewige Cookies:** In mehreren Fällen, wenn die Android-Anwendung die Sitzung beendet, wird das Cookie nicht widerrufen oder es könnte sogar auf der Festplatte gespeichert sein.
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
**Vulnerabilitätsbewertung der Anwendung** mit einem benutzerfreundlichen webbasierten Frontend. Sie können auch eine dynamische Analyse durchführen (aber Sie müssen die Umgebung vorbereiten).
Beachten Sie, dass MobSF **Android**(apk)**, IOS**(ipa) **und Windows**(apx)-Anwendungen analysieren kann (_Windows-Anwendungen müssen von einem auf einem Windows-Host installierten MobSF analysiert werden_).\
Wenn Sie außerdem eine **ZIP**-Datei mit dem Quellcode einer **Android**- oder einer **IOS**-App erstellen (gehen Sie zum Stammverzeichnis der Anwendung, wählen Sie alles aus und erstellen Sie eine ZIP-Datei), kann sie ebenfalls analysiert werden.
MobSF ermöglicht auch das **Diff/Vergleichen** von Analysen und die Integration von **VirusTotal** (Sie müssen Ihren API-Schlüssel in _MobSF/settings.py_ festlegen und aktivieren: `VT_ENABLED = TRUE``VT_API_KEY = <Ihr API-Schlüssel>``VT_UPLOAD = TRUE`). Sie können auch `VT_UPLOAD` auf `False` setzen, dann wird der **Hash** anstelle der Datei **hochgeladen**.
**MobSF** kann auch bei der **dynamischen Analyse** in **Android** sehr hilfreich sein, aber in diesem Fall müssen Sie MobSF und **Genymotion** auf Ihrem Host installieren (eine VM oder Docker funktionieren nicht). _Hinweis: Sie müssen zuerst eine VM in Genymotion **starten** und **dann MobSF**._\
* **Anwendungsdaten ausgeben** (URLs, Protokolle, Zwischenablage, von Ihnen erstellte Screenshots, von "**Exported Activity Tester**" erstellte Screenshots, E-Mails, SQLite-Datenbanken, XML-Dateien und andere erstellte Dateien). All dies erfolgt automatisch, außer den Screenshots, die Sie drücken müssen, wenn Sie einen Screenshot wünschen, oder Sie müssen "**Exported Activity Tester**" drücken, um Screenshots aller exportierten Aktivitäten zu erhalten.
Ab Android **Versionen > 5** wird **Frida automatisch gestartet** und die globalen **Proxy**-Einstellungen werden so konfiguriert, dass der Verkehr **erfasst** wird. Es wird nur der Verkehr aus der getesteten Anwendung erfasst.
Standardmäßig werden auch einige Frida-Skripte verwendet, um **SSL-Pinning zu umgehen**, **Root-Erkennung** und **Debugger-Erkennung** sowie **interessante APIs zu überwachen**.\
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 gehakte Methoden, übergebene Argumente und zurückgegebene Werte zu sehen (dies erscheint nach dem Drücken von "Start Instrumentation").\
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 verfügt auch über **mehrere vordefinierte Skripte**, die Sie laden können (Sie können weitere unter `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` hinzufügen), wählen Sie sie einfach aus, drücken Sie "**Load**" und drücken Sie "**Start Instrumentation**" (Sie können die Protokolle dieser Skripte im "**Frida Live Logs**" sehen).
* **Zeichenfolgenvergleiche erfassen**: Kann sehr nützlich sein. Es zeigt die **2 verglichenen Zeichenfolgen** und ob das Ergebnis True oder False war.
* **Methoden der Klassen auflisten**: Geben Sie den Klassennamen ein (wie "java.io.File") und es werden alle Methoden der Klasse angezeigt.
* **Klassenmethoden verfolgen**: Eine **ganze Klasse** verfolgen (Eingaben und Ausgaben aller Methoden der Klasse anzeigen). Denken Sie daran, dass MobSF standardmäßig mehrere interessante Android-API-Methoden verfolgt.
Nachdem Sie das Hilfsmodul ausgewählt haben, das Sie verwenden möchten, müssen Sie auf "**Start Intrumentation**" drücken, und Sie sehen alle Ausgaben in "**Frida Live Logs**".
Mobsf bietet Ihnen auch eine Shell mit einigen **adb**-Befehlen, **MobSF-Befehlen** und gängigen **Shell-Befehlen** am unteren Rand der Seite für die dynamische Analyse. Einige interessante Befehle:
Wenn der HTTP-Verkehr erfasst wird, können Sie eine unansehnliche Ansicht des erfassten Verkehrs am unteren Rand von "**HTTP(S) Traffic**" oder eine schönere Ansicht im grünen Bereich von "**Start HTTPTools**" sehen. Von der zweiten Option aus können Sie die **erfassten Anfragen** an **Proxys** wie Burp oder Owasp ZAP **senden**.\
Um dies zu tun, _schalten Sie Burp ein -->__schalten Sie Intercept aus --> in MobSB HTTPTools wählen Sie die Anfrage aus_ --> drücken Sie "**An Fuzzer senden**" --> _wählen Sie die Proxy-Adresse_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Nach Abschluss der dynamischen Analyse mit MobSF können Sie auf "**Start Web API Fuzzer**" drücken, um **HTTP-Anfragen zu fuzz** und nach Schwachstellen zu suchen.
Nach 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 wie folgt beheben:
Dieses Tool verwendet einige **Hooks**, um Sie darüber zu informieren, **was in der Anwendung passiert**, während Sie eine **dynamische Analyse** durchführen.
Dieses Tool ist darauf ausgelegt, nach mehreren **sicherheitsrelevanten Schwachstellen von Android-Anwendungen** zu suchen, entweder im **Quellcode** oder in **verpackten APKs**. Das Tool ist auch **in der Lage, ein "Proof-of-Concept" bereitstellbares APK** und **ADB-Befehle** zu erstellen, um einige der gefundenen Schwachstellen auszunutzen (exponierte Aktivitäten, Intents, Tapjacking...). Wie bei Drozer ist es nicht erforderlich, das Testgerät zu rooten.
SUPER ist eine Befehlszeilenanwendung, die in Windows, MacOS X und Linux verwendet werden kann, um _.apk_ Dateien auf Schwachstellen zu untersuchen. Dies geschieht durch das Dekomprimieren von APKs und das Anwenden einer Reihe von Regeln zur Erkennung dieser Schwachstellen.
Alle Regeln sind in einer `rules.json`-Datei zentriert, und jedes Unternehmen oder Tester kann seine eigenen Regeln erstellen, um zu analysieren, was sie benötigen.
StaCoAn ist ein plattformübergreifendes Tool, das Entwicklern, Bug-Bounty-Jägern und ethischen Hackern bei der Durchführung einer statischen Codeanalyse von mobilen Anwendungen hilft.
Das Konzept besteht darin, dass Sie Ihre mobile Anwendungsdatei (eine .apk- oder .ipa-Datei) in die StaCoAn-Anwendung ziehen und ablegen, und diese wird einen visuellen und tragbaren Bericht für Sie generieren. Sie können die Einstellungen und Wortlisten anpassen, um eine personalisierte Erfahrung zu erhalten.
AndroBugs Framework ist ein Android-Schwachstellenanalyse-System, das Entwicklern oder Hackern hilft, potenzielle Sicherheitslücken in Android-Anwendungen zu finden.\
**Androwarn** ist ein Tool, dessen Hauptziel es ist, potenziell bösartige Verhaltensweisen zu erkennen und den Benutzer davor zu warnen, die von einer Android-App entwickelt wurden.
Die Erkennung erfolgt durch die **statische Analyse** des Dalvik-Bytecodes der Anwendung, dargestellt als **Smali**, mit der [`androguard`](https://github.com/androguard/androguard) Bibliothek.
Dieses Tool sucht nach **üblichem Verhalten von "schlechten" Anwendungen** wie: Exfiltration von Telekommunikationsidentifikatoren, Abfangen von Audio-/Videoflüssen, Modifikation von PIM-Daten, Ausführung beliebigen Codes...
**MARA** ist ein **M**obile **A**pplication **R**everse Engineering und **A**nalysis Framework. Es ist ein Tool, das gängige Tools für das Reverse Engineering und die Analyse von mobilen Anwendungen zusammenführt, um bei der Prüfung von mobilen Anwendungen gegen die OWASP-Sicherheitsbedrohungen zu helfen. Sein Ziel ist es, diese Aufgabe für mobile Anwendungs-Entwickler und Sicherheitsfachleute einfacher und benutzerfreundlicher zu gestalten.
Beachten Sie, dass je nach dem Service und der Konfiguration, die Sie zum Obfuskieren des Codes verwenden, Geheimnisse obfuskiert sein können oder nicht.
Von [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** ist ein Open-Source-Befehlszeilentool, das Java-Code verkleinert, optimiert und obfuskiert. Es kann Bytecode optimieren sowie ungenutzte Anweisungen erkennen und entfernen. ProGuard ist freie Software und wird unter der GNU General Public License, Version 2, verteilt.
**DeGuard kehrt den Vorgang der Obfuskation um, der von Android-Obfuskationstools durchgeführt wurde. Dies ermöglicht zahlreiche Sicherheitsanalysen, einschließlich Codeinspektion und Vorhersage von Bibliotheken.**
Es ist ein **generischer Android-Deobfuscator.** Simplify **führt praktisch eine App aus**, um ihr Verhalten zu verstehen, und versucht dann, den Code zu optimieren, damit er sich identisch verhält, aber für einen Menschen einfacher zu verstehen ist. Jede Optimierungsart ist einfach und generisch, daher spielt es keine Rolle, welche spezifische Art der Obfuskation verwendet wird.
APKiD gibt Ihnen Informationen darüber, **wie eine APK erstellt wurde**. Es identifiziert viele **Compiler**, **Packer**, **Obfuskatoren** und andere seltsame Dinge. Es ist [_PEiD_](https://www.aldeid.com/wiki/PEiD) für Android.
AndroL4b ist eine Android-Sicherheitsvirtual Machine auf Basis von Ubuntu-Mate, die die neuesten Frameworks, Tutorials und Labs von verschiedenen Sicherheitsgeeks und Forschern für Reverse Engineering und Malware-Analyse enthält.
Treten Sie dem [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held mit</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories einreichen.