Processus de démarrage de l'iPhone. Partie 1: ROM de démarrage

Bonjour chers collègues.





J'ai trouvé intéressant de partager des informations sur la structure interne de la technologie Apple avec la communauté, car il y a très peu d'articles sur ce sujet. J'ai décidé de commencer par l'iPhone. Par conséquent, je vous suggère, avec moi, d'essayer de comprendre le travail de ce mystérieux appareil.





J'essaierai de cibler les modèles les plus récents. Je serais heureux que vos commentaires mettent en évidence des erreurs et nous aident tous à mieux comprendre le fonctionnement des appareils qui nous entourent.





introduction

Je ne sais pas si cela surprendra quelqu'un ou non, mais le lancement d'un iPhone n'est pas très différent du processus de lancement d'un ordinateur compatible IBM-PC sous la forme d'une unité centrale sous une table, dont beaucoup ont déjà été écrit. C'est probablement pourquoi il existe si peu d'articles sur ce sujet liés aux appareils mobiles.





Si vous regardez le processus de lancement de l'iPhone, dans son ensemble, il s'agit d'une chaîne de transitions de confiance d'une étape du téléchargement à une autre, qui s'appelle la «chaîne de confiance» . En général, 3 programmes indépendants sont impliqués dans le processus: la ROM de démarrage , iBoot et le noyau XNU (dans l'ordre d'exécution). Le transfert de contrôle de l'un à l'autre intervient après que l'identité de la personne à qui le contrôle doit être transféré ait été vérifiée. Chacun d'eux a la signature cryptographique d'Apple . Une question raisonnable se pose: comment l'authenticité de la première étape est-elle vérifiée? Réponse: pas question .





Le tout premier contrôle la ROM de démarrage. C'est un composant immuable du système, il est cousu en usine et ne change plus. Il ne peut pas être mis à jour (contrairement au BIOS et UEFI). Par conséquent, il est inutile de vérifier son authenticité. Par conséquent, il a le statut approprié: "Racine matérielle de confiance" . La clé publique de l'autorité de certification racine Apple (CA) est intégrée à la ROM de démarrage , qui est utilisée pour vérifier l'authenticité de l'iBoot. À son tour, iBoot vérifie l'authenticité du noyau XNU avec sa clé. Cette chaîne de contrôles vous permet d'exécuter uniquement des logiciels de confiance.





Chaîne de confiance
Chaîne de confiance

  ,   Boot ROM.        ,   Jailbreak (  ). Boot ROM     .  ,   . 150 .  ,     .   Boot ROM  iBoot   . . (AES, ANC, USB), ( , ), (env, libc, image),   (  SoC, MMU, NAND). , . iBoot ,  ,  ..





.

























1. Boot ROM













BIOS, UEFI, coreboot





SRAM





2. iBoot













GNU GRUB, Windows Bootmgr, efibootmgr





SDRAM





3. XNU













Linux, NT kernel, GNU Hurd





SDRAM





4. iOS













Ubuntu, Windows, Android





SDRAM





  . (     ,   ,   ,     ).   (PMIC â€” Power Management Integrated Circuit).   PMIC  , , Lightning, ( ).     . .   ,       .





  PMIC   Power-On. :     ( ).  â€” .





, . ,   - .  ,     . ,     ,        .     , , .    PMIC Side-Button ,   , , :   (  ).    ,  PMIC   PMIC.   D-   .     CLR .   ,   RC-, .





Fonctionnement approximatif du bouton latéral

  ,    CTLx -.   .    CLR ,   CLK ,   CTLx , PMIC   .





SoC CPU

     .     ,   ,  ,   ,   . -     .   (System on a Crystal â€” SoC)  Apple     â€” TSMC (Taiwan Semiconductor Manufacturing Corporation). Apple ,   ,   . ,   -   . ,   Apple.





SoC   . , , , , , -,  .   .   SoC .      . (Power-on reset / PoR generator).   : ,   . PoR   , .





Procédure de réinitialisation à la mise sous tension
Power-on reset

      ,   , RC-  .     ( ), PoR ,     .





  . , . PoR   - ( ).   (Program Counter/PC register)   . (Reset vector).   ,    0Ă—100000000



.       (    ,   ).      .





, ,   . ,   ,   (primary core),   .     .





    (Read only memory â€” ROM). SoC. ( )    ( ).   .   , Boot ROM.   .





Boot ROM

, Boot ROM â€” , SoC.       -.    Apple.   C  , - .     Boot ROM,     , -,   â€” _start



. ,   ,   arm64.   :





  1. (L2 cache) ( 2 MiB). 





  2. , . , .





  3. main



    ( C) LR. ret



    main



    .





  4. . , , .





  5. .





  6. , main



    .





Disposition de la RAM pour la ROM de démarrage
Boot ROM

, ,   C.





main



CPU.

, , Exception Levels (EL): EL0, EL1, EL2, EL3.   .  â€” .    (    ).   . ,   , .

  CPU   .





  1. (Secure Configuration Register - SCR): (FIQ IRQ). 









  2. (System Control Register: SCTLR): , (Memory Management Unit - MMU, CPU), , ( Execute Never / XN — NX- x86 ), . 









  main



,   .





  :





  1. .





  2. (DVFS - Dynamic voltage and frequency scaling).





  3. , BootROM.





  4. BootROM.





  5. (PLL - Phase Lock loop).





  6. (SEP - Secure Enclave processor).





(sepOS),      .      .





(  -).   (Static Random Access Memory â€” SRAM).     ,   . (Dynamic Random Access Memory â€” DRAM).  , SRAM  ,   DRAM  .      .   ,     .   ,   . SRAM   ( , ),  DRAM   ( , ).  SoC GPIO (General Purpose Input/Output)   .   , , ,  DFU (Device Firmware Upgrade mode â€” ). ,   .





/ (BIOS), Boot ROM : ( )   (heap).    .   ,    Boot ROM.





: , SoC. iPhone :









  1.  













  2. GPIO





,   .  DFU .     ,  ,         DFU , ,   .





  ,     . DFU ,     USB,   - (  NAND ).





if (dfu_enabled) 
  boot_fallback_step = -1;

while (1) {
  if (!get_boot_device(&device, &options))
    break;

  process_boot(device, options);

  if (boot_fallback_step < 0)
    continue;

  boot_fallback_step++;
}

reset();
      
      



  , ( ). ,    USB. ,   «».





Apple  â€” IMG4 ( ).    DER ASN.1.





sequence [
   0: string "IMG4"
   1: payload   - IMG4 Payload, IM4P
   2: [0] (constructed) [
          manifest   - IMG4 Manifest, IM4M
      ]
]
      
      



sequence [
    0: string "IM4P"
    1: string type    - ibot, rdsk, sepi, ...
    2: string description    - 'iBoot-6723.102.4'
    3: octetstring    - the encrypted/raw data
    4: octetstring    - containing DER encoded KBAG values (optional)
        sequence [
            sequence [
                0: int: 01
                1: octetstring: iv
                2: octetstring: key
            ]
            sequence [
                0: int: 02
                1: octetstring: iv
                2: octetstring: key
            ]
        ]
]
      
      



(UtilDM â€” Utility Device Manager), ANC (Abstract NAND Chip)   . NAND   ,   iBoot.   IMG4.

,      .   ,     .   .    â€” (environment)     . , , ,   Boot ROM (Apple Root CA public key).





,   Boot ROM. -,   iBoot.     ,     , - , , ,  ..

iBoot   ,     .





  .     iPhone â€” iBoot.





.






:





Apple: Boot process for iOS and iPad devices

Apple: Hardware security overview

Design & Reuse: Method for Booting ARM Based Multi-Core SoCs

Maxim integrated: Power-on reset and related supervisory functions

The iPhone wiki

ARM: Documentation

Jonathan Levin: MacOS and *OS internals

Wikipedia

: iBoot address space

Harry Moulton: Inside XNU Series

Ilhan Raja: checkra1n

Texas Instruments: Push-Button Circuit

iFixit: iPhone 12 and 12 Pro Teardown

SecureROM iBoot, 2018








All Articles