Загрузочное ПЗУ
Загрузочное ПЗУ — это тип ПЗУ , который используется для загрузки компьютерной системы. [1] Существует два типа: загрузочное ПЗУ по маске , которое впоследствии невозможно изменить, и загрузочное EEPROM , которое может содержать реализацию UEFI .
Цель
[ редактировать ]После включения оборудование обычно запускается неинициализированным. Чтобы продолжить загрузку, системе может потребоваться прочитать загрузчик с какого-либо периферийного устройства. Часто проще реализовать процедуры чтения с внешних устройств хранения данных программно, чем аппаратно. Загрузочное ПЗУ предоставляет место для хранения этого начального кода загрузки в фиксированном месте, сразу доступном процессору при начале выполнения.
Операция
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( Октябрь 2022 г. ) |
Загрузочное ПЗУ отображается в памяти в фиксированном месте, и процессор предназначен для запуска выполнения из этого места после перезагрузки. Обычно он размещается на том же кристалле, что и ЦП, но это также может быть внешняя микросхема ПЗУ , как это часто бывает в старых системах. В современных системах загрузочное ПЗУ (встроенное в ЦП или внешнее ПЗУ) обычно использует флэш-память NOR , которая поддерживает выполнение на месте .
Загрузочное ПЗУ затем инициализирует аппаратные шины и периферийные устройства, необходимые для загрузки. В некоторых случаях загрузочное ПЗУ способно инициализировать ОЗУ , а в других случаях это зависит от загрузчика .
В конце аппаратной инициализации загрузочное ПЗУ попытается загрузить загрузчик с внешнего периферийного устройства (например, eMMC, карты microSD, внешнего EEPROM и т. д.) или через определенный протокол(ы) на шине. для передачи данных (например, USB, UART и т. д.).
Во многих системах на кристалле можно настроить периферийные устройства или шины, с которых загрузочное ПЗУ пытается загрузить загрузчик (например, eMMC для встроенного загрузчика или внешнюю EEPROM для реализации UEFI), а также порядок их загрузки. Эту конфигурацию можно выполнить, включив некоторые электронные предохранители внутри системы на чипе для кодирования этой информации или установив на кристалле определенные контакты или перемычки системы на высоком или низком уровне.
Некоторые загрузочные ПЗУ способны проверять цифровую подпись загрузчика и отказываются запускать загрузчик и останавливать загрузку , если подпись недействительна или не подписана авторизованным ключом. В некоторых загрузочных ПЗУ хэш открытого ключа, необходимый для проверки подписей, закодирован в электронных предохранителях внутри системы на чипе . Некоторые загрузочные ПЗУ систем на кристалле также поддерживают инфраструктуру открытых ключей , и вместо этого хэш открытого ключа центра сертификации (CA) кодируется в электронных предохранителях , и загрузочное ПЗУ затем сможет проверить, ли загрузчик подписан авторизованный ключ путем проверки этого ключа с открытым ключом CA (хеш-код которого закодирован в электронных предохранителях ). [2] [3]
Эту функцию затем можно использовать для реализации функций безопасности или использовать в качестве аппаратного корня доверия в цепочке доверия , но после настройки пользователи лишаются свободы заменять загрузчик на тот, который они хотят. Из-за этого эта функция вызвала серьезную обеспокоенность сообщества свободного программного обеспечения. [4]
Непосредственно перед переходом к загрузчику некоторые системы на чипе также удаляют загрузочное ПЗУ из сопоставления памяти, а другие этого не делают, что позволяет сделать дамп загрузочного ПЗУ для последующего анализа. [3] Если загрузочное ПЗУ все еще видно, загрузчики также могут вызвать код загрузочного ПЗУ (что иногда документируется).
Приостановить работу в оперативной памяти
[ редактировать ]Когда система на кристалле переходит в режим приостановки работы ОЗУ , во многих случаях процессор полностью отключается, а ОЗУ переходит в режим самообновления. При возобновлении работы загрузочное ПЗУ выполняется снова, и многие загрузочные ПЗУ способны обнаружить, что система на чипе находится в режиме ожидания в ОЗУ, и могут возобновить работу, перейдя непосредственно к ядру , которое затем позаботится о повторном включении периферийных устройств, которые были выключены. и восстановление состояния, в котором компьютер находился раньше.
Конкретные реализации
[ редактировать ]Оллвиннер
[ редактировать ]Во многих системах Allwinner на чипе (A10, A20, A64) загрузочное ПЗУ либо ожидает загрузчика через USB (если высокий PIN-код), либо пытается загрузиться на нескольких периферийных устройствах в фиксированном порядке. загрузки [5]
Некоторые системы Allwinner на чипе умеют проверять подпись булоадеров. [6] Но большинство выпускаемых устройств для этого не настроены. Это позволило бесплатному программному обеспечению с открытым исходным кодом добавить поддержку многих систем Allwinner на чипе и устройств, использующих их в загрузчиках , таких как U-Boot . [7]
Яблоко
[ редактировать ]На устройствах iOS загрузочное ПЗУ называется «SecureROM». [8] Это урезанная версия iBoot . Он обеспечивает механизм обновления прошивки устройства (DFU), который можно активировать с помощью специальной комбинации клавиш. [9]
НХП
[ редактировать ]Загрузочное ПЗУ систем NXP на кристалле поддерживает настройку периферийных устройств через определенные контакты системы на кристалле. В семействе I.MX6 также поддерживается настройка порядка загрузки через efuses .
Загрузочное ПЗУ некоторых систем NXP на чипе имеет множество способов загрузки загрузчика первого этапа (с eMMC, microSD, USB и т. д.).
Несколько систем NXP на чипе можно настроить для проверки подписи загрузчиков. Многие устройства с такой системой на чипе продавались без настроенной проверки, и на эти устройства пользователи могут установить загрузчик желаемый программного обеспечения с открытым исходным кодом, , включая несколько бесплатных загрузчиков таких как Das U-Boot. [10] и Бэрбокс .
Техасские инструменты
[ редактировать ]Загрузочное ПЗУ нескольких систем Texas Instruments на чипе поддерживает настройку периферийных устройств через определенные контакты системы на чипе.
Загрузочное ПЗУ нескольких систем на кристалле Texas Instruments имеет множество способов загрузки загрузчика называется MLO первого этапа (который в справочных руководствах по системам на кристалле ):
- Его можно загружать с различных устройств хранения данных (MMC/SD/eMMC, NAND и т. д.).
- При использовании MMC/SD/eMMC его можно загружать непосредственно из секторов карты (в руководстве это называется режимом RAW) или из раздела FAT12/16/32.
- Его также можно загрузить с USB или UART.
В системе на кристалле OMAP36xx загрузочное ПЗУ ищет загрузчик первого этапа в секторах 0x0 и 0x20000 (128 КБ), [11] и на системе АМ3358 на чипе , [12] дополнительно он смотрит на 0x40000 (256 КБ) и 0x60000 (384 КБ). В обоих случаях его максимальный размер составляет 128 КБ. Это связано с тем, что загрузчик (первого этапа) загружается в SRAM , находящуюся внутри системы на кристалле .
Системы OMAP и AM335x на чипе можно настроить для проверки подписи булоадеров. Многие устройства с такой системой на чипе продавались без настроенной проверки, и на эти устройства пользователи могут установить любой загрузчик, который они хотят, включая несколько программного обеспечения с открытым исходным кодом, бесплатных загрузчиков таких как Das U-Boot. [13] и Coreboot [14] и Бэрбокс .
STMicro STM32
[ редактировать ]STMicro STM32 семейства Микроконтроллеры имеют встроенное ПЗУ (также называемое «встроенным загрузчиком»). [15] для облегчения пустой перепрошивки системы. Определенные комбинации контактов или иногда проверки ошибок и/или пустой флэш-памяти заставляют чип загружаться из ПЗУ вместо прошивки в основной флэш-памяти. Это позволяет прошивать пустые чипы, не прибегая к аппаратным интерфейсам программирования. Технически это ПЗУ хранится в выделенной области флэш-массива и программируется STMicro во время производства. Большинство микроконтроллеров STM32 можно, по крайней мере, прошить через UART, некоторые поддерживают USB и, в конечном итоге, другие интерфейсы, такие как, например, I2C , SPI или CAN . Ядро ЦП Cortex-M обычно извлекает векторы из известных адресов 0x00000000 (начальное значение указателя стека ) и 0x00000004 (начальное значение счетчика программы ). Однако контакты и/или предохранители определяют, какая память отображается по этим адресам. Встроенное загрузочное ПЗУ является одним из вариантов сопоставления, другим обычно является основная прошивка во флэш-памяти. В этом случае прошивка должна выполнять всю работу, которую выполняют загрузочные ПЗУ; часть прошивки может действовать как загрузчик, аналогичный загрузочному ПЗУ ST. Аппаратное обеспечение может обеспечить доступ только для чтения к области загрузки, превращая ее в предоставленную пользователем версию загрузочного ПЗУ.
Безопасность
[ редактировать ]Яблоко
[ редактировать ]На устройствах под управлением iOS эксплойты загрузочного ПЗУ (например,limera1n, [16] аллок8, [17] и проверьте m8 [8] [16] эксплойты) иногда используются для взлома iOS . Преимущество для людей, желающих сделать джейлбрейк своих устройств, перед эксплойтами, затрагивающими iOS , заключается в том, что, поскольку загрузочное ПЗУ не может быть изменено, а устройства под управлением iOS не имеют предохранителей для добавления кода в загрузочное ПЗУ, Apple не может устранить уязвимость на существующих устройствах.
Нвидиа Тегра
[ редактировать ]Загрузочное ПЗУ Tegra SoC от Nvidia (используемое Nintendo Switch ) содержало уязвимость, которая позволяла пользователям запускать загрузчик . нужный им [18] [19]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Бин, Ню; Децзян, Ли; Чжанцзян, ЛУ; Лисинь, Ян; Чжихуа, Бай; Лонглун, Он; Шэн, Лю (август 2020 г.). «Исследование и разработка Bootrom, поддерживающего безопасный режим загрузки» . Международный симпозиум по компьютерной инженерии и интеллектуальным коммуникациям (ISCEIC) 2020 года . стр. 5–8. дои : 10.1109/ISCEIC51027.2020.00009 . ISBN 978-1-7281-8171-4 . S2CID 231714880 .
- ^ Безопасная загрузка (Mk II)
- ^ Jump up to: а б Эмуляция BootROM Exynos 4210 в QEMU , 7 марта 2018 г.
- ^ Одноплатные компьютеры
- ^ Статья о BROM Linux-Sunxi
- ^ Статья Руководства по регистрации SID на вики linux-sunxi
- ^ Страница U-Boot на вики linux-sunxi
- ^ Jump up to: а б «Примечание об уязвимости CERT/CC VU#941987» . www.kb.cert.org . Проверено 22 мая 2024 г.
- ^ Тодеско, Лука. «Один странный трюк, который ненавидит SecureROM» (PDF) . Архивировано (PDF) из оригинала 8 ноября 2019 г.
- ^ imx6.txt
- ^ Справочное руководство OMAP36xx (swpu177aa.pdf), 26.4.7.6 Карты MMC/SD
- ^ Справочное руководство AM3358 (spruh73p.pdf), 26.1.8.5 Карты MMC/SD.
- ^ README.omap3
- ^ Биглбоун Черный
- ^ AN2606 Рекомендации по применению (PDF)
- ^ Jump up to: а б «Эксплойт Checkm8 открывает дверь к необновляемому джейлбрейку на iPhone 4S через iPhone X» . МакСлухи . 27 сентября 2019 г. Проверено 22 мая 2024 г.
- ^ «ПНВ-CVE-2019-9536» . nvd.nist.gov . Проверено 22 мая 2024 г.
- ^ «Хакеры нашли «не поддающийся исправлению» способ взломать Nintendo Switch» . Engadget . 24 апреля 2018 г. Архивировано из оригинала 09.11.2020 . Проверено 30 сентября 2021 г.
- ^ Раскрытие информации об уязвимости: Fusée Gelée , 28 октября 2021 г.