// L’interception réseau des applications Flutter sous Android - ORHUS

Rappel sur les applications dites « Cross Platform »

Le développement des applications dites « Cross Platform », passe par l’utilisation d’un Framework qui, une fois la base applicative développée, créera automatiquement une application distincte pour chacune des plateformes à cibler (iOS, Android, etc.).

Plusieurs Frameworks ont vu le jour ces dernières années pour suivre l’évolution spectaculaire du nombre d’applications mobiles telles que Flutter (par Google en 2011), React Native (par Facebook en 2015), Xamarin (2011) ou encore Unity (2005).

Qu’est-ce que Flutter ?

Flutter est un Framework développé par Google permettant de créer des applications Android et iOS (mais également Windows, Mac ou encore Linux) basé sur le langage de programmation Dart.

Dart offre deux modes de fonctionnement :

  • AOT (Ahead Of Time) permettant de générer une application native pour chaque plateforme. Par ce biais, le code sera optimisé directement pour l’architecture sur laquelle il fonctionnera
  • JIT (Just-In-Time) offrant la fonctionnalité de Hot Reload. L’idée du Hot Reload en Flutter est de corriger les temps de build en ne mettant plus que quelques millisecondes (voire secondes dans le pire des cas) entre chaque modification


Identifier une application Flutter

Il est fréquemment simple d’identifier le Framework utilisé par une application. En effet, les librairies chargées au sein du fichier APK pour Android ou IPA pour iPhone dézippé ne mentent que rarement :

Il est ainsi assez facile d’identifier la librairie flutter au sein du dossier lib/ ou également en apercevant le dossier flutter_assets.

Si vous avez de nombreux fichiers à identifier, il est également possible d’utiliser apkFram ou ipaFram pour cela.

Flutter et l’analyse réseau

Dans le cadre de l’analyse des applications mobiles, l’analyse réseau est primordiale. Pour réaliser cette dernière, il est souvent suffisant de mettre en place un proxy applicatif tel que Burp afin d’analyser le trafic.

Néanmoins, Flutter n’utilise pas les paramètres de proxy du système, ni le magasin de certificats du système. Les approches standards ne fonctionnent donc pas.

Pour preuve, lors de l’installation et utilisation de l’application flutter-test-apps, aucune donnée n’est présente au sein de Burp malgré la configuration du proxy ainsi que du périphérique :

Néanmoins, via une interception par le biais de tcpdump et une analyse Wireshark, il est possible de confirmer qu’une requête à destination de site neverssl.com est bien exécutée :

Nous voilà rassurés, la connexion se fait bien, mais Wireshark n’étant pas très pratique pour les audits, il est nécessaire de trouver une alternative à cela.

La solution au proxy applicatif avec Flutter

Bien que de nombreuses solutions existent pour contourner ce problème, nous allons tenter d’aller au plus simple en mettant en place un proxy à l’aide de l’application Oxy Proxy Manager.

Une fois l’application Oxy Proxy Manager installée et Burp lancé et configuré (écoute sur le port 8080 sur l’ensemble des interfaces), il est alors possible de spécifier un proxy permettant de rediriger la totalité du trafic réseau (dans notre exemple, 192.168.1.64 correspond à l’adresse IP de notre machine hôte) :

En relançant l’application flutter-test-apps, il est à présent possible de voir les requêtes transiter au sein de Burp que cela soit en HTTP ou en HTTPS :

Le User-Agent de la requête permet, quant à lui, de bien confirmer le Framework utilisé 😉