MobileHackingLab – Writeup – Android – IOT Connect

Writeup Android IOT Connect

MobileHackingLab – Writeup – Android – IOT Connect

par

Régis Senet

Objectif

Exploiter la vulnérabilité d’un Broadcast Receiver. Votre mission consiste à manipuler la fonctionnalité du Broadcast Receiver dans l’application Android « IOT Connect », ce qui vous permet d’activer l’interrupteur principal et de contrôler tous les appareils connectés. Le défi consiste à envoyer une diffusion d’une manière qui ne soit pas réalisable par l’utilisateur invité.


Outil

Installation

Pour commencer, nous allons installer l’application sur un périphérique virtuel (bien que cela fonctionne également avec les périphériques physiques), le tout grâce à ADB :

$ adb install com.mobilehackinglab.iotconnect.apk
Performing Streamed Install
Success

L’application est installée avec succès et se lance parfaitement ! Une fois un compte créé, nous tentons de cliquer sur le bouton « Master Switch » afin d’activer l’interrupteur principal :

Writeup Android IOT Connect


Néanmoins, via l’interface graphique, il n’est pas possible d’activer ce bouton. En effet, cette fonctionnalité n’est pas accessible aux « guests » (d’après la ligne 30 du fichier com.mobilehackinglab.iotconnect.MasterSwitchActivity) :

Writeup Android IOT Connect

Il serait possible de contourner cette protection grâce à une modification du code Smali et une recompilation de l’application et/ou une introspection mémoire avec Frida, néanmoins, on va jouer le jeu et laisser cette vérification en l’état.

En effet, il est possible de voir que le Broadcast Receiver est exécuté ligne 37, après cette vérification lorsqu’un PIN est entré. Un Broadcast Receiver mal configuré pourrait ainsi permettre à un attaquant ou une application malveillante de contourner cette protection.

Fichier AndroidManifest.xml

Au sein du fichier AndroidManifest.xml, il est possible d’identifier un Broadcast Receiver exporté (com.mobilehackinglab.iotconnect.MasterReceiver) et donc accessible :

Writeup Android IOT Connect

Lorsqu’un Broadcast Receiver est déclaré statiquement, l’intent-filter permet de déclarer quelle(s) action(s) (« MASTER_ON ») ce dernier est en mesure de recevoir, par le biais d’Intent.

Grâce à l’export, d’autres applications sont en mesure d’interagir avec le Broadcast Receiver de la manière suivante : adb shell am broadcast -a MASTER_ON

En cherchant « masterReceiver » ou bien « MASTER_ON » au sein du code source de l’application décompilé avec Jadx-gui, il est possible d’identifier le message que nous souhaitons obtenir (« All devices are turned on ») au sein du fichier com.mobilehackinglab.iotconnect.CommunicationManager :

Writeup Android IOT Connect

Il est possible de constater qu’il n’y a plus de contrôle si l’utilisateur est un guest ou non.

Néanmoins, pour arriver à ce message, plusieurs contrôles sont en place :

  • Ligne 25

Ce contrôle vérifie qu’un Intent existe (qu’il n’est pas null) et que l’action associée est bien « MASTER_ON ».

  • Ligne 28

Ce contrôle vérifie que la clé (key) reçue sous forme d’extra (getIntExtra(‘key’, 0)) est égale à celle spécifiée au sein de la fonction check_key(). Cette fonction est accessible au sein de defpackage.Checker :

Writeup Android IOT Connect


L’action précédemment spécifiée ainsi que l’extra key étant un entier permettent d’affiner la commande à exécuter pour faire appel au Broadcast Receiver en question : adb shell am broadcast -a MASTER_ON –ei key <PIN>

Tentons avec un code PIN aléatoire :

Writeup Android IOT Connect

Ainsi, le message d’erreur indique bien que nous avons été en mesure de contourner la vérification du type d’utilisateur est que nous sommes directement présents en ligne 32 du fichier com.mobilehackinglab.iotconnect.CommunicationManager signifiant que la condition ligne 26 (vérification du PIN) n’est pas vérifiée.

Disposant de l’ensemble des éléments cryptographiques au sein du code source de l’application, il est possible de créer un rapide script python permettant de bruteforcer la clé de chiffrement :

Writeup Android IOT Connect

Grâce à cette clé, il est alors possible de faire appel à notre Broadcast Receiver avec le bon PIN grâce à la commande suivante : adb shell am broadcast -a MASTER_ON –ei key <PIN>

Ce que nous faisons de mieux

effet glitch-court

Évaluez la sécurité de vos systèmes d’information afin d’anticiper les cyber-attaques.

Tests d'intrusion

Test d'intrusion

Mettez-vous dans la peau d’un attaquant

pour éprouver votre sécurité.

Audits

Audit

Identifions ensemble les points
de sécurité primordiaux à améliorer.

Formations

Formation

La formation est le premier
rempart de sécurité à mettre en place.

Tests d'intrusion

Test d'intrusion

Mettez-vous dans la peau d’un attaquant pour éprouver votre sécurité.

Audits

Audit

Identifions ensemble les points
de sécurité primordiaux à améliorer.

Formations

Formation

La formation est le premier
rempart de sécurité à mettre en place.

Ils nous font confiance

effet glitch-court

Qui sommes-nous ?

effet glitch-court

Depuis 2018, ORHUS s’est imposé comme un acteur clé de la cybersécurité, présent sur de nombreux challenges étatiques et engagé auprès de centaines d’entreprises à travers 3 continents. Fondée avec la volonté de dépasser les limites des audits partiels, ORHUS repose sur une approche exigeante et manuelle de l’audit de sécurité, menée par une équipe de 7 experts. Chaque jour, notre équipe met son expertise au service de votre réussite, avec pour priorité l’écoute de vos besoins et l’assurance d’un haut niveau de sécurité.

Vous souhaitez renforcer votre sécurité ?