Articulo de referencia

ROM de arranque

La ROM de arranque es una memoria de solo lectura (ROM) que se utiliza para arrancar un sistema informático. [ 1 ] Contiene instrucciones que se ejecutan después de que la CPU s...

La ROM de arranque es una memoria de solo lectura (ROM) que se utiliza para arrancar un sistema informático. [ 1 ] Contiene instrucciones que se ejecutan después de que la CPU se reinicia al vector de reinicio y, por lo general, carga un gestor de arranque . Existen dos tipos de ROM de arranque: una ROM de arranque de máscara que no se puede modificar posteriormente y una ROM de arranque grabable, como una EEPROM o un chip de memoria flash .

Objetivo

Al encenderse, el hardware suele arrancar sin inicializar. Para continuar el arranque, el sistema puede necesitar leer un gestor de arranque desde algún dispositivo periférico , normalmente un dispositivo de almacenamiento de datos . A menudo, es más sencillo implementar rutinas para leer desde dispositivos de almacenamiento externos mediante software que mediante hardware. Una ROM de arranque proporciona un lugar para almacenar este código de carga inicial, en una ubicación fija inmediatamente accesible para el procesador cuando comienza la ejecución.

Operación

La ROM de arranque se ubica en la memoria en una posición fija, y el procesador está diseñado para comenzar a ejecutar desde esta posición después del reinicio, según el vector de reinicio del procesador. La ROM de arranque se encuentra en el mismo chip que la CPU o es un chip ROM externo . En los sistemas modernos, la ROM de arranque (ya sea integrada en la CPU o en un chip ROM externo) suele usar memoria flash NOR , que admite la ejecución en el mismo lugar .

La ROM de arranque inicializará los buses de hardware y los periféricos necesarios para el arranque. En algunos casos, la ROM de arranque puede inicializar la DRAM , mientras que en otros, esta tarea recae en el gestor de arranque . En algunas CPU ARM modernas, la ROM de arranque integrada en la CPU inicializa la DRAM y luego carga un gestor de arranque ; sin embargo, una vez cargado un gestor de arranque (como Das U-Boot ), este puede reinicializar la DRAM para corregir errores y reducir costes.

Al finalizar la inicialización del hardware, la ROM de arranque intentará cargar un gestor de arranque desde periféricos externos (como un disco duro o una unidad de estado sólido , una tarjeta eMMC o eUFS , una tarjeta microSD , una EEPROM externa, etc.) o a través de protocolos específicos en un puerto de comunicaciones (como un puerto serie o Ethernet , etc.).

En muchos sistemas en un chip (SoC), se pueden configurar los periféricos o buses desde los que la ROM de arranque intenta cargar el gestor de arranque, así como el orden en que se cargan. Esta configuración se puede realizar fundiendo fusibles electrónicos dentro del sistema en un chip para codificar dicha información, o bien configurando pines o puentes específicos del sistema en un nivel alto o bajo.

Algunas ROM de arranque son capaces de comprobar la firma digital del gestor de arranque y se niegan a ejecutarlo, deteniendo el arranque si la firma no es válida o no se ha firmado con una clave autorizada. En algunas ROM de arranque, el hash de la clave pública necesaria para verificar las firmas está codificado en fusibles electrónicos OTP dentro del SoC. Algunas ROM de arranque de sistemas en un chip también admiten una infraestructura de clave pública , y el hash de la clave pública de la autoridad de certificación (CA) se codifica en los fusibles electrónicos. De esta forma, la ROM de arranque puede comprobar si el gestor de arranque está firmado con una clave autorizada, verificando dicha clave con la clave pública de la CA (cuyo hash está codificado en los fusibles electrónicos). [ 2 ] [ 3 ]

Esa función puede utilizarse para implementar características de seguridad o como raíz de confianza de hardware en una cadena de confianza , pero una vez configurada, los usuarios no tienen la libertad de reemplazar el gestor de arranque por el que deseen sin recurrir a exploits de la ROM de arranque . Debido a esto, la función ha generado gran preocupación en la comunidad del software libre. [ 4 ]

Justo antes de saltar al gestor de arranque, algunos sistemas en un chip también eliminan la ROM de arranque del mapeo de memoria , mientras que otros no, lo que permite volcar la ROM de arranque para su posterior análisis . [ 3 ] Si la ROM de arranque sigue siendo accesible, los gestores de arranque también pueden llamar al código de la ROM de arranque (que a veces está documentado).

Suspender a RAM

Cuando un sistema en un chip (SoC) entra en modo de suspensión a RAM , en muchos casos, el procesador se apaga por completo mientras que la RAM se pone en modo de autorrefresco. Al reanudarse, la ROM de arranque se ejecuta de nuevo y muchas ROM de arranque pueden detectar que el SoC estaba en modo de suspensión a RAM y reanudarse saltando directamente al núcleo , que se encarga de volver a encender los periféricos que estaban apagados y restaurar el estado en el que se encontraba el ordenador anteriormente.

Implementaciones específicas

Allwinner

En muchos sistemas en un chip Allwinner (A10, A20, A64), la ROM de arranque espera a que se cargue un gestor de arranque a través de USB (si un PIN específico está en alto) o intenta arrancar en varios periféricos en un orden fijo. [ 5 ]

Algunos sistemas en chip Allwinner pueden verificar la firma de los gestores de arranque. [ 6 ] Pero la mayoría de los dispositivos que se fabrican no están configurados para ello. Esto ha permitido que el software libre y de código abierto añada soporte para muchos sistemas en chip Allwinner y dispositivos que los utilizan en gestores de arranque como U-Boot . [ 7 ]

Manzana

En los dispositivos iPhone , iPad , Apple Watch , iPod Touch y Apple TV , la ROM de arranque se llama "SecureROM" [ 8 ] . Es una versión simplificada de iBoot . Proporciona un mecanismo de actualización de firmware del dispositivo (DFU), que se puede activar mediante una combinación de botones especial. [ 9 ]

BIOS

En los ordenadores IBM PC más antiguos , la BIOS funciona como una ROM de arranque.

NXP

La ROM de arranque de los sistemas en chip (SOC) de NXP permite configurar los periféricos mediante pines específicos del sistema en chip. En la familia i.MX6, también permite configurar el orden de arranque mediante eFuses .

La ROM de arranque de varios SoC de NXP tiene muchas maneras de cargar el gestor de arranque de primera etapa (desde eMMC, microSD, USB, etc.).

Varios SoC de NXP se pueden configurar para verificar la firma de los gestores de arranque. Muchos dispositivos con dichos SoC se vendieron sin esa verificación configurada y en esos dispositivos los usuarios pueden instalar el gestor de arranque que deseen, incluidos varios gestores de arranque de software libre y de código abierto como Das U-Boot [ 10 ] y Barebox .

Firmware abierto

Open Firmware funciona como una ROM de arranque en sistemas como las máquinas SPARC más recientes de Sun Microsystems y los Mac basados ​​en PowerPC .

STMicroelectronics

Los microcontroladores de la familia STM32 de STMicroelectronics tienen una ROM integrada (también conocida como "ROM en el chip") llamada memoria del sistema [ 11 ] para facilitar la programación del sistema vacío. Ciertas combinaciones de pines o, a veces, fusibles y/o comprobaciones de flash vacío obligan al chip a arrancar desde la ROM en lugar del firmware en la memoria flash principal. Esto permite programar chips vacíos sin recurrir a interfaces de programación de hardware. Técnicamente, esta ROM se almacena en un área dedicada de la matriz flash y ST la programa durante la producción. La mayoría de los microcontroladores STM32 pueden programarse al menos a través de UART, algunos admiten USB y eventualmente otras interfaces como I2C , SPI o CAN . El núcleo Cortex-M normalmente obtiene vectores de las direcciones conocidas 0x00000000 (valor inicial del puntero de pila ) y 0x00000004 (valor inicial del contador de programa ). Sin embargo, los pines y/o fusibles definen qué memoria se asigna en estas direcciones. Una de las opciones de mapeo es la memoria del sistema; otra opción sería almacenar el firmware principal en la memoria flash. En este caso, el firmware debería realizar todas las funciones de las ROM de arranque; parte del firmware podría funcionar como un gestor de arranque similar a la ROM de arranque de ST. El hardware podría aplicar restricciones de solo lectura al área de arranque, convirtiéndola en una versión de la ROM de arranque proporcionada por el usuario.

Instrumentos Texas

Las ROM de arranque de varios sistemas en un chip de Texas Instruments permiten configurar los periféricos mediante pines específicos del sistema en un chip. Disponen de varias formas de cargar el gestor de arranque de primera etapa (denominado MLO en los manuales de referencia de los sistemas en un chip):

  • Se puede cargar desde varios dispositivos de almacenamiento (MMC/SD/eMMC, NAND, etc.).
  • Con MMC/SD/eMMC, se puede cargar directamente desde los sectores de la tarjeta (modo RAW, según el manual) o desde una partición FAT12/16/32.
  • También se puede cargar desde USB o UART.

En el sistema en chip OMAP36xx, la ROM de arranque busca el cargador de arranque de primera etapa en los sectores 0x0 y 0x20000 (128 KB), [ 12 ] y en el sistema en chip AM3358 , [ 13 ] busca adicionalmente en 0x40000 (256 KiB) y 0x60000 (384 KiB). En ambos casos, su tamaño máximo es de 128 KiB. Esto se debe a que el cargador de arranque (de primera etapa) se carga en una SRAM que se encuentra dentro del sistema en chip.

Los sistemas en un chip OMAP y AM335x se pueden configurar para verificar la firma de los gestores de arranque. Muchos dispositivos con dicho sistema en un chip se vendieron sin la verificación configurada y en esos dispositivos los usuarios pueden instalar el gestor de arranque que deseen, incluidos varios gestores de arranque de software libre y de código abierto como Das U-Boot [ 14 ] y Coreboot [ 15 ] y Barebox .

UEFI

UEFI funciona como una ROM de arranque en sistemas como los ordenadores compatibles con IBM PC más recientes .

Seguridad

Manzana

En dispositivos que ejecutan iOS , las vulnerabilidades de la ROM de arranque (como las vulnerabilidades limera1n, [ 16 ] alloc8, [ 17 ] y checkm8 [ 8 ] [ 16 ] ) se utilizan a veces para el jailbreaking de iOS . La ventaja para quienes desean hacer jailbreak a sus dispositivos frente a las vulnerabilidades que afectan a iOS es que, dado que la ROM de arranque no se puede modificar —y que los dispositivos que ejecutan iOS no tienen fusibles para añadir código a la ROM de arranque—, Apple no puede solucionar la vulnerabilidad en los dispositivos existentes.

Nvidia Tegra

La ROM de arranque del SoC Tegra de Nvidia (utilizado por la Nintendo Switch ) contenía una vulnerabilidad que permitía a los usuarios ejecutar el gestor de arranque que quisieran. [ 18 ] [ 19 ]

Véase también

Referencias

  1. Bin, Niu; Dejian, Li; Zhangjian, LU; Lixin, Yang; Zhihua, Bai; Longlong, He; Sheng, Liu (agosto de 2020). «Investigación y diseño de Bootrom compatible con el modo de arranque seguro». Simposio Internacional de Ingeniería Informática y Comunicaciones Inteligentes (ISCEIC) de 2020. págs. 5–8 . doi : 10.1109/ISCEIC51027.2020.00009 . ISBN  978-1-7281-8171-4. S2CID 231714880 . 
  2. Arranque seguro (Mk II)
  3. 1 2 Emulación de la BootROM del Exynos 4210 en QEMU , 7 de marzo de 2018
  4. Ordenadores de placa única
  5. Artículo de BROM linux-sunxi
  6. Artículo de la Guía de registro SID en la wiki de linux-sunxi
  7. Página de U-Boot en la wiki de linux-sunxi
  8. 1 2 "Nota de vulnerabilidad CERT/CC VU#941987" . www.kb.cert.org . Consultado el 22 de mayo de 2024 .
  9. Todesco, Luca. "El único truco extraño que SecureROM odia" (PDF) . Archivado (PDF) del original el 8 de noviembre de 2019.
  10. imx6.txt
  11. Nota de aplicación AN2606 (PDF)
  12. Manual de referencia OMAP36xx (swpu177aa.pdf), 26.4.7.6 Tarjetas MMC/SD
  13. Manual de referencia AM3358 (spruh73p.pdf), 26.1.8.5 Tarjetas MMC / SD.
  14. README.omap3
  15. Beaglebone Negro
  16. 1 2 "El exploit Checkm8 abre la puerta a un jailbreak imposible de parchear en iPhone 4S a través de iPhone X" . MacRumors . 27 de septiembre de 2019. Consultado el 22 de mayo de 2024 .
  17. "NVD - CVE-2019-9536" . nvd.nist.gov . Consultado el 22 de mayo de 2024 .
  18. "Los hackers encuentran una forma 'imposible de parchear' de vulnerar la Nintendo Switch" . Engadget . 24 de abril de 2018. Archivado del original el 9 de noviembre de 2020. Consultado el 30 de septiembre de 2021 .
  19. Divulgación de vulnerabilidad: Fusée Gelée , 28 de octubre de 2021