Android: Sécurité du bootloader et contournement des méthodes d’UNLOCK officielles

Android: Sécurité du bootloader et contournement des méthodes d’UNLOCK officielles

Présentation

Les BOOTLOADER des téléphones estampillés Android est le premier programme à être éxécuté au démarrage. Ce dernier va permettre d’initialiser les différents composants du téléphone puis de démarrer en mode:

  • BOOTLOADER-MODE: écran de sélection ci-dessous, permettant de choisir le mode à démarrer.
  • SYSTEM-MODE: mode normal.
  • RECOVERY-MODE: mode de maintenance/restauration.
  • DOWNLOAD-MODE: flash externe via PC, généralement avec un outil propriétaire spécifique au constructeur: ODIN pour Samsung, LGNPST pour les LG. (A noter que ce mode n’est pas accessible depuis l’écran ci-dessous mais nécessite de démarrer le téléphone connecté au PC en appuyant sur une ou plusieurs touches VOL_UP, VOL_DOWN et POWER. Pour LG: c’est VOL_UP)
  • FASTBOOT-MODE: en parallèle,  le protocole FASTBOOT d’Android, permettant notamment de flasher le téléphone via l’outil du même nom disponible dans le SDK (/sdk/platform-tools), est utilisable seulement à l’écran de sélection ci-dessous. Une fois que le Primary BootLoader(PBL) aura rendu la main au Secondary BootLoader(SBL) aussi appelé Operating System BootLoader(OSBL).
start

Ecran de sélection du BOOTLOADER primaire

dlmode_start

Download mode sur LG Nexus 5

 

Nouvelle architecture des systèmes

Traditionnellement, les systèmes informatiques sont organisés autour d’une unité de calcul central, le CPU.
Cette architecture est en train d’évoluer car, de plus en plus, on rencontre des puces embarquant plusieurs composants matériels habituellement logés sur la carte mère ou slots d’extension PCI*. Ces nouvelles organisations sont dénommées Soc(System On Chip).

  • AMD embarque ainsi des APU (Accelerated Processing Unit) qui combinent CPU, GPU et plus récemment un IOC(Input/Output Controller).
  • Les nouveaux smartphones et tablettes LG/Google, Samsung, HTC et même BlackBerry et Nokia sont basés sur les derniers  Soc Snapdragon Qualcomm. Ces SoC sont devenus extrêmements complexes, voici les specifications des Snapdragon 800 qui équipent notamment les téléphone « Google » fabriqué par LG, le Nexus 5.

800-diagram-960-1012013

Les SoC Snapdragon se divisent en 2 catégories (http://fr.wikipedia.org/wiki/Snapdragon#Nomenclature) :

  • MSM (Mobile Station Modem), anciennement connus sous le nom de QSD qui ont un modem intégré.
  • APQ (Application Processor Qualcomm) qui n’en ont pas.

Les Nexus 5, par exemple, sont équippés de MSM8974.

La particularité des MSM Qualcomm, c’est que le processeur radio, contenant le/les modem est maître du processeur applicatif.  Certaines actions privilégiées ne sont donc pas faisable, même avec un contrôle total du processeur esclave  (accès ROOT, module noyau).

Tous les accès vers la mémoire flash NAND sont centralisés via des routines du BOOTLOADER.

Démunis de carte SD externe, les téléphones sont généralement équipés de mémoire flash NAND interne, appelé eMMC(embedded MultiMedia Card).

 

Déverrouillage smartphone/tablette:

Pour des raisons d’économies de coûts de support/SAV, aucun constructeur de smartphone/tablette(à ma connaissance) ne distribue les appareils avec les droits ROOT par défaut.

Obtenir les droits ROOT sur les téléphones s’obtient généralement de l’une des manières suivantes:

  • Flashage d’une rom ROOT (nécessite un bootloader unlocké)
  • Flashage d’une update contenant le binaire SU qui permettra de passer root. (nécessite un bootloader unlocké)
  • Exploitation d’une vulnérabilité permettant de passer ROOT sur le système Android. L’avantage de cette méthode est qu’elle ne nécessite pas un booloader unlocké.

Conscients des besoins spécifiques aux développeurs ou utilisateurs expérimentés, la plupart des constructeurs fournissent généralement une procédure standard de déverrouillage du bootloader qui leurs permettra de développer/installer des systèmes custom.

  • HTC: il suffit de se rendre sur le portail http://www.htcdev.com/bootloader/ puis d’en faire la demande.
  • LG/Nexus: Constructeur très développer-friendly il suffit de taper fastboot oem unlock

Ces procédures standards sont très pratiques mais ont le gros inconvénient de wiper l’intégralité des DATA utilisateurs. Ceci fait partie du cahier des charges de sécurité d’Android pour éviter qu’un téléphone perdu ou volé puisse être rooté et qu’il soit ainsi possible d’accéder aux données qu’il contient.

 

 Bypass du WIPE des DATA utilisateurs lors de l’unlock du bootloader

 

Les tests suivants ont été réalisés sur un smartphone LG Nexus 5, néanmoins des méthodes similaires sont disponibles pour effectuer la même procédure sur des téléphones d’autres constructeurs:

Etant donné que les téléphones peuvent être unlockés/relockés à volonté, seule une zone mémoire réinscriptible est susceptible de contenir l’état locké/unlocké du bootloader. Sachant que d’après les spécifications de ce téléphone, seule la eMMC du téléphone présente ces caractéristiques, c’est forcément là qu’est stocké l’information sur cet état.

 

Les partitions de la eMMC sont listées dans /dev/block/platform/msm_sdcc.1/by-name:

root@hammerhead:/dev/block/platform/msm_sdcc.1/by-name # ls
DDR
aboot
abootb
boot
cache
crypto
fsc
fsg
grow
imgdata
laf
metadata
misc
modem
modemst1
modemst2
pad
persist
recovery
rpm
rpmb
sbl1
sbl1b
sdi
ssd
system
tz
tzb
userdata

Après diverses comparaisons binaires, on constate qu’ un octet à un offset bien spécifique de la partition misc varie entre le dump locké et le dump unlocké.

La même méthode a été appliquée pour modifier l’état du tamper-flag que l’on peut consulter en mode fastboot par la commande fastboot oem device-info.

bindiff

diff de dump binaire entre partition MISC bootloader locké et unlocké.

 

Comme on peut le voir sur l’image précédente, les octets 0x4010 et 0x4014 contrôlent respectivement l’état locké/unlocké du Bootloader ansi que le tamper_flag qui permet de savoir si des mises à jour ou ROM non signées ont déjà été flashées sur le téléphone.

En récupérant un téléphone en configuration standard: STOCK, il est donc possible, après ROOTage du téléphone via exploitation de vulnérabilité, exemple: towelroot application du célèbre geohot, puis patchage des bons offsets sur la partition misc, il est ainsi possible de complètement bypasser le schéma de sécurité d’android sur la procédure de wipage des DATA lors de l’unlock de bootloader.

A noter qu’il existe également une application qui permet de le faire en mode GUI: bootunlocker:

bootunlocker

bootunlocker

 

Notes additionnelles sur l’unlocking de bootloader

Contrairement à ce que l’on pourrait penser, unlocker le bootloader puis rooter son appareil ne permet pas, comme évoqué plus tôt, d’avoir un accès total.

En effet, généralement, seul le flashage de ROMS non officielles system, boot et recovery est déverrouillé.

L’accès au baseband est quant à lui toujours verrouillé: il n’est pas possible de mettre des partitions radio custom par exemple.

  • Sous HTC, c’est ce qu’on appelle le S-ON (security-on) qui va verrouiller la mémoire flash contre les écritures (NAND-LOCK)
  • Sous LG, l’équivalent fonctionnel est Secure Boot de Qualcomm qui va empêcher les utilisateurs de faire ce qu’ils veulent sur la partie radio grâce à l’implémentation de mécanismes cryptographiques.

 

G.O.