2013-07-24

MasterKey : du cache-cache au root.

C'est à l'équipe de sécurité BlueBox que l'on doit la paternité du bug MasterKey. Avant que la présentation officielle de la faille à la BlackHat 2013 ne soit faite, les détails donnés ont suffit à d'autres chercheurs chevronnés pour la trouver par leurs propres moyens.

Si dans un premier le temps le buzz était alimenté par les "99%", il est ensuite un peu retombé car la faille ne semblait destinée qu'au cache-cache. Saurik a dévoilé il y a quelques jours comment chainer MasterKey aux outils de développement d'Android pour cette fois-ci passer root. Du coup, doit-on avoir peur de cette faille ?

Si vous avez du contenu professionnel sensible sur votre smartphone, il est temps de l'effacer. Si vous avez encore des smartphones sous scellés, il est temps de dumper les bases sqlite !

MasterKey avec des mots simples

Une application Android est un fichier dont le nom se termine par .apk, il s'agit en fait d'un fichier "archive" ZIP classique. Pour vérifier que l'application est bien celle du développeur, chaque fichier est signé. Ce qui donne grosso modo :
  • 0 | fichier0.ext | signaturefichier0
  • 1 | fichier1.ext | signaturefichier1
  • 2 | fichier2.ext | signaturefichier2
  • ...
  • n | fichiern.ext | signaturefichiern
Le problème est qu'Android part du principe que chaque nom de fichier est unique dans l'APK. Donc l'erreur suivante n'est pas détectée :
  • 0 | fichier0.ext | signaturefichier0
  • 1 | fichier1.ext | signaturefichier1
  • 2 | fichier2.ext | signaturefichier2
  • 3 | fichier2.ext | signaturefichier2
    ...
  • n+1 | fichiern.ext | signaturefichiern
Le fichier en position 3 à pour nom fichier2.ext mais est un tout autre fichier. Il n'est PAS le fichier2.ext original, sa signature ne correspond pas mais sera considéré comme valide et sera celui qui sera pris en compte par Android. Un fichier caché par cette technique aura rarement de bonnes intentions pour votre terminal, d'où le ton alarmiste.

MasterKey dans les mains de Saurik

Pour essayer l'automatisation de l'exploit voici les liens vers la version  et la version Windows. Comme vous pouvez le voir sur la capture d'écran, l'exploit fonctionne bien avec Mac OS X et un Galaxy Nexus en rom stock :
La séquence exécutée par l'exploit est la suivante (ou ici):
  • récupérer un application "intéressante" (se sera souvent Settings.apk)
  • utiliser MasterKey pour cacher un AndroidManifest.xml personnalisé (flag android:debuggable)
  • installer l'APK avec l'AndroidManifest.xml personnalisée
  • lancer l'application à travers le debugger
  • poser un arrêt sur android.os.MessageQueue.next()
  • passer une commande en argument à java.lang.Runtime.getRuntime().exec() (avec privilèges)
Le root n'est pas immédiat avec cet exploit, néanmoins vous pouvez exécuter une commande qui passera votre terminal en mode debug avec adb en root au prochain reboot:
$ echo ro.kernel.qemu=1 >/data/local.prop
Après le reboot, "adb root" vous ouvre la voie pour le root permanent (lien vers un "su"):
$ adb shell mount -o remount,rw /system
$ adb push su /system/xbin
$ adb shell chmod 6755 /system/xbin/su
$ adb shell rm /data/local.prop
$ adb reboot
Le root n'est qu'accessoire dans cette histoire. Si votre niveau vous le permet, prenez le temps de lire tout le raisonnement de  Saurik. Très instructif.

Alors, on patche ou pas cette faille ? 

Vous avez plusieurs méthodes pour patcher la faille MasterKey et ses cousines. La première est de passer à CyanogenMod. Moins radical mais tout autant efficace pour cette faille : ReKey.
Bien entendu ces deux méthodes nécessitent d'être root, mais ce n'est plus un problème dans notre cas.

Pour ma part je ne patche pas car je trouve très pratique dans mon utilisation d'Android de pouvoir réutiliser la signature du développeur depuis une rom stock.
L'exploitation de MasterKey façon Saurik nécessite un accès physique à mon terminal… qui de toutes façons est synonyme de compromission imminente.

Juste pour éviter une mauvaise blague par un collègue, chiffrez votre terminal, effacez la partition recovery et reverrouillez le bootloader.
Et si vous avez activé ADB, utilisez mon ADB-Lock (la sécurité par clef RSA peut être neutralisée…).

source : Saurik
Enregistrer un commentaire