Android Applications Pentesting
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Tritt dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Hacking Einblicke Engagiere dich mit Inhalten, die in den Nervenkitzel und die Herausforderungen des Hackens eintauchen
Echtzeit-Hack-Nachrichten Bleibe auf dem Laufenden über die schnelllebige Hacking-Welt durch Echtzeit-Nachrichten und Einblicke
Neueste Ankündigungen Bleibe informiert über die neuesten Bug-Bounties und wichtige Plattform-Updates
Tritt uns auf Discord bei und beginne noch heute mit den besten Hackern zusammenzuarbeiten!
Es wird dringend empfohlen, diese Seite zu lesen, um über die wichtigsten Teile in Bezug auf die Android-Sicherheit und die gefährlichsten Komponenten in einer Android-Anwendung informiert zu sein:
Android Applications BasicsDies ist das Hauptwerkzeug, das du benötigst, um eine Verbindung zu einem Android-Gerät (emuliert oder physisch) herzustellen. ADB ermöglicht die Steuerung von Geräten entweder über USB oder Netzwerk von einem Computer aus. Dieses Dienstprogramm ermöglicht das Kopieren von Dateien in beide Richtungen, die Installation und Deinstallation von Apps, die Ausführung von Shell-Befehlen, das Sichern von Daten, das Lesen von Protokollen und andere Funktionen.
Sieh dir die folgende Liste von ADB-Befehlen an, um zu lernen, wie man ADB verwendet.
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 sie neu zu kompilieren. In diesem Tutorial kannst du lernen, wie man eine APK dekompiliert, Smali-Code ändert und die APK mit der neuen Funktionalität neu kompiliert. Dies könnte sehr nützlich sein als Alternative für mehrere Tests während der dynamischen Analyse, die präsentiert werden. Denke immer an diese Möglichkeit.
APK vom Gerät extrahieren:
Fügen Sie alle Splits und Basis-APKs mit APKEditor zusammen:
Zunächst sollten Sie beim Analysieren einer APK einen Blick auf den Java-Code mit einem Decompiler werfen. Bitte, lesen Sie hier, um Informationen über verschiedene verfügbare Decompiler zu finden.
Wenn Sie sich die Strings der APK ansehen, können Sie nach Passwörtern, URLs (https://github.com/ndelphit/apkurlgrep), API-Schlüsseln, Verschlüsselung, Bluetooth-UUIDs, Tokens und allem Interessanten suchen... suchen Sie sogar nach Codeausführungs-Backdoors oder Authentifizierungs-Backdoors (hardcodierte Admin-Anmeldeinformationen für die App).
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 ausnutzen kann, finden Sie hier.
Die Untersuchung der _Manifest.xml** und **strings.xml_** Dateien 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.
Netzwerksicherheit: Benutzerdefinierte Netzwerksicherheitskonfigurationen (android:networkSecurityConfig="@xml/network_security_config"
) in res/xml/ können Sicherheitsdetails wie Zertifikatspinning und HTTP-Verkehrseinstellungen festlegen. 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 ausnutzen kann.
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.
Broadcast-Empfänger und URL-Schemata: Diese Komponenten könnten für Ausnutzungen verwendet werden, wobei besonderes Augenmerk darauf gelegt werden sollte, wie URL-Schemata für Eingabeverwundbarkeiten verwaltet werden.
SDK-Versionen: Die Attribute minSdkVersion
, targetSDKVersion
und maxSdkVersion
geben die unterstützten Android-Versionen an und heben die Bedeutung hervor, 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 Schemata und andere Entwicklernotizen 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 eine 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 weiterleitet. In der Tat blendet es den Benutzer aus, sodass er nicht weiß, dass er tatsächlich Aktionen auf der Opfer-App ausführt.
Weitere Informationen finden Sie in:
TapjackingEine Aktivität, deren launchMode
auf singleTask
ohne definierte taskAffinity
festgelegt ist, ist anfällig für Task Hijacking. Das bedeutet, dass eine Anwendung installiert werden kann und, wenn sie vor der echten Anwendung gestartet wird, die Aufgabe der echten Anwendung übernehmen könnte (sodass der Benutzer mit der bösartigen Anwendung interagiert, während er denkt, er verwendet die echte).
Weitere Informationen finden Sie in:
Android Task HijackingInterner Speicher
In Android sind Dateien, die im internen Speicher gespeichert sind, so konzipiert, dass sie ausschließlich von der App, die sie erstellt hat, zugänglich sind. Diese Sicherheitsmaßnahme wird vom Android-Betriebssystem durchgesetzt und ist im Allgemeinen ausreichend für die Sicherheitsbedürfnisse der meisten Anwendungen. Entwickler nutzen jedoch manchmal 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.
Statische Analyse:
Stellen Sie sicher, dass die Verwendung von MODE_WORLD_READABLE
und MODE_WORLD_WRITABLE
sorgfältig überprüft wird. Diese Modi könnten potenziell Dateien unbeabsichtigtem oder unbefugtem Zugriff aussetzen.
Dynamische Analyse:
Überprüfen Sie die Berechtigungen, die für Dateien festgelegt sind, die von der App erstellt wurden. Überprüfen Sie insbesondere, ob Dateien so eingestellt sind, dass sie weltweit lesbar oder schreibbar sind. Dies kann ein erhebliches Sicherheitsrisiko darstellen, da es jeder Anwendung, die auf dem Gerät installiert ist, unabhängig von ihrer Herkunft oder Absicht, ermöglicht, diese Dateien zu lesen oder zu ändern.
Externer Speicher
Beim Umgang mit Dateien auf externem Speicher, wie SD-Karten, sollten bestimmte Vorsichtsmaßnahmen getroffen werden:
Zugänglichkeit:
Dateien auf externem Speicher sind global lesbar und schreibbar. Das bedeutet, dass jede Anwendung oder jeder Benutzer auf diese Dateien zugreifen kann.
Sicherheitsbedenken:
Angesichts der einfachen Zugänglichkeit wird geraten, keine sensiblen Informationen auf externem Speicher zu speichern.
Externer Speicher kann entfernt oder von jeder Anwendung zugegriffen werden, was ihn weniger sicher macht.
Umgang mit Daten vom externen Speicher:
Führen Sie immer Eingangsvalidierungen für Daten durch, die vom externen Speicher abgerufen werden. Dies ist entscheidend, da die Daten aus einer nicht vertrauenswürdigen Quelle stammen.
Das Speichern von ausführbaren Dateien oder Klassen auf externem Speicher für dynamisches Laden wird dringend abgeraten.
Wenn Ihre Anwendung ausführbare Dateien vom externen Speicher abrufen muss, stellen Sie sicher, dass diese Dateien signiert und kryptografisch verifiziert sind, bevor sie dynamisch geladen werden. Dieser Schritt ist entscheidend für die Aufrechterhaltung der Sicherheitsintegrität Ihrer Anwendung.
Externer Speicher kann in /storage/emulated/0
, /sdcard
, /mnt/sdcard
zugegriffen werden.
Beginnend mit 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
Geteilte Präferenzen: Android ermöglicht es jeder Anwendung, XML-Dateien im Pfad /data/data/<packagename>/shared_prefs/
einfach 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 im Pfad /data/data/<packagename>/databases/
einfach zu speichern, und manchmal ist es möglich, sensible Informationen im Klartext in diesem Ordner zu finden.
Alle Zertifikate akzeptieren
Aus irgendeinem Grund akzeptieren Entwickler manchmal alle Zertifikate, selbst wenn beispielsweise der Hostname nicht mit Zeilen von Code wie der folgenden übereinstimmt:
Ein guter Weg, dies zu testen, besteht darin, den Datenverkehr mit einem Proxy wie Burp zu erfassen, ohne Burp CA im Gerät zu autorisieren. Außerdem können Sie mit Burp ein Zertifikat für einen anderen Hostnamen generieren und es verwenden.
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 getan werden, da einige Reverse-Engineering-Aktivitäten Angreifern ermöglichen könnten, die vertraulichen Informationen zu extrahieren.
Verwendung unsicherer und/oder veralteter Algorithmen
Entwickler sollten keine veralteten Algorithmen verwenden, um Autorisierungs-prüfungen durchzuführen, Daten zu speichern oder zu senden. Einige dieser Algorithmen sind: RC4, MD4, MD5, SHA1... Wenn Hashes beispielsweise verwendet werden, um Passwörter zu speichern, sollten brute-force resistente Hashes mit Salt verwendet werden.
Es wird empfohlen, die APK zu obfuskieren, um die Reverse-Engineering-Arbeit für Angreifer zu erschweren.
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 ü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 überprüfen, ob sie modifiziert wurde.
Verwenden Sie APKiD, um zu überprüfen, welcher Compiler/Packer/Obfuskator verwendet wurde, um die APK zu erstellen.
Lesen Sie die folgende Seite, um zu erfahren, wie Sie einfach auf den JavaScript-Code von React-Anwendungen zugreifen können:
React Native ApplicationLesen Sie die folgende Seite, um zu erfahren, wie Sie einfach auf den C#-Code von Xamarin-Anwendungen zugreifen können:
Xamarin AppsLaut diesem Blogbeitrag 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 aus dem Dateisystem zu sammeln.
Das Tool mariana-trench ist in der Lage, Schwachstellen durch Scannen des Codes der Anwendung zu finden. Dieses Tool enthält eine Reihe von bekannten Quellen (die dem Tool die Stellen anzeigen, an denen die Eingabe vom Benutzer kontrolliert wird), Senken (die dem Tool gefährliche Stellen anzeigen, an denen bösartige Benutzereingaben Schäden verursachen könnten) und Regeln. Diese Regeln zeigen die Kombination von Quellen-Senken, die auf eine Schwachstelle hinweisen.
Mit diesem Wissen wird mariana-trench den Code überprüfen und mögliche Schwachstellen darin finden.
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 verwenden.
Codeausführung: Runtime.exec(), ProcessBuilder(), native code:system()
SMS senden: sendTextMessage, sendMultipartTestMessage
Native Funktionen deklariert als native
: public native, System.loadLibrary, System.load
Treten Sie dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Hacking Insights Engagieren Sie sich mit Inhalten, die in die Aufregung und die Herausforderungen des Hackens eintauchen
Echtzeit-Hack-Nachrichten Bleiben Sie auf dem Laufenden über die schnelllebige Hackerwelt durch Echtzeitnachrichten und Einblicke
Neueste Ankündigungen Bleiben Sie informiert über die neuesten Bug-Bounties und wichtige Plattformaktualisierungen
Treten Sie uns bei Discord und beginnen Sie noch heute mit der Zusammenarbeit mit Top-Hackern!
Zunächst benötigen Sie eine Umgebung, in der Sie die Anwendung und die gesamte Umgebung (Burp CA-Zertifikat, Drozer und Frida hauptsächlich) installieren können. Daher wird ein gerootetes Gerät (emuliert oder nicht) dringend empfohlen.
Sie können ein kostenloses Konto unter https://appetize.io/ erstellen. Diese Plattform ermöglicht es Ihnen, APKs hochzuladen und auszuführen, sodass es nützlich ist, um zu sehen, wie sich eine APK verhält.
Sie können sogar die Protokolle Ihrer Anwendung im Web sehen und über adb verbinden.
Dank der ADB-Verbindung können Sie Drozer und Frida innerhalb der Emulatoren verwenden.
Android Studio (Sie können x86 und arm Geräte erstellen, und laut diesemneueste x86 Versionen unterstützen ARM-Bibliotheken ohne einen langsamen ARM-Emulator zu benötigen).
Lernen Sie, wie Sie es auf dieser Seite einrichten:
Genymotion (Kostenlose Version: Personal Edition, Sie müssen ein Konto erstellen. _Es wird empfohlen, die Version MIT VirtualBox herunterzuladen, um potenzielle Fehler zu vermeiden.)
Nox (Kostenlos, unterstützt jedoch kein Frida oder Drozer).
Beim Erstellen eines neuen Emulators auf einer beliebigen Plattform denken Sie daran, dass je größer der Bildschirm ist, desto langsamer der Emulator läuft. Wählen Sie also nach Möglichkeit kleine Bildschirme aus.
Um Google-Dienste (wie den App Store) in Genymotion zu installieren, müssen Sie auf die rot markierte Schaltfläche im folgenden Bild klicken:
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).
Sie müssen die Debugging-Optionen aktivieren, und es wäre gut, wenn Sie es rooten könnten:
Einstellungen.
(Ab Android 8.0) Wählen Sie System.
Wählen Sie Über das Telefon.
Drücken Sie Build-Nummer 7 Mal.
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.
Protokollierung
Entwickler sollten vorsichtig sein, Debugging-Informationen öffentlich zugänglich zu machen, da dies zu sensiblen Datenlecks führen kann. Die Tools 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.
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 weiterhin empfohlen, sensible Informationen nicht zu protokollieren.
Zwischenspeicherung des Copy/Paste-Puffers
Das Clipboard-basierte 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 Copy/Paste-Funktionen für sensible Abschnitte einer Anwendung, wie z. B. Kreditkartendetails, zu deaktivieren, um Datenlecks zu verhindern.
Absturzprotokolle
Wenn eine Anwendung abstürzt und Protokolle speichert, können diese Protokolle Angreifern helfen, insbesondere wenn die Anwendung nicht zurückverfolgt werden kann. Um dieses Risiko zu mindern, vermeiden Sie das Protokollieren bei Abstürzen, und wenn Protokolle über das Netzwerk übertragen werden müssen, stellen Sie sicher, dass sie über einen SSL-Kanal zur Sicherheit gesendet werden.
Als Pentester sollten Sie diese Protokolle überprüfen.
Analysedaten, die an Dritte gesendet werden
Anwendungen integrieren häufig Dienste wie Google Adsense, die unbeabsichtigt sensible Daten aufgrund unsachgemäßer Implementierung durch Entwickler leaken können. Um potenzielle Datenlecks zu identifizieren, ist es ratsam, den Datenverkehr der Anwendung abzufangen und nach sensiblen Informationen zu suchen, die an Dritte gesendet werden.
Die meisten Anwendungen verwenden interne SQLite-Datenbanken, um Informationen zu speichern. Während des Pentests sollten Sie einen Blick auf die Datenbanken werfen, die erstellt wurden, die Namen der Tabellen und Spalten sowie alle gespeicherten Daten, da Sie sensible Informationen finden könnten (was eine Schwachstelle darstellen würde).
Datenbanken sollten sich in /data/data/the.package.name/databases
wie /data/data/com.mwr.example.sieve/databases
befinden.
Wenn die Datenbank vertrauliche Informationen speichert und verschlüsselt ist, Sie jedoch das Passwort innerhalb der Anwendung finden, ist es immer noch eine Schwachstelle.
Zählen Sie die Tabellen mit .tables
und zählen Sie die Spalten der Tabellen mit .schema <table_name>
.
Laut Drozer-Dokumentation: 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 Provider auszunutzen, wie Sie in den folgenden Abschnitten lernen werden.
Lesen Sie dies, wenn Sie auffrischen möchten, was eine Android-Aktivität ist.
Denken Sie auch daran, dass der Code einer Aktivität in der onCreate
-Methode beginnt.
Autorisierungsumgehung
Wenn eine Aktivität exportiert ist, können Sie ihren Bildschirm von einer externen App aus aufrufen. Daher könnten Sie, wenn eine Aktivität mit sensiblen Informationen exportiert ist, die Authentifizierungs-Mechanismen umgehen, um darauf zuzugreifen.
Erfahren Sie, wie Sie exportierte Aktivitäten mit Drozer ausnutzen.
Sie können auch eine exportierte Aktivität von adb starten:
Paketname ist com.example.demo
Exportierte Aktivitätsname ist 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 ist dies anscheinend nur in alten Versionen (API-Versionen < 21) gefährlich.
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
Aktivitäten können auch Ergebnisse zurückgeben. Wenn Sie es schaffen, eine exportierte und ungeschützte Aktivität zu finden, die die setResult
-Methode aufruft und sensible Informationen zurückgibt, gibt es ein sensibles Informationsleck.
Wenn Tapjacking nicht verhindert wird, könnten Sie die exportierte Aktivität missbrauchen, um den Benutzer unerwartete Aktionen ausführen zu lassen. Für weitere Informationen über was Tapjacking ist, folgen Sie dem Link.
Lesen Sie dies, wenn Sie auffrischen möchten, was ein Content Provider ist. 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.
Erfahren Sie, wie Sie Content Provider mit Drozer ausnutzen.
Lesen Sie dies, wenn Sie auffrischen möchten, was ein Service ist.
Denken Sie daran, dass die Aktionen eines Services in der Methode onStartCommand
beginnen.
Ein Service ist im Grunde etwas, das Daten empfangen, sie verarbeiten und (oder nicht) eine Antwort zurückgeben 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... Erfahren Sie, wie Sie Services mit Drozer ausnutzen.
Lesen Sie dies, wenn Sie auffrischen möchten, was ein Broadcast Receiver ist.
Denken Sie daran, dass die Aktionen eines Broadcast Receivers in der Methode onReceive
beginnen.
Ein Broadcast Receiver wartet auf eine Art von Nachricht. Je nachdem, wie der Receiver die Nachricht verarbeitet, könnte er anfällig sein. Erfahren Sie, wie Sie Broadcast Receivers mit Drozer ausnutzen.
Sie können manuell nach Deep Links suchen, indem Sie Tools wie MobSF oder Skripte wie dieses verwenden. Sie können ein deklariertes Scheme mit adb oder einem Browser öffnen:
Beachten Sie, dass Sie den Paketnamen weglassen können und das Mobilgerät automatisch die App aufruft, die diesen Link öffnen sollte.
Code ausgeführt
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
.
Sensible Informationen
Jedes Mal, wenn du einen Deep Link findest, überprüfe, dass er keine sensiblen Daten (wie Passwörter) über URL-Parameter empfängt, da jede andere Anwendung den Deep Link nachahmen und diese Daten stehlen könnte!
Parameter im Pfad
Du musst auch überprüfen, ob ein Deep Link einen Parameter im Pfad der URL verwendet, wie: https://api.example.com/v1/users/{username}
. In diesem Fall kannst du eine Pfadtraversierung erzwingen, indem du auf etwas wie: example://app/users?username=../../unwanted-endpoint%3fparam=value
zugreifst.
Beachte, dass du, wenn du die richtigen Endpunkte innerhalb der Anwendung findest, möglicherweise eine Open Redirect verursachen kannst (wenn ein Teil des Pfades als Domainname verwendet wird), Account-Übernahme (wenn du die Benutzerdaten ohne CSRF-Token ändern kannst und der verwundbare Endpunkt die richtige Methode verwendet) und jede andere Verwundbarkeit. Mehr Info dazu hier.
Weitere Beispiele
Ein interessanter Bug-Bounty-Bericht über Links (/.well-known/assetlinks.json).
Zertifikate werden von Android-Anwendungen nicht immer ordnungsgemäß überprüft. Es ist üblich, dass diese Anwendungen Warnungen ignorieren 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.
Leckage privater Informationen ist ein Risiko, wenn Anwendungen über sichere Kanäle authentifizieren, dann jedoch über nicht sichere Kanäle für andere Transaktionen kommunizieren. Dieser Ansatz schützt sensible Daten, wie Sitzungscookies oder Benutzerdetails, nicht vor der Abfangung durch böswillige Akteure.
Wir werden uns auf die Zertifikatsverifizierung 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 Verwundbarkeiten bietet dieses Ressourcen umfassende Anleitungen.
SSL-Pinning ist eine Sicherheitsmaßnahme, bei der die Anwendung das Serverzertifikat mit einer bekannten Kopie vergleicht, die innerhalb der Anwendung selbst gespeichert ist. Diese Methode ist entscheidend, um MITM-Angriffe zu verhindern. Die Implementierung von SSL-Pinning wird für Anwendungen, die mit sensiblen Informationen umgehen, dringend empfohlen.
Um HTTP-Verkehr zu inspizieren, ist es notwendig, das Zertifikat des Proxy-Tools zu installieren (z. B. Burp). 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.
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.
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. 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.
Du könntest Frida verwenden (unten besprochen), 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/
Du kannst auch versuchen, SSL-Pinning automatisch zu umgehen mit objection: 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
Es ist auch wichtig, nach häufigen Webverwundbarkeiten innerhalb der Anwendung zu suchen. Detaillierte Informationen zur Identifizierung und Minderung dieser Verwundbarkeiten gehen über den Rahmen dieser Zusammenfassung hinaus, werden jedoch an anderer Stelle umfassend behandelt.
Frida ist ein dynamisches Instrumentierungstoolkit 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... Wenn du Android-Anwendungen pentesten möchtest, musst du wissen, wie man Frida verwendet.
Lerne, wie man Frida verwendet: Frida-Tutorial
Eine "GUI" für Aktionen mit Frida: 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/dpnishant/appmon
Du kannst einige großartige Frida-Skripte hier finden: 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 angegeben lädst (Tool linjector)
Überprüfe, ob die Anwendung sensible Informationen im Speicher speichert, die sie nicht speichern sollte, wie Passwörter oder mnemonische Sätze.
Mit Fridump3 kannst du den Speicher der App dumpen mit:
Dies wird den Speicher im ./dump-Ordner ausgeben, und dort könnten Sie mit etwas wie grep suchen:
In Android ist der Keystore der beste Ort, um sensible Daten zu speichern, jedoch ist es mit ausreichenden Rechten immer noch möglich, darauf zuzugreifen. Da Anwendungen dazu neigen, hier sensible Daten im Klartext zu speichern, sollten die Pentests dies als Root-Benutzer oder jemand mit physischem Zugriff auf das Gerät überprüfen, da diese Person in der Lage sein könnte, diese Daten zu stehlen.
Selbst wenn eine App Daten im Keystore gespeichert hat, sollten die Daten verschlüsselt sein.
Um auf die Daten im Keystore zuzugreifen, könntest du dieses Frida-Skript verwenden: 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-Anwendungen möglicherweise durchführen, um bestimmte sensible Bereiche zu schützen:
Wenn Sie eine Anwendung in den Hintergrund setzen, speichert Android einen Schnappschuss der Anwendung, sodass beim Wiederherstellen in den Vordergrund das Bild geladen wird, bevor die App, sodass es aussieht, als wäre die App schneller geladen worden.
Wenn dieser Schnappschuss jedoch sensible Informationen enthält, könnte jemand mit Zugriff auf den Schnappschuss diese Informationen stehlen (beachten Sie, dass Sie Root-Rechte benötigen, um darauf zuzugreifen).
Die Schnappschüsse werden normalerweise unter: /data/system_ce/0/snapshots
gespeichert.
Android bietet eine Möglichkeit, die Screenshot-Erfassung zu verhindern, indem der FLAG_SECURE Layoutparameter gesetzt wird. Durch die Verwendung dieses Flags werden die Fensterinhalte als sicher behandelt, wodurch sie nicht in Screenshots erscheinen oder auf nicht sicheren Displays angezeigt werden können.
Dieses Tool kann Ihnen helfen, verschiedene Tools während der dynamischen Analyse zu verwalten: https://github.com/NotSoSecure/android_application_analyzer
Entwickler erstellen häufig Proxy-Komponenten wie Aktivitäten, Dienste und Broadcast-Empfänger, die diese Intents verarbeiten und an Methoden wie startActivity(...)
oder sendBroadcast(...)
weiterleiten, was riskant sein kann.
Die Gefahr liegt darin, Angreifern zu ermöglichen, nicht exportierte App-Komponenten auszulösen oder auf sensible Content-Provider zuzugreifen, indem diese Intents fehlgeleitet werden. 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.
Intent Injection ist ähnlich wie das Open Redirect-Problem im Web.
Exploits beinhalten das Übergeben von Intent
-Objekten als Extras, die umgeleitet werden können, um unsichere Operationen auszuführen.
Es kann nicht exportierte Komponenten und Content-Provider Angreifern aussetzen.
Die URL-zu-Intent
-Umwandlung von WebView
kann unbeabsichtigte Aktionen erleichtern.
Wahrscheinlich kennen Sie diese Art von Schwachstellen aus dem Web. Sie müssen bei diesen Schwachstellen in einer Android-Anwendung besonders vorsichtig sein:
SQL Injection: Stellen Sie beim Umgang mit dynamischen Abfragen oder Content-Providern sicher, dass Sie parametrisierte Abfragen verwenden.
JavaScript Injection (XSS): Überprüfen Sie, ob JavaScript- und Plugin-Unterstützung für alle WebViews deaktiviert ist (standardmäßig deaktiviert). Mehr Informationen hier.
Local File Inclusion: WebViews sollten keinen Zugriff auf das Dateisystem haben (standardmäßig aktiviert) - (webview.getSettings().setAllowFileAccess(false);)
. Mehr Informationen hier.
Eternal cookies: In mehreren Fällen, wenn die Android-Anwendung die Sitzung beendet, wird das Cookie nicht widerrufen oder könnte sogar auf der Festplatte gespeichert werden.
Treten Sie dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Hacking Insights Engagieren Sie sich mit Inhalten, die in die Aufregung und Herausforderungen des Hackens eintauchen.
Echtzeit-Hack-Nachrichten Bleiben Sie auf dem Laufenden über die schnelllebige Hackerwelt durch Echtzeitnachrichten und Einblicke.
Neueste Ankündigungen Bleiben Sie informiert über die neuesten Bug-Bounties und wichtige Plattform-Updates.
Treten Sie uns bei Discord und beginnen Sie noch heute mit den besten Hackern zusammenzuarbeiten!
Statische Analyse
Schwachstellenbewertung der Anwendung mithilfe eines schönen webbasierten Frontends. Sie können auch eine dynamische Analyse durchführen (aber Sie müssen die Umgebung vorbereiten).
Notice that MobSF can analyse Android(apk), IOS(ipa) and Windows(apx) applications (Windows-Anwendungen müssen von einem in einem Windows-Host installierten MobSF analysiert werden). Also, if you create a ZIP file with the source code if an Android or an IOS app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also.
MobSF also allows you to diff/Compare analysis and to integrate VirusTotal (you will need to set your API key in MobSF/settings.py and enable it: VT_ENABLED = TRUE
VT_API_KEY = <Your API key>
VT_UPLOAD = TRUE
). You can also set VT_UPLOAD
to False
, then the hash will be upload instead of the file.
MobSF can also be very helpful for dynamic analysis in Android, but in that case you will need to install MobSF and genymotion in your host (a VM or Docker won't work). Hinweis: Sie müssen zuerst eine VM in genymotion starten und dann MobSF. The MobSF dynamic analyser can:
Dump application data (URLs, Logs, Zwischenablage, Screenshots, die von Ihnen gemacht wurden, Screenshots, die von "Exported Activity Tester" gemacht wurden, E-Mails, SQLite-Datenbanken, XML-Dateien und andere erstellte Dateien). All of this is done automatically except for the screenshots, you need to press when you want a screenshot or you need to press "Exported Activity Tester" to obtain screenshots of all the exported activities.
Capture HTTPS traffic
Use Frida to obtain runtime information
From android versions > 5, it will automatically start Frida and will set global proxy settings to capture traffic. It will only capture traffic from the tested application.
Frida
By default, it will also use some Frida Scripts to bypass SSL pinning, root detection and debugger detection and to monitor interesting APIs. MobSF can also invoke exported activities, grab screenshots of them and save them for the report.
To start the dynamic testing press the green bottom: "Start Instrumentation". Press the "Frida Live Logs" to see the logs generated by the Frida scripts and "Live API Monitor" to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing "Start Instrumentation").
MobSF also allows you to load your own Frida scripts (to send the results of your Friday scripts to MobSF use the function send()
). It also has several pre-written scripts you can load (you can add more in MobSF/DynamicAnalyzer/tools/frida_scripts/others/
), just select them, press "Load" and press "Start Instrumentation" (you will be able to see the logs of that scripts inside "Frida Live Logs").
Moreover, you have some Auxiliary Frida functionalities:
Enumerate Loaded Classes: It will print all the loaded classes
Capture Strings: It will print all the capture strings while using the application (super noisy)
Capture String Comparisons: Could be very useful. It will show the 2 strings being compared and if the result was True or False.
Enumerate Class Methods: Put the class name (like "java.io.File") and it will print all the methods of the class.
Search Class Pattern: Search classes by pattern
Trace Class Methods: Trace a whole class (see inputs and outputs of all methods of th class). Remember that by default MobSF traces several interesting Android Api methods.
Once you have selected the auxiliary module you want to use you need to press "Start Intrumentation" and you will see all the outputs in "Frida Live Logs".
Shell
Mobsf also brings you a shell with some adb commands, MobSF commands, and common shell commands at the bottom of the dynamic analysis page. Some interesting commands:
HTTP-Tools
Wenn der HTTP-Verkehr erfasst wird, können Sie eine unschöne Ansicht des erfassten Verkehrs auf dem "HTTP(S) Traffic" unteren Bereich oder eine schönere Ansicht im "Start HTTPTools" grünen Bereich sehen. Von der zweiten Option aus können Sie die erfassten Anfragen an Proxys wie Burp oder Owasp ZAP senden. Um dies zu tun, Burp einschalten --> Intercept ausschalten --> in MobSB HTTPTools die Anfrage auswählen --> drücken Sie auf "Send to Fuzzer" --> Proxy-Adresse auswählen (http://127.0.0.1:8080\).
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.
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 folgendermaßen korrigieren:
Sie können das Tool von Inspeckage herunterladen. Dieses Tool verwendet einige Hooks, um Ihnen mitzuteilen, was in der Anwendung passiert, während Sie eine dynamische Analyse durchführen.
Dies ist ein großartiges Tool zur Durchführung von statischer Analyse mit einer GUI
Dieses Tool wurde entwickelt, um nach mehreren sicherheitsrelevanten Android-Anwendungsanfälligkeiten zu suchen, entweder im Quellcode oder in verpackten APKs. Das Tool ist auch in der Lage, ein "Proof-of-Concept" deploybares APK und ADB-Befehle zu erstellen, um einige der gefundenen Anfälligkeiten auszunutzen (Exponierte Aktivitäten, Intents, Tapjacking...). Wie bei Drozer ist es nicht erforderlich, das Testgerät zu rooten.
Zeigt alle extrahierten Dateien zur einfachen Referenz an
Dekompiliert APK-Dateien automatisch in Java- und Smali-Format
Analysiert AndroidManifest.xml auf häufige Sicherheitsanfälligkeiten und Verhalten
Statische Quellcodeanalyse auf häufige Sicherheitsanfälligkeiten und Verhalten
Geräteinformationen
und mehr
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 zentralisiert, und jedes Unternehmen oder Tester kann seine eigenen Regeln erstellen, um das zu analysieren, was sie benötigen.
Laden Sie die neuesten Binärdateien von der Download-Seite herunter.
StaCoAn ist ein plattformübergreifendes Tool, das Entwicklern, Bug-Bounty-Jägern und ethischen Hackern hilft, statische Codeanalyse an mobilen Anwendungen durchzuführen.
Das Konzept besteht darin, dass Sie Ihre mobile Anwendungsdatei (eine .apk- oder .ipa-Datei) auf die StaCoAn-Anwendung ziehen und ablegen, und es wird ein visueller und tragbarer Bericht für Sie erstellt. Sie können die Einstellungen und Wortlisten anpassen, um ein individuelles Erlebnis zu erhalten.
Laden Sie die neueste Version herunter:
AndroBugs Framework ist ein Android-Sicherheitsanalyse-System, das Entwicklern oder Hackern hilft, potenzielle Sicherheitsanfälligkeiten in Android-Anwendungen zu finden. Windows-Versionen
Androwarn ist ein Tool, dessen Hauptziel es ist, den Benutzer über potenziell bösartiges Verhalten, das von einer Android-Anwendung entwickelt wurde, zu erkennen und zu warnen.
Die Erkennung erfolgt durch die statische Analyse des Dalvik-Bytecodes der Anwendung, dargestellt als Smali, mit der androguard
Bibliothek.
Dieses Tool sucht nach häufigem Verhalten von "schlechten" Anwendungen wie: Exfiltration von Telefondaten, Abfangen von Audio-/Video-Streams, Modifikation von PIM-Daten, Ausführung beliebigen Codes...
MARA ist ein Mobile Application Reverse Engineering und Analysis Framework. Es ist ein Tool, das häufig verwendete Tools für das Reverse Engineering und die Analyse von mobilen Anwendungen zusammenführt, um bei der Prüfung mobiler Anwendungen gegen die OWASP-Sicherheitsbedrohungen für mobile Anwendungen zu helfen. Ziel ist es, diese Aufgabe für Entwickler mobiler Anwendungen und Sicherheitsfachleute einfacher und benutzerfreundlicher zu gestalten.
Es kann:
Java- und Smali-Code mit verschiedenen Tools extrahieren
APKs analysieren mit: smalisca, ClassyShark, androbugs, androwarn, APKiD
Private Informationen aus der APK mit regexps extrahieren.
Das Manifest analysieren.
APK über apk-deguard.com deobfuskieren
Nützlich zur Erkennung von Malware: https://koodous.com/
Beachten Sie, dass je nach Dienst und Konfiguration, die Sie zur Obfuskation des Codes verwenden, Geheimnisse möglicherweise obfuskiert oder nicht obfuskiert enden.
Von Wikipedia: 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, vertrieben.
ProGuard wird als Teil des Android SDK verteilt und läuft beim Erstellen der Anwendung im Release-Modus.
Finden Sie eine Schritt-für-Schritt-Anleitung zur Deobfuskation der APK in https://blog.lexfo.fr/dexguard.html
(Von dieser Anleitung) Das letzte Mal, als wir überprüft haben, war der Dexguard-Betriebsmodus:
eine Ressource als InputStream laden;
das Ergebnis an eine Klasse weitergeben, die von FilterInputStream erbt, um es zu entschlüsseln;
einige nutzlose Obfuskation durchführen, um dem Reverser ein paar Minuten Zeit zu stehlen;
das entschlüsselte Ergebnis an einen ZipInputStream weitergeben, um eine DEX-Datei zu erhalten;
schließlich die resultierende DEX als Ressource mit der Methode loadDex
laden.
DeGuard kehrt den Obfuskationsprozess um, der von Android-Obfuskationstools durchgeführt wird. Dies ermöglicht zahlreiche Sicherheitsanalysen, einschließlich Codeinspektion und Vorhersage von Bibliotheken.
Sie können eine obfuskierte APK auf ihre Plattform hochladen.
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.
APKiD gibt Ihnen Informationen darüber, wie eine APK erstellt wurde. Es identifiziert viele Compiler, Packer, Obfuskatoren und andere seltsame Dinge. Es ist PEiD für Android.
AndroL4b ist eine Android-Sicherheitsvirtualmaschine, die auf ubuntu-mate basiert und die Sammlung der neuesten Frameworks, Tutorials und Labs von verschiedenen Sicherheitsgeeks und Forschern für Reverse Engineering und Malware-Analyse umfasst.
https://appsecwiki.com/#/ Es ist eine großartige Liste von Ressourcen
https://maddiestone.github.io/AndroidAppRE/ Android Schnellkurs
Treten Sie dem HackenProof Discord Server bei, um mit erfahrenen Hackern und Bug-Bounty-Jägern zu kommunizieren!
Hacking Insights Engagieren Sie sich mit Inhalten, die in die Aufregung und Herausforderungen des Hackens eintauchen
Echtzeit-Hack-Nachrichten Bleiben Sie auf dem Laufenden über die schnelllebige Hackerwelt durch Echtzeitnachrichten und Einblicke
Neueste Ankündigungen Bleiben Sie informiert über die neuesten Bug-Bounties und wichtige Plattform-Updates
Treten Sie uns bei Discord und beginnen Sie noch heute mit der Zusammenarbeit mit Top-Hackern!
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)