Processo de inicialização do iPhone. Parte 1: ROM de inicialização

Olá colegas.





Achei interessante compartilhar informações sobre a estrutura interna da tecnologia Apple com a comunidade, uma vez que existem poucos artigos sobre esse assunto. Decidi começar pelo iPhone. Portanto, sugiro que você, junto comigo, tente entender o funcionamento deste dispositivo misterioso.





Vou tentar focar nos modelos mais recentes. Ficaria feliz se seus comentários apontassem erros e ajudassem a todos nós a entender melhor como funcionam os dispositivos que nos rodeiam.





Introdução

Não sei se isso vai surpreender alguém ou não, mas lançar um iPhone não é muito diferente do processo de lançar um computador compatível com IBM-PC na forma de uma unidade de sistema sob uma mesa, sobre a qual muito já foi escrito. É provavelmente por isso que existem tão poucos artigos sobre esse tópico relacionados a dispositivos móveis.





Se você olhar para o processo de lançamento do iPhone, como uma imagem completa, então é uma cadeia de transições de confiança de uma fase do download para outra, que é chamada de "Cadeia de confiança" . Em geral, existem 3 programas independentes envolvidos no processo: Boot ROM , iBoot e o kernel XNU (em ordem de execução). A transferência de controle de um para outro ocorre após a verificação da identidade da pessoa para quem o controle deve ser transferido. Cada um deles possui a assinatura criptográfica da Apple . Uma questão razoável surge: como é verificada a autenticidade da primeira etapa? Resposta: de jeito nenhum .





O primeiro obtém o controle da ROM de inicialização. É um componente imutável do sistema, é costurado na fábrica e não muda mais. Não pode ser atualizado (ao contrário do BIOS e UEFI). Portanto, não vale a pena verificar sua autenticidade. Portanto, possui o status adequado: "Raiz de confiança do hardware" . A chave pública da autoridade de certificação (CA) Apple Root está incorporada na ROM de inicialização , que é usada para verificar a autenticidade do iBoot. Por sua vez, o iBoot verifica a autenticidade do núcleo XNU com sua chave. Essa cadeia de verificações permite que você execute apenas softwares confiáveis.





Cadeia de confiança
Cadeia de confiança

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





Operação aproximada do botão 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   , .





Procedimento de reinicialização de inicialização
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



    .





Layout de RAM para ROM de inicialização
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