Android Applications Pentesting

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Rejoignez le serveur HackenProof Discord pour communiquer avec des pirates expérimentés et des chasseurs de primes !

Perspectives de piratage Engagez-vous avec du contenu qui explore le frisson et les défis du piratage

Actualités de piratage en temps réel Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel

Dernières annonces Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme

Rejoignez-nous sur Discord et commencez à collaborer avec les meilleurs pirates dès aujourd'hui !

Bases des applications Android

Il est fortement recommandé de commencer par lire cette page pour en savoir plus sur les parties les plus importantes liées à la sécurité Android et les composants les plus dangereux dans une application Android :

ADB (Android Debug Bridge)

C'est l'outil principal dont vous avez besoin pour vous connecter à un appareil Android (émulé ou physique). ADB permet de contrôler les appareils soit par USB soit par réseau depuis un ordinateur. Cet utilitaire permet la copie de fichiers dans les deux sens, l'installation et la désinstallation d'applications, l'exécution de commandes shell, la sauvegarde de données, la lecture de journaux, entre autres fonctions.

Jetez un œil à la liste suivante des Commandes ADB pour apprendre à utiliser adb.

Smali

Parfois, il est intéressant de modifier le code de l'application pour accéder à des informations cachées (peut-être des mots de passe bien obfusqués ou des indicateurs). Ensuite, il peut être intéressant de décompiler l'APK, de modifier le code et de le recompiler. Dans ce tutoriel, vous pouvez apprendre à décompiler un APK, modifier le code Smali et recompiler l'APK avec la nouvelle fonctionnalité. Cela pourrait être très utile comme alternative pour plusieurs tests pendant l'analyse dynamique qui vont être présentés. Ensuite, gardez toujours à l'esprit cette possibilité.

Autres astuces intéressantes

adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

Analyse statique

Tout d'abord, pour analyser un APK, vous devriez jeter un œil au code Java en utilisant un décompilateur. Veuillez lire ici pour trouver des informations sur les différents décompilateurs disponibles.

Recherche d'informations intéressantes

En examinant simplement les chaînes de caractères de l'APK, vous pouvez rechercher des mots de passe, des URL (https://github.com/ndelphit/apkurlgrep), des clés API, du chiffrement, des UUID Bluetooth, des jetons et tout ce qui est intéressant... cherchez même des backdoors d'exécution de code ou des backdoors d'authentification (identifiants administrateur codés en dur dans l'application).

Firebase

Portez une attention particulière aux URL Firebase et vérifiez si elles sont mal configurées. Plus d'informations sur ce qu'est Firebase et comment l'exploiter ici.

Compréhension de base de l'application - Manifest.xml, strings.xml

L'examen des fichiers _Manifest.xml_ et _strings.xml_ d'une application peut révéler des vulnérabilités potentielles en matière de sécurité**. Ces fichiers peuvent être consultés en utilisant des décompilateurs ou en renommant l'extension du fichier APK en .zip, puis en le dézippant.

Les vulnérabilités identifiées dans le Manifest.xml incluent :

  • Applications en mode débogage : Les applications définies en mode débogage (debuggable="true") dans le fichier Manifest.xml posent un risque car elles permettent des connexions pouvant conduire à une exploitation. Pour une meilleure compréhension de l'exploitation des applications en mode débogage, consultez un tutoriel sur la recherche et l'exploitation d'applications en mode débogage sur un appareil.

  • Paramètres de sauvegarde : L'attribut android:allowBackup="false" devrait être explicitement défini pour les applications traitant des informations sensibles afin d'empêcher les sauvegardes de données non autorisées via adb, surtout lorsque le débogage USB est activé.

  • Sécurité réseau : Les configurations personnalisées de sécurité réseau (android:networkSecurityConfig="@xml/network_security_config") dans res/xml/ peuvent spécifier des détails de sécurité comme les épingles de certificat et les paramètres de trafic HTTP. Un exemple est d'autoriser le trafic HTTP pour des domaines spécifiques.

  • Activités et services exportés : Identifier les activités et services exportés dans le manifeste peut mettre en lumière des composants qui pourraient être mal utilisés. Une analyse plus approfondie lors des tests dynamiques peut révéler comment exploiter ces composants.

  • Fournisseurs de contenu et FileProviders : Les fournisseurs de contenu exposés pourraient permettre un accès ou une modification non autorisés des données. La configuration des FileProviders devrait également être examinée.

  • Récepteurs de diffusion et schémas d'URL : Ces composants pourraient être exploités, en accordant une attention particulière à la gestion des schémas d'URL pour les vulnérabilités d'entrée.

  • Versions SDK : Les attributs minSdkVersion, targetSDKVersion et maxSdkVersion indiquent les versions Android prises en charge, soulignant l'importance de ne pas prendre en charge des versions Android obsolètes et vulnérables pour des raisons de sécurité.

À partir du fichier strings.xml, des informations sensibles telles que des clés API, des schémas personnalisés et d'autres notes de développeur peuvent être découvertes, soulignant la nécessité d'un examen attentif de ces ressources.

Tapjacking

Tapjacking est une attaque où une application malveillante est lancée et se positionne au-dessus d'une application victime. Une fois qu'elle obscurcit visuellement l'application victime, son interface utilisateur est conçue de manière à tromper l'utilisateur pour qu'il interagisse avec elle, tout en transmettant l'interaction à l'application victime. En effet, cela empêche l'utilisateur de savoir qu'il effectue réellement des actions sur l'application victime.

Trouvez plus d'informations dans :

Détournement de tâche

Une activité avec le launchMode défini sur singleTask sans aucune taskAffinity définie est vulnérable au détournement de tâche. Cela signifie qu'une application peut être installée et si elle est lancée avant l'application réelle, elle pourrait détourner la tâche de l'application réelle (ainsi l'utilisateur interagira avec la mauvaise application en pensant qu'il utilise la vraie).

Plus d'informations dans :

Stockage de données non sécurisé

Stockage interne

Sur Android, les fichiers stockés dans le stockage interne sont conçus pour être accessibles exclusivement par l'application qui les a créés. Cette mesure de sécurité est appliquée par le système d'exploitation Android et est généralement adéquate pour les besoins de sécurité de la plupart des applications. Cependant, les développeurs utilisent parfois des modes tels que MODE_WORLD_READABLE et MODE_WORLD_WRITABLE pour permettre aux fichiers d'être partagés entre différentes applications. Cependant, ces modes ne restreignent pas l'accès à ces fichiers par d'autres applications, y compris potentiellement des applications malveillantes.

  1. Analyse statique :

  • Assurez-vous que l'utilisation de MODE_WORLD_READABLE et MODE_WORLD_WRITABLE est soigneusement examinée. Ces modes peuvent potentiellement exposer des fichiers à un accès non intentionnel ou non autorisé.

  1. Analyse dynamique :

  • Vérifiez les autorisations définies sur les fichiers créés par l'application. En particulier, vérifiez si des fichiers sont définis comme lisibles ou modifiables mondialement. Cela peut poser un risque de sécurité important, car cela permettrait à n'importe quelle application installée sur l'appareil, quelle que soit son origine ou son intention, de lire ou de modifier ces fichiers.

Stockage externe

Lorsqu'il s'agit de fichiers sur le stockage externe, comme les cartes SD, certaines précautions doivent être prises :

  1. Accessibilité :

  • Les fichiers sur le stockage externe sont lisibles et modifiables globalement. Cela signifie que n'importe quelle application ou utilisateur peut accéder à ces fichiers.

  1. Préoccupations de sécurité :

  • Étant donné la facilité d'accès, il est conseillé de ne pas stocker d'informations sensibles sur le stockage externe.

  • Le stockage externe peut être retiré ou accédé par n'importe quelle application, le rendant moins sécurisé.

  1. Traitement des données provenant du stockage externe :

  • Effectuez toujours une validation des entrées sur les données récupérées depuis le stockage externe. C'est crucial car les données proviennent d'une source non fiable.

  • Il est fortement déconseillé de stocker des exécutables ou des fichiers de classe sur le stockage externe pour un chargement dynamique.

  • Si votre application doit récupérer des fichiers exécutables depuis le stockage externe, assurez-vous que ces fichiers sont signés et vérifiés cryptographiquement avant d'être chargés dynamiquement. Cette étape est essentielle pour maintenir l'intégrité de sécurité de votre application.

Le stockage externe peut être accédé dans /storage/emulated/0, /sdcard, /mnt/sdcard

À partir d'Android 4.4 (API 17), la carte SD a une structure de répertoire qui limite l'accès d'une application au répertoire spécifique à cette application. Cela empêche une application malveillante d'obtenir un accès en lecture ou en écriture aux fichiers d'une autre application.

Données sensibles stockées en clair

  • Préférences partagées : Android permet à chaque application de sauvegarder facilement des fichiers XML dans le chemin /data/data/<nomdupackage>/shared_prefs/ et parfois il est possible de trouver des informations sensibles en clair dans ce dossier.

  • Bases de données : Android permet à chaque application de sauvegarder facilement des bases de données SQLite dans le chemin /data/data/<nomdupackage>/databases/ et parfois il est possible de trouver des informations sensibles en clair dans ce dossier.

TLS cassé

Accepter tous les certificats

Pour une raison quelconque, parfois les développeurs acceptent tous les certificats même si par exemple le nom d'hôte ne correspond pas avec des lignes de code comme celle-ci :

SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

Cryptographie cassée

Processus de gestion de clés médiocre

Certains développeurs enregistrent des données sensibles dans le stockage local et les chiffrent avec une clé codée/prévisible dans le code. Cela ne devrait pas être fait car une rétro-ingénierie pourrait permettre aux attaquants d'extraire les informations confidentielles.

Utilisation d'algorithmes non sécurisés et/ou obsolètes

Les développeurs ne devraient pas utiliser d'algorithmes obsolètes pour effectuer des vérifications d'autorisation, stocker ou envoyer des données. Certains de ces algorithmes sont : RC4, MD4, MD5, SHA1... Si des hashes sont utilisés pour stocker des mots de passe par exemple, des hashes résistants à la force brute devraient être utilisés avec du sel.

Autres vérifications

  • Il est recommandé d'obfusquer l'APK pour compliquer le travail de rétro-ingénierie des attaquants.

  • Si l'application est sensible (comme les applications bancaires), elle devrait effectuer ses propres vérifications pour voir si le mobile est rooté et agir en conséquence.

  • Si l'application est sensible (comme les applications bancaires), elle devrait vérifier si un émulateur est utilisé.

  • Si l'application est sensible (comme les applications bancaires), elle devrait vérifier son intégrité avant de s'exécuter pour vérifier si elle a été modifiée.

  • Utilisez APKiD pour vérifier quel compilateur/packer/obfuscateur a été utilisé pour construire l'APK.

Application React Native

Consultez la page suivante pour apprendre comment accéder facilement au code JavaScript des applications React :

Applications Xamarin

Consultez la page suivante pour apprendre comment accéder facilement au code C# des applications Xamarin :

Applications Superpacked

Selon ce billet de blog, Superpacked est un algorithme Meta qui compresse le contenu d'une application dans un seul fichier. Le blog parle de la possibilité de créer une application qui décompresse ce type d'applications... et d'une manière plus rapide qui implique d'exécuter l'application et de rassembler les fichiers décompressés du système de fichiers.

Analyse de code statique automatisée

L'outil mariana-trench est capable de trouver des vulnérabilités en scannant le code de l'application. Cet outil contient une série de sources connues (qui indiquent à l'outil les endroits où l'entrée est contrôlée par l'utilisateur), des sinks (qui indiquent à l'outil les endroits dangereux où une entrée utilisateur malveillante pourrait causer des dommages) et des règles. Ces règles indiquent la combinaison de sources-sinks qui indique une vulnérabilité.

Avec cette connaissance, mariana-trench examinera le code et trouvera d'éventuelles vulnérabilités.

Secrets divulgués

Une application peut contenir des secrets (clés API, mots de passe, URL cachées, sous-domaines...) à l'intérieur que vous pourriez découvrir. Vous pourriez utiliser un outil tel que https://github.com/dwisiswant0/apkleaks

Contourner l'authentification biométrique

Autres fonctions intéressantes

Autres astuces


Rejoignez le serveur HackenProof Discord pour communiquer avec des hackers expérimentés et des chasseurs de bugs !

Perspectives de piratage Engagez-vous avec du contenu qui explore le frisson et les défis du piratage

Actualités de piratage en temps réel Restez informé du monde du piratage en évolution rapide grâce à des actualités et des informations en temps réel

Dernières annonces Restez informé des dernières primes au bug lancées et des mises à jour cruciales de la plateforme

Rejoignez-nous sur Discord et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !


Analyse dynamique

Tout d'abord, vous avez besoin d'un environnement où vous pouvez installer l'application et tout l'environnement (certificat Burp CA, Drozer et Frida principalement). Par conséquent, un appareil rooté (émulé ou non) est extrêmement recommandé.

Analyse dynamique en ligne

Vous pouvez créer un compte gratuit sur : https://appetize.io/. Cette plateforme vous permet de télécharger et exécuter des APK, ce qui est utile pour voir comment un APK se comporte.

Vous pouvez même voir les journaux de votre application sur le web et vous connecter via adb.

Grâce à la connexion ADB, vous pouvez utiliser Drozer et Frida à l'intérieur des émulateurs.

Analyse dynamique locale

Utilisation d'un émulateur

  • Android Studio (Vous pouvez créer des appareils x86 et arm, et selon ceci les dernières versions x86 supportent les bibliothèques ARM sans avoir besoin d'un émulateur ARM lent).

  • Apprenez à le configurer sur cette page :

  • Genymotion (Version gratuite : Personal Edition, vous devez créer un compte. Il est recommandé de télécharger la version AVEC VirtualBox pour éviter les erreurs potentielles.)

  • Nox (Gratuit, mais ne prend pas en charge Frida ou Drozer).

Lors de la création d'un nouvel émulateur sur n'importe quelle plateforme, rappelez-vous que plus l'écran est grand, plus l'émulateur sera lent. Sélectionnez donc de petits écrans si possible.

Pour installer les services Google (comme AppStore) dans Genymotion, vous devez cliquer sur le bouton marqué en rouge de l'image suivante :

De plus, notez que dans la configuration de la VM Android dans Genymotion, vous pouvez sélectionner le mode Bridge Network (ce sera utile si vous devez vous connecter à la VM Android depuis une autre VM avec les outils).

Utiliser un appareil physique

Vous devez activer les options de débogage et ce serait bien si vous pouviez le rooter :

  1. Paramètres.

  2. (À partir d'Android 8.0) Sélectionnez Système.

  3. Sélectionnez À propos du téléphone.

  4. Appuyez 7 fois sur Numéro de build.

  5. Revenez en arrière et vous trouverez les Options pour les développeurs.

Une fois que vous avez installé l'application, la première chose à faire est de l'essayer et d'investiguer ce qu'elle fait, comment elle fonctionne et de vous familiariser avec. Je vous suggère de réaliser cette analyse dynamique initiale en utilisant l'analyse dynamique MobSF + pidcat, ainsi nous pourrons apprendre comment l'application fonctionne pendant que MobSF capture beaucoup de données intéressantes que vous pourrez examiner plus tard.

Fuite de données non intentionnelle

Journalisation

Les développeurs doivent être prudents lorsqu'ils exposent publiquement des informations de débogage, car cela peut entraîner des fuites de données sensibles. Les outils pidcat et adb logcat sont recommandés pour surveiller les journaux d'application afin d'identifier et protéger les informations sensibles. Pidcat est préféré pour sa facilité d'utilisation et sa lisibilité.

Notez que depuis Android 4.0 et plus récent, les applications ne peuvent accéder qu'à leurs propres journaux. Les applications ne peuvent donc pas accéder aux journaux d'autres applications. Quoi qu'il en soit, il est toujours recommandé de ne pas journaliser d'informations sensibles.

Mise en cache du presse-papiers

Le framework basé sur le presse-papiers d'Android permet la fonctionnalité de copier-coller dans les applications, mais présente un risque car d'autres applications peuvent accéder au presse-papiers, exposant potentiellement des données sensibles. Il est crucial de désactiver les fonctions de copier/coller pour les sections sensibles d'une application, comme les détails de carte de crédit, pour éviter les fuites de données.

Journaux de plantage

Si une application plante et enregistre des journaux, ces journaux peuvent aider les attaquants, notamment lorsque l'application ne peut pas être rétro-ingénierée. Pour atténuer ce risque, évitez de journaliser en cas de plantage, et si les journaux doivent être transmis via le réseau, assurez-vous qu'ils sont envoyés via un canal SSL pour la sécurité.

En tant que pentester, essayez de jeter un œil à ces journaux.

Données analytiques envoyées à des tiers

Les applications intègrent souvent des services comme Google Adsense, qui peuvent involontairement fuir des données sensibles en raison d'une implémentation incorrecte par les développeurs. Pour identifier les fuites de données potentielles, il est conseillé d'intercepter le trafic de l'application et de vérifier si des informations sensibles sont envoyées à des services tiers.

Bases de données SQLite

La plupart des applications utiliseront des bases de données SQLite internes pour enregistrer des informations. Lors du test d'intrusion, jetez un œil aux bases de données créées, aux noms des tables et des colonnes et à toutes les données enregistrées car vous pourriez trouver des informations sensibles (ce qui serait une vulnérabilité). Les bases de données doivent être situées dans /data/data/nom.du.package/databases comme /data/data/com.mwr.example.sieve/databases

Si la base de données enregistre des informations confidentielles et est chiffrée mais que vous pouvez trouver le mot de passe à l'intérieur de l'application, c'est toujours une vulnérabilité.

Énumérez les tables en utilisant .tables et énumérez les colonnes des tables en faisant .schema <nom_table>

Drozer (Activités d'exploitation, Fournisseurs de contenu et Services)

D'après la documentation de Drozer : Drozer vous permet de prendre le rôle d'une application Android et d'interagir avec d'autres applications. Il peut faire tout ce qu'une application installée peut faire, comme utiliser le mécanisme de Communication Inter-Processus (IPC) d'Android et interagir avec le système d'exploitation sous-jacent. Drozer est un outil utile pour exploiter les activités exportées, les services exportés et les Fournisseurs de contenu comme vous le verrez dans les sections suivantes.

Exploiter les activités exportées

Lisez ceci si vous voulez vous rafraîchir sur ce qu'est une Activité Android. Rappelez-vous également que le code d'une activité commence dans la méthode onCreate.

Contournement de l'autorisation

Lorsqu'une Activité est exportée, vous pouvez invoquer son écran depuis une application externe. Par conséquent, si une activité contenant des informations sensibles est exportée, vous pourriez contourner les mécanismes d'authentification pour y accéder.

Apprenez comment exploiter les activités exportées avec Drozer.

Vous pouvez également démarrer une activité exportée depuis adb :

  • Le nom du package est com.example.demo

  • Le nom de l'activité exportée est com.example.test.MainActivity

adb shell am start -n com.example.demo/com.example.test.MainActivity

REMARQUE: MobSF détectera comme malveillante l'utilisation de singleTask/singleInstance en tant que android:launchMode dans une activité, mais en raison de ceci, apparemment cela est seulement dangereux sur les anciennes versions (versions d'API < 21).

Notez qu'une contournement d'autorisation n'est pas toujours une vulnérabilité, cela dépend de la manière dont le contournement fonctionne et des informations exposées.

Fuite d'informations sensibles

Les activités peuvent également renvoyer des résultats. Si vous parvenez à trouver une activité exportée et non protégée appelant la méthode setResult et renvoyant des informations sensibles, il s'agit d'une fuite d'informations sensibles.

Tapjacking

Si le tapjacking n'est pas empêché, vous pourriez abuser de l'activité exportée pour faire effectuer à l'utilisateur des actions inattendues. Pour plus d'informations sur ce qu'est le Tapjacking, suivez le lien.

Exploitation des fournisseurs de contenu - Accès et manipulation d'informations sensibles

Lisez ceci si vous voulez vous rafraîchir sur ce qu'est un fournisseur de contenu. Les fournisseurs de contenu sont essentiellement utilisés pour partager des données. Si une application dispose de fournisseurs de contenu disponibles, vous pourriez être en mesure d'extraire des données sensibles à partir d'eux. Il est également intéressant de tester les éventuelles injections SQL et les traversées de chemin car elles pourraient être vulnérables.

Apprenez comment exploiter les fournisseurs de contenu avec Drozer.

Exploitation des Services

Lisez ceci si vous voulez vous rafraîchir sur ce qu'est un Service. Rappelez-vous que les actions d'un Service commencent dans la méthode onStartCommand.

Un service est essentiellement quelque chose qui peut recevoir des données, les traiter et renvoyer (ou non) une réponse. Ensuite, si une application exporte certains services, vous devriez vérifier le code pour comprendre ce qu'il fait et le tester de manière dynamique pour extraire des informations confidentielles, contourner les mesures d'authentification... Apprenez comment exploiter les Services avec Drozer.

Exploitation des Récepteurs de diffusion

Lisez ceci si vous voulez vous rafraîchir sur ce qu'est un Récepteur de diffusion. Rappelez-vous que les actions d'un Récepteur de diffusion commencent dans la méthode onReceive.

Un récepteur de diffusion attendra un type de message. Selon la manière dont le récepteur gère le message, il pourrait être vulnérable. Apprenez comment exploiter les Récepteurs de diffusion avec Drozer.

Exploitation des Schémas / Liens profonds

Vous pouvez rechercher manuellement des liens profonds, en utilisant des outils comme MobSF ou des scripts comme celui-ci. Vous pouvez ouvrir un schéma déclaré en utilisant adb ou un navigateur:

adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

Notez que vous pouvez omettre le nom du package et le mobile appellera automatiquement l'application qui devrait ouvrir ce lien.

<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>

Code exécuté

Pour trouver le code qui sera exécuté dans l'application, allez à l'activité appelée par le lien profond et recherchez la fonction onNewIntent.

Informations sensibles

Chaque fois que vous trouvez un lien profond, vérifiez qu'il ne reçoit pas de données sensibles (comme des mots de passe) via des paramètres d'URL, car toute autre application pourrait usurper le lien profond et voler ces données !

Paramètres dans le chemin

Vous devez également vérifier si un lien profond utilise un paramètre à l'intérieur du chemin de l'URL comme : https://api.example.com/v1/users/{username}, dans ce cas, vous pouvez forcer une traversée de chemin en accédant à quelque chose comme : example://app/users?username=../../unwanted-endpoint%3fparam=value. Notez que si vous trouvez les bons points de terminaison à l'intérieur de l'application, vous pourriez être en mesure de provoquer une Redirection Ouverte (si une partie du chemin est utilisée comme nom de domaine), une prise de contrôle de compte (si vous pouvez modifier les détails des utilisateurs sans jeton CSRF et que le point de terminaison vulnérable utilise la méthode correcte) et toute autre vulnérabilité. Plus d'informations à ce sujet ici.

Plus d'exemples

Un rapport de prime de bug intéressant sur les liens (/.well-known/assetlinks.json).

Inspections de la couche de transport et échecs de vérification

  • Les certificats ne sont pas toujours inspectés correctement par les applications Android. Il est courant que ces applications ignorent les avertissements et acceptent les certificats auto-signés ou, dans certains cas, reviennent à utiliser des connexions HTTP.

  • Les négociations pendant la poignée de main SSL/TLS sont parfois faibles, utilisant des suites de chiffrement non sécurisées. Cette vulnérabilité rend la connexion susceptible aux attaques de l'homme du milieu (MITM), permettant aux attaquants de décrypter les données.

  • La fuite d'informations privées est un risque lorsque les applications s'authentifient en utilisant des canaux sécurisés mais communiquent ensuite via des canaux non sécurisés pour d'autres transactions. Cette approche ne protège pas les données sensibles, telles que les cookies de session ou les détails des utilisateurs, contre l'interception par des entités malveillantes.

Vérification des certificats

Nous allons nous concentrer sur la vérification des certificats. L'intégrité du certificat du serveur doit être vérifiée pour renforcer la sécurité. C'est crucial car les configurations TLS non sécurisées et la transmission de données sensibles sur des canaux non chiffrés peuvent poser des risques importants. Pour des étapes détaillées sur la vérification des certificats de serveur et la résolution des vulnérabilités, cette ressource fournit des conseils complets.

Épinglage SSL

L'épinglage SSL est une mesure de sécurité où l'application vérifie le certificat du serveur par rapport à une copie connue stockée à l'intérieur de l'application elle-même. Cette méthode est essentielle pour prévenir les attaques MITM. Il est fortement recommandé de mettre en œuvre l'épinglage SSL pour les applications manipulant des informations sensibles.

Inspection du trafic

Pour inspecter le trafic HTTP, il est nécessaire d'installer le certificat de l'outil proxy (par exemple, Burp). Sans installer ce certificat, le trafic chiffré pourrait ne pas être visible via le proxy. Pour un guide sur l'installation d'un certificat CA personnalisé, cliquez ici.

Les applications ciblant le niveau API 24 et supérieur nécessitent des modifications de la Configuration de sécurité réseau pour accepter le certificat CA du proxy. Cette étape est cruciale pour inspecter le trafic chiffré. Pour des instructions sur la modification de la Configuration de sécurité réseau, consultez ce tutoriel.

Contournement de l'épinglage SSL

Lorsque l'épinglage SSL est mis en œuvre, contourner cette protection devient nécessaire pour inspecter le trafic HTTPS. Diverses méthodes sont disponibles à cette fin :

  • Modifier automatiquement l'apk pour contourner l'épinglage SSL avec apk-mitm. Le principal avantage de cette option est que vous n'aurez pas besoin de root pour contourner l'épinglage SSL, mais vous devrez supprimer l'application et réinstaller la nouvelle, et cela ne fonctionnera pas toujours.

  • Vous pourriez utiliser Frida (discuté ci-dessous) pour contourner cette protection. Voici un guide pour utiliser Burp+Frida+Genymotion : https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/

  • Vous pouvez également essayer de contourner automatiquement l'épinglage SSL en utilisant objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable"

  • Vous pouvez également essayer de contourner automatiquement l'épinglage SSL en utilisant l'analyse dynamique MobSF (expliquée ci-dessous)

  • Si vous pensez toujours qu'il y a du trafic que vous ne capturez pas, vous pouvez essayer de rediriger le trafic vers Burp en utilisant iptables. Lisez ce blog : https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62

Recherche de vulnérabilités Web courantes

Il est également important de rechercher des vulnérabilités Web courantes dans l'application. Les informations détaillées sur l'identification et l'atténuation de ces vulnérabilités dépassent le cadre de ce résumé mais sont largement couvertes ailleurs.

Frida

Frida est une trousse d'instrumentation dynamique pour les développeurs, les rétro-ingénieurs et les chercheurs en sécurité. Vous pouvez accéder à l'application en cours d'exécution et accrocher des méthodes en temps réel pour changer le comportement, changer les valeurs, extraire des valeurs, exécuter un code différent... Si vous voulez faire du pentest sur des applications Android, vous devez savoir comment utiliser Frida.

Dump de mémoire - Fridump

Vérifiez si l'application stocke des informations sensibles dans la mémoire qu'elle ne devrait pas stocker comme des mots de passe ou des mnémoniques.

En utilisant Fridump3 vous pouvez vider la mémoire de l'application avec :

# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

Cela va vider la mémoire dans le dossier ./dump, et là vous pourriez utiliser grep avec quelque chose comme :

strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

Données sensibles dans le Keystore

Dans Android, le Keystore est le meilleur endroit pour stocker des données sensibles, cependant, avec suffisamment de privilèges, il est toujours possible d'y accéder. Comme les applications ont tendance à stocker ici des données sensibles en texte clair, les tests d'intrusion doivent vérifier cela car un utilisateur root ou quelqu'un ayant un accès physique à l'appareil pourrait être en mesure de voler ces données.

Même si une application stocke des données dans le keystore, les données doivent être chiffrées.

Pour accéder aux données à l'intérieur du keystore, vous pouvez utiliser ce script Frida : https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

Contournement des empreintes digitales/biométrie

En utilisant le script Frida suivant, il pourrait être possible de contourner l'authentification par empreinte digitale que les applications Android pourraient effectuer afin de protéger certaines zones sensibles :

frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

Images de fond

Lorsque vous mettez une application en arrière-plan, Android stocke une capture d'écran de l'application afin que lorsqu'elle revienne à l'avant-plan, elle commence à charger l'image avant l'application pour donner l'impression que l'application a été chargée plus rapidement.

Cependant, si cette capture d'écran contient des informations sensibles, une personne ayant accès à la capture d'écran pourrait voler ces informations (notez que vous avez besoin des droits root pour y accéder).

Les captures d'écran sont généralement stockées autour de : /data/system_ce/0/snapshots

Android propose un moyen de prévenir la capture d'écran en définissant le paramètre de mise en page FLAG_SECURE. En utilisant ce drapeau, le contenu de la fenêtre est traité comme sécurisé, l'empêchant d'apparaître dans les captures d'écran ou d'être affiché sur des écrans non sécurisés.

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Analyseur d'Application Android

Cet outil pourrait vous aider à gérer différents outils lors de l'analyse dynamique : https://github.com/NotSoSecure/android_application_analyzer

Injection d'Intent

Les développeurs créent souvent des composants proxy tels que des activités, des services et des récepteurs de diffusion qui gèrent ces Intents et les transmettent à des méthodes telles que startActivity(...) ou sendBroadcast(...), ce qui peut être risqué.

Le danger réside dans le fait de permettre aux attaquants de déclencher des composants d'application non exportés ou d'accéder à des fournisseurs de contenu sensibles en détournant ces Intents. Un exemple notable est le composant WebView qui convertit les URL en objets Intent via Intent.parseUri(...) puis les exécute, ce qui peut potentiellement entraîner des injections d'Intent malveillantes.

Points Essentiels

  • Injection d'Intent est similaire au problème de redirection ouverte du web.

  • Les exploits impliquent le passage d'objets Intent en tant qu'extra, qui peuvent être redirigés pour exécuter des opérations non sécurisées.

  • Cela peut exposer des composants non exportés et des fournisseurs de contenu aux attaquants.

  • La conversion d'URL en Intent par WebView peut faciliter des actions non intentionnelles.

Injections Côté Client Android et autres

Vous connaissez probablement ce type de vulnérabilités du Web. Vous devez être particulièrement prudent avec ces vulnérabilités dans une application Android :

  • Injection SQL : Lors de la manipulation de requêtes dynamiques ou de Content-Providers, assurez-vous d'utiliser des requêtes paramétrées.

  • Injection JavaScript (XSS) : Vérifiez que le support JavaScript et des plugins est désactivé pour tout WebView (désactivé par défaut). Plus d'informations ici.

  • Inclusion de Fichier Local : Les WebViews doivent avoir l'accès au système de fichiers désactivé (activé par défaut) - (webview.getSettings().setAllowFileAccess(false);). Plus d'informations ici.

  • Cookies Éternels : Dans plusieurs cas, lorsque l'application Android termine la session, le cookie n'est pas révoqué ou peut même être enregistré sur le disque.


Rejoignez le serveur HackenProof Discord pour communiquer avec des hackers expérimentés et des chasseurs de bugs !

Perspectives sur le Hacking Engagez-vous avec du contenu qui explore l'excitation et les défis du hacking

Actualités sur le Hacking en Temps Réel Restez à jour avec le monde du hacking en évolution rapide grâce aux actualités et aux informations en temps réel

Dernières Annonces Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme

Rejoignez-nous sur Discord et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !

Analyse Automatique

Analyse statique

Évaluation des vulnérabilités de l'application en utilisant une interface web conviviale. Vous pouvez également effectuer une analyse dynamique (mais vous devez préparer l'environnement).

docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Notez que MobSF peut analyser les applications Android(apk), IOS(ipa) et Windows(apx) (les applications Windows doivent être analysées à partir d'un MobSF installé sur un hôte Windows). De plus, si vous créez un fichier ZIP avec le code source d'une application Android ou IOS (allez dans le dossier racine de l'application, sélectionnez tout et créez un fichier ZIP), MobSF pourra également l'analyser.

MobSF vous permet également de différencier/comparer les analyses et d'intégrer VirusTotal (vous devrez définir votre clé API dans MobSF/settings.py et l'activer : VT_ENABLED = TRUE VT_API_KEY = <Votre clé API> VT_UPLOAD = TRUE). Vous pouvez également définir VT_UPLOAD sur False, puis le hash sera téléchargé au lieu du fichier.

Analyse dynamique assistée avec MobSF

MobSF peut également être très utile pour l'analyse dynamique sur Android, mais dans ce cas, vous devrez installer MobSF et genymotion sur votre hôte (une machine virtuelle ou Docker ne fonctionnera pas). Remarque : Vous devez d'abord démarrer une machine virtuelle dans genymotion et ensuite MobSF. L'analyseur dynamique MobSF peut :

  • Extraire les données de l'application (URL, journaux, presse-papiers, captures d'écran réalisées par vous, captures d'écran réalisées par "Exported Activity Tester", e-mails, bases de données SQLite, fichiers XML et autres fichiers créés). Tout cela est fait automatiquement sauf pour les captures d'écran, vous devez appuyer lorsque vous souhaitez une capture d'écran ou vous devez appuyer sur "Exported Activity Tester" pour obtenir des captures d'écran de toutes les activités exportées.

  • Capturer le trafic HTTPS

  • Utiliser Frida pour obtenir des informations en temps réel

À partir des versions Android > 5, il démarrera automatiquement Frida et définira les paramètres de proxy globaux pour capturer le trafic. Il ne capturera le trafic que de l'application testée.

Frida

Par défaut, il utilisera également certains scripts Frida pour contourner l'épinglage SSL, la détection de root et la détection de débogueur et pour surveiller les API intéressantes. MobSF peut également appeler des activités exportées, capturer des captures d'écran et les enregistrer pour le rapport.

Pour démarrer le test dynamique, appuyez sur le bouton vert : "Start Instrumentation". Appuyez sur "Frida Live Logs" pour voir les journaux générés par les scripts Frida et sur "Live API Monitor" pour voir toutes les invocations des méthodes accrochées, les arguments passés et les valeurs retournées (cela apparaîtra après avoir appuyé sur "Start Instrumentation"). MobSF vous permet également de charger vos propres scripts Frida (pour envoyer les résultats de vos scripts Frida à MobSF, utilisez la fonction send()). Il dispose également de plusieurs scripts pré-écrits que vous pouvez charger (vous pouvez en ajouter d'autres dans MobSF/DynamicAnalyzer/tools/frida_scripts/others/), il vous suffit de les sélectionner, d'appuyer sur "Load" et d'appuyer sur "Start Instrumentation" (vous pourrez voir les journaux de ces scripts à l'intérieur de "Frida Live Logs").

De plus, vous disposez de certaines fonctionnalités auxiliaires Frida :

  • Énumérer les classes chargées : Il affichera toutes les classes chargées

  • Capturer les chaînes : Il affichera toutes les chaînes capturées lors de l'utilisation de l'application (très bruyant)

  • Capturer les comparaisons de chaînes : Peut être très utile. Il affichera les 2 chaînes comparées et si le résultat était Vrai ou Faux.

  • Énumérer les méthodes de classe : Mettez le nom de la classe (comme "java.io.File") et il affichera toutes les méthodes de la classe.

  • Rechercher un motif de classe : Rechercher des classes par motif

  • Tracer les méthodes de classe : Tracer une classe entière (voir les entrées et sorties de toutes les méthodes de la classe). Rappelez-vous que par défaut, MobSF trace plusieurs méthodes intéressantes de l'API Android.

Une fois que vous avez sélectionné le module auxiliaire que vous souhaitez utiliser, appuyez sur "Start Intrumentation" et vous verrez toutes les sorties dans "Frida Live Logs".

Shell

Mobsf vous propose également un shell avec quelques commandes adb, des commandes MobSF et des commandes shell courantes en bas de la page d'analyse dynamique. Quelques commandes intéressantes :

help
shell ls
activities
exported_activities
services
receivers

Outils HTTP

Lorsque le trafic http est capturé, vous pouvez voir une vue peu attrayante du trafic capturé sur le bas de "HTTP(S) Traffic" ou une vue plus agréable sur le bouton vert "Start HTTPTools". À partir de la deuxième option, vous pouvez envoyer les requêtes capturées à des proxies comme Burp ou Owasp ZAP. Pour ce faire, allumez Burp --> désactivez l'interception --> dans MobSB HTTPTools sélectionnez la requête --> appuyez sur "Send to Fuzzer" --> sélectionnez l'adresse du proxy (http://127.0.0.1:8080\).

Une fois que vous avez terminé l'analyse dynamique avec MobSF, vous pouvez appuyer sur "Start Web API Fuzzer" pour fuzzer les requêtes http et rechercher des vulnérabilités.

Après avoir effectué une analyse dynamique avec MobSF, les paramètres du proxy peuvent être mal configurés et vous ne pourrez pas les corriger depuis l'interface graphique. Vous pouvez corriger les paramètres du proxy en effectuant :

adb shell settings put global http_proxy :0

Analyse dynamique assistée avec Inspeckage

Vous pouvez obtenir l'outil sur Inspeckage. Cet outil utilisera certains Hooks pour vous informer de ce qui se passe dans l'application pendant que vous effectuez une analyse dynamique.

C'est un excellent outil pour effectuer une analyse statique avec une interface graphique

Cet outil est conçu pour rechercher plusieurs vulnérabilités de sécurité liées aux applications Android, que ce soit dans le code source ou dans les APK empaquetés. L'outil est également capable de créer un APK déployable "Proof-of-Concept" et des commandes ADB pour exploiter certaines des vulnérabilités trouvées (activités exposées, intentions, tapjacking...). Comme avec Drozer, il n'est pas nécessaire de rooter l'appareil de test.

pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

  • Affiche tous les fichiers extraits pour une référence facile

  • Décompile automatiquement les fichiers APK au format Java et Smali

  • Analyse AndroidManifest.xml pour les vulnérabilités et comportements courants

  • Analyse statique du code source pour les vulnérabilités et comportements courants

  • Informations sur l'appareil

  • et plus

reverse-apk relative/path/to/APP.apk

SUPER est une application en ligne de commande qui peut être utilisée sous Windows, MacOS X et Linux, pour analyser les fichiers .apk à la recherche de vulnérabilités. Pour ce faire, il décompresse les APK et applique une série de règles pour détecter ces vulnérabilités.

Toutes les règles sont regroupées dans un fichier rules.json, et chaque entreprise ou testeur peut créer ses propres règles pour analyser ce dont ils ont besoin.

Téléchargez les derniers binaires sur la page de téléchargement

super-analyzer {apk_file}

StaCoAn est un outil multiplateforme qui aide les développeurs, les chasseurs de bugs et les hackers éthiques à effectuer une analyse de code statique sur les applications mobiles.

Le concept est que vous faites glisser et déposez votre fichier d'application mobile (un fichier .apk ou .ipa) sur l'application StaCoAn et elle générera un rapport visuel et portable pour vous. Vous pouvez ajuster les paramètres et les listes de mots pour obtenir une expérience personnalisée.

Téléchargez la dernière version :

./stacoan

AndroBugs Framework est un système d'analyse de vulnérabilités Android qui aide les développeurs ou les hackers à trouver des vulnérabilités de sécurité potentielles dans les applications Android. Versions Windows

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn est un outil dont le but principal est de détecter et avertir l'utilisateur des comportements malveillants potentiels développés par une application Android.

La détection est effectuée avec l'analyse statique du bytecode Dalvik de l'application, représenté sous forme de Smali, avec la bibliothèque androguard.

Cet outil recherche les comportements courants des applications "malveillantes" tels que : l'exfiltration des identifiants de téléphonie, l'interception du flux audio/vidéo, la modification des données PIM, l'exécution de code arbitraire...

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA est un Cadre d'Analyse et d'Ingénierie Reverse d'Applications Mobiles. C'est un outil qui regroupe des outils couramment utilisés pour l'ingénierie inverse et l'analyse d'applications mobiles, pour aider à tester les applications mobiles contre les menaces de sécurité mobiles de l'OWASP. Son objectif est de rendre cette tâche plus facile et conviviale pour les développeurs d'applications mobiles et les professionnels de la sécurité.

Il est capable de :

Koodous

Utile pour détecter les logiciels malveillants : https://koodous.com/

Obfuscation/Déobfuscation de code

Notez que selon le service et la configuration que vous utilisez pour obfusquer le code. Les secrets peuvent être ou non obfusqués.

De Wikipedia : ProGuard est un outil en ligne de commande open source qui réduit, optimise et obfusque le code Java. Il est capable d'optimiser le bytecode ainsi que de détecter et supprimer les instructions inutilisées. ProGuard est un logiciel gratuit distribué sous la licence publique générale GNU, version 2.

ProGuard est distribué dans le cadre du SDK Android et s'exécute lors de la construction de l'application en mode release.

Trouvez un guide étape par étape pour déobfusquer l'APK dans https://blog.lexfo.fr/dexguard.html

(Dans ce guide) La dernière fois que nous avons vérifié, le mode de fonctionnement de Dexguard était :

  • charger une ressource en tant qu'InputStream ;

  • transmettre le résultat à une classe héritant de FilterInputStream pour le décrypter ;

  • effectuer une obfuscation inutile pour perdre quelques minutes de temps d'un reverseur ;

  • transmettre le résultat décrypté à un ZipInputStream pour obtenir un fichier DEX ;

  • enfin, charger le DEX résultant en tant que ressource en utilisant la méthode loadDex.

DeGuard inverse le processus d'obfuscation effectué par les outils d'obfuscation Android. Cela permet de nombreuses analyses de sécurité, y compris l'inspection du code et la prédiction des bibliothèques.

Vous pouvez télécharger un APK obfusqué sur leur plateforme.

C'est un déobfuscateur Android générique. Simplify exécute virtuellement une application pour comprendre son comportement, puis essaie d'optimiser le code pour qu'il se comporte de manière identique mais soit plus facile à comprendre pour un humain. Chaque type d'optimisation est simple et générique, donc peu importe le type spécifique d'obfuscation utilisé.

APKiD vous donne des informations sur comment un APK a été créé. Il identifie de nombreux compilateurs, packers, obfuscateurs, et d'autres choses étranges. C'est PEiD pour Android.

Manuel

Lisez ce tutoriel pour apprendre quelques astuces sur comment inverser l'obfuscation personnalisée

Laboratoires

AndroL4b est une machine virtuelle de sécurité Android basée sur ubuntu-mate qui inclut la collection des derniers frameworks, tutoriels et laboratoires de différents geeks de la sécurité et chercheurs pour l'ingénierie inverse et l'analyse de logiciels malveillants.

Références

À essayer

Rejoignez le Serveur Discord de HackenProof pour communiquer avec des hackers expérimentés et des chasseurs de bugs !

Perspectives sur le Hacking Engagez-vous avec du contenu qui explore le frisson et les défis du hacking

Actualités sur le Hacking en Temps Réel Restez informé du monde du hacking en évolution rapide grâce à des actualités et des informations en temps réel

Dernières Annonces Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme

Rejoignez-nous sur Discord et commencez à collaborer avec les meilleurs hackers dès aujourd'hui!

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

Dernière mise à jour