Android bootloader

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).

:توضيح: Android BOOTLOADER Start

Ecran de sélection du BOOTLOADER primaire

:توضيح: Android BOOTLOADER 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.


:توضيح: Android BOOTLOADER 800-diagram-960-1012013


Les SoC Snapdragon se divisent en 2 catégories


Snapdragon :


    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 [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] puis d’en faire la demande.
    LG/Nexus: Constructeur très développer-friendly il suffit de taper fastboot oem unlock

ddd 

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.



:توضيح: Android BOOTLOADER 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:

:توضيح: Android BOOTLOADER Bootunlocker_app

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.



uu

ii