IPhone-Startvorgang. Teil 1: Boot-ROM

Hallo Kollegen.





Ich fand es interessant, Informationen über die interne Struktur der Apple-Technologie mit der Community zu teilen, da es nur sehr wenige Artikel zu diesem Thema gibt. Ich habe beschlossen, mit dem iPhone zu beginnen. Daher schlage ich vor, dass Sie zusammen mit mir versuchen, die Arbeit dieses mysteriösen Geräts zu verstehen.





Ich werde versuchen, die neuesten Modelle ins Visier zu nehmen. Ich würde mich freuen, wenn Ihre Kommentare auf Fehler hinweisen und uns allen helfen, besser zu verstehen, wie die Geräte, die uns umgeben, funktionieren.





Einführung

Ich weiß nicht, ob dies jemanden überraschen wird oder nicht, aber das Starten eines iPhone unterscheidet sich nicht wesentlich vom Starten eines IBM- PC - kompatiblen Computers in Form einer Systemeinheit unter einem Tisch, über den bereits viel gesprochen hat wurde geschrieben. Dies ist wahrscheinlich der Grund, warum es zu diesem Thema so wenige Artikel gibt, die sich auf mobile Geräte beziehen.





Wenn Sie den Prozess des Starts des iPhone als Ganzes betrachten, handelt es sich um eine Kette vertrauensvoller Übergänge von einer Phase des Downloads zu einer anderen, die als "Vertrauenskette" bezeichnet wird . Im Allgemeinen sind drei unabhängige Programme an dem Prozess beteiligt: Boot-ROM , iBoot und der XNU-Kernel (in der Reihenfolge der Ausführung). Die Übertragung der Kontrolle von einem zum anderen erfolgt, nachdem die Identität der Person, auf die die Kontrolle übertragen werden soll, überprüft wurde. Jeder von ihnen hat die kryptografische Signatur von Apple . Es stellt sich eine vernünftige Frage: Wie wird die Echtheit des ersten Schritts überprüft? Antwort: auf keinen Fall .





Der allererste erhält die Kontrolle über das Boot-ROM. Es ist eine unveränderliche Komponente des Systems, es wird werkseitig genäht und ändert sich nicht mehr. Es kann nicht aktualisiert werden (im Gegensatz zu BIOS und UEFI). Daher macht es keinen Sinn, die Echtheit zu überprüfen. Daher hat es den entsprechenden Status: "Hardware-Root of Trust" . Der öffentliche Schlüssel der Apple Root Certificate Authority (CA) ist in das Boot-ROM eingebettet, mit dem die Authentizität des iBoot überprüft wird. IBoot überprüft wiederum die Authentizität des XNU-Kerns mit seinem Schlüssel. Mit dieser Überprüfungskette können Sie nur vertrauenswürdige Software ausführen.





Vertrauenskette
Vertrauenskette

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





Ungefähre Bedienung der Seitentaste

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





Verfahren zum Zurücksetzen beim Einschalten
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



    .





RAM-Layout für Boot-ROM
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