iPhoneの起動プロセス。パート1:ブートROM

こんにちは同僚。





このトピックに関する記事はほとんどないので、Appleテクノロジーの内部構造に関する情報をコミュニティと共有することは興味深いと思いました。私はiPhoneから始めることにしました。ですから、私と一緒に、この不思議な装置の働きを理解してみることをお勧めします。





最新のモデルをターゲットにしようと思います。あなたのコメントがエラーを指摘し、私たちを取り巻くデバイスがどのように機能するかを私たち全員がよりよく理解するのに役立つことを願っています。





前書き

これが誰かを驚かせるかどうかはわかりませんが、iPhoneを起動することは、IBM-PC互換コンピュータをテーブルの下にシステムユニットの形で起動するプロセスと大差ありません。書かれています。これがおそらく、モバイルデバイスに関連するこのトピックに関する記事が非常に少ない理由です。





iPhoneの発売プロセスを全体像として見ると、ダウンロードのある段階から別の段階への信頼の連鎖であり、「信頼の鎖」と呼ばれています。一般に、このプロセスには、ブートROMiBoot、およびXNUカーネル(実行順)の3つの独立したプログラムが含まれます。ある人から別の人への支配権の移転は、支配権を移転すべき人の身元が確認された後に行われます。それぞれにAppleの暗号署名があります。合理的な疑問が生じます:最初のステップの信憑性はどのように検証されますか?回答:まさか





最初にブートROMを制御します。これはシステムの変更不可能なコンポーネントであり、工場でステッチされ、変更されなくなりました。(BIOSやUEFIとは異なり)更新できません。したがって、その真正性を検証する意味はありません。したがって、適切なステータスがあります:「ハードウェアの信頼のルート」Appleルート認証局(CA)の公開鍵ブートROMに埋め込まれており、iBootの信頼性を検証するために使用されます。次に、iBootはXNUコアの信頼性をそのキーで検証します。この一連のチェックにより、信頼できるソフトウェアのみを実行できます。





信頼の鎖
信頼の鎖

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





サイドボタンのおおよその操作

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





電源投入時のリセット手順
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



    .





ブートROMのRAMレイアウト
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