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