Proceso de arranque del iPhone. Parte 1: ROM de arranque

Hola colegas.





Me pareció interesante compartir información sobre la estructura interna de la tecnología de Apple con la comunidad, ya que hay muy pocos artículos sobre este tema. Decidí comenzar con el iPhone. Por lo tanto, le sugiero que, junto conmigo, intente comprender el funcionamiento de este misterioso dispositivo.





Intentaré apuntar a los modelos más recientes. Me alegraría que sus comentarios señalen errores y nos ayuden a comprender mejor cómo funcionan los dispositivos que nos rodean.





Introducción

No sé si esto sorprenderá a alguien o no, pero lanzar un iPhone no es muy diferente del proceso de lanzar una computadora compatible con IBM-PC en forma de unidad de sistema debajo de una mesa, sobre lo cual ya se ha hecho mucho. sido escrito. Probablemente esta sea la razón por la que hay tan pocos artículos sobre este tema relacionados con los dispositivos móviles.





Si observa el proceso de lanzamiento del iPhone, como una imagen completa, entonces es una cadena de transiciones de confianza de una etapa de la descarga a otra, que se llama la "Cadena de confianza" . En general, hay 3 programas independientes involucrados en el proceso: Boot ROM , iBoot y el kernel XNU (en orden de ejecución). La transferencia de control de uno a otro ocurre después de que se verifica la identidad de la persona a quien se debe transferir el control. Cada uno de ellos tiene la firma criptográfica de Apple . Surge una pregunta razonable: ¿cómo se verifica la autenticidad del primer paso? Respuesta: de ninguna manera .





El primero obtiene el control de la ROM de arranque. Es un componente inmutable del sistema, está cosido en la fábrica y ya no cambia. No se puede actualizar (a diferencia de BIOS y UEFI). Por tanto, no tiene sentido verificar su autenticidad. Por lo tanto, tiene el estado apropiado: "Raíz de confianza de hardware" . La clave pública de la autoridad de certificación (CA) raíz de Apple está incrustada en la ROM de arranque , que se utiliza para verificar la autenticidad del iBoot. A su vez, iBoot verifica la autenticidad del núcleo XNU con su clave. Esta cadena de comprobaciones le permite ejecutar solo software de confianza.





Cadena de confianza
Cadena de confianza

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





Funcionamiento aproximado del botón lateral

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





Procedimiento de reinicio de encendido
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



    .





Diseño de RAM para ROM de arranque
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