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.
, 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 , .
, , 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. :
(L2 cache) ( 2 MiB).
, . , .
main
( C) LR.ret
main
.
. , , .
.
,
main
.
, , C.
main
CPU.
, , Exception Levels (EL): EL0, EL1, EL2, EL3. . — . ( ). . , , .
CPU .
(Secure Configuration Register - SCR): (FIQ IRQ).
.
(System Control Register: SCTLR): , (Memory Management Unit - MMU, CPU), , ( Execute Never / XN — NX- x86 ), .
.
main
, .
:
.
(DVFS - Dynamic voltage and frequency scaling).
, BootROM.
BootROM.
(PLL - Phase Lock loop).
(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 :
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