Arm в BIOS (Basic Input/Output System) относится к архитектуре процессоров, основанной на технологии ARM, которая широко используется в мобильных устройствах, встроенных системах и некоторых сериях ноутбуков. Эта архитектура отличается высокой энергоэффективностью и производительностью, что делает её популярной в современных технологиях.
В BIOS могут встречаться настройки, связанные с процессорами ARM, такие как конфигурация системы, управление питанием и различные параметры оптимизации производительности. Это позволяет пользователю настраивать работу устройства в соответствии с его потребностями и требованиями.
Предпочтительно ли отключить APM или включить калибровку линии нагрузки для стабильности разгона?
Процессоры AMD FX в сочетании с чипсетом 9-й серии материнских плат дают возможность отключить управление питанием APM (Application Power Management). В основном, рекомендации по разгону советуют в начале отключить APM для повышения стабильности. Среди этих рекомендаций имеется официальное руководство от AMD по оптимизации производительности, страницы 5 и 10. На странице 5 указано:
Отключение APM рекомендуется, так как он устанавливает пределы теплового пакета (TDP). Также следует отключить функции AMD Turbo, когда вы увеличиваете частоту и напряжение процессора выше стандартных значений.
Вкратце, BIOS для управления энергопотреблением AMD Application Power Management (APM) помогает ограничить потребление процессора до 125W для 8 ядер или 95W для 4 и 6 ядер в соответствии с заданным TDP. Множество людей утверждают, что APM вызывает троттлинг, и в этом есть доля правды, но это не всегда так. Иногда APM может слегка снизить напряжение, однако при этом процессор остается на более высокой тактовой частоте.
Все акценты мои.
Кроме того, большинство современных материнских плат для энтузиастов предлагают опцию, называемую Load-Line Calibration (LLC). Согласно сообщениям пользователей на форумах Linus Tech Tips:
Vdroop представляет собой снижение напряжения, подаваемого на процессор в условиях увеличенной нагрузки; в основном, это происходит, когда вы переключаетесь с режима простоя на активный. При этом напряжение, как правило, уменьшается. Учитывая незначительный диапазон допустимого напряжения, с которым работают оверклокеры (увеличенное напряжение связано с частотой процессора и множителем, что влияет на предел разгона), снижение напряжения, воздействующего на процессор, может сделать теоретически стабильный разгон нестабильным (если напряжение падает ниже необходимого для поддержания заданной частоты).
следующее разница между определенными (X) и измеренными (Y) значениями vcore без LLC:
заметьте, что реальное значение vcore постоянно меньше предсказанного нами.
на следующем изображении мы видим, что для этого конкретного процессора (i7 3930K) и MoBo (Asus Rampage IV Extreme) настройки LLC "High" (что означает значение 50%) достаточно, чтобы компенсировать vdroop:
TL; DR
Меня интересует, стоит ли отключать APM и, возможно, использовать более низкий уровень LLC (в некоторых случаях это вовсе не обязательно), или лучше оставить APM включенным и задействовать более высокую настройку LLC для обеспечения стабильности. Я озабочен следующим:
- стабильностью работы системы
- целостностью расчета
- долговечностью системы (менее приоритетно)
- тепловыми характеристиками и потреблением энергии (еще менее приоритетно)
/ Итого
(дополнительная информация) Причина моего вопроса заключается в том, что более высокая настройка LLC может провоцировать кратковременные скачки напряжения в самом процессоре, как упоминалось в этом обсуждении: < лучше воспользоваться смещением или вручную установить напряжение для процессора (в контексте долговечности процессора)? >> и в этой мастерской заметке. Цитирую:
Если у вас имеются качественные материнские платы, скачивание калибровок не обеспечит вам лучших результатов в плане разгона. Это лишь искусственно уменьшает vcore, который вам придется настроить в BIOS, но процессор все равно потребует такое же количество напряжения при нагрузке.
Рекомендую оставить [LLC] выключенным, если вы не считаете, что у вас возникли серьезные трудности с достижением желаемого разгона и подозреваете, что причина в слишком большом vdroop.
С одной стороны, я подозреваю, что APM делает больше, чем "просто" обеспечение соблюдения общего потолка TDP, и, следовательно, следует скорее поддерживать, если это возможно, несмотря на предложения об обратном. Но с другой стороны, похоже, что APM приведет к нестабильности и, следовательно, потребует более высокой настройки LLC, что само по себе, вероятно, хуже.
для полноты картины:
- Ранее я использовал LLC High (50%) для данной тактовой частоты, однако после 4 часов и 30 минут тестирования в Prime95 возникла ошибка расчета, даже при смещении на 100 мВ (+0.1) vcore.
- Потом я уменьшил смещение до 6.25 мВ и переключил LLC на Ultra High, после чего ошибки исчезли.
- Тем не менее, это привело к повышению напряжения нагрузки в среднем на 20 мВ и до 12 мВ (в итоге 1.488 В) при некоторых переходах нагрузки, что немного выше оптимального значения.
- Температура процессора достигала максимума в 63°C после нескольких часов стресс-тестов в течение дня. Система использует воздушное охлаждение (достойный кулер, в частности, Hyper 212X), который хорошо работал в течение двух лет с смещением a-85 мВ (недовольт).
- Мне хотелось бы, чтобы она продолжала функционировать как минимум еще год.
задан Marc.2377
16.11.2022 8:29 3568
TL; WR
- APM, по моему опыту, не влияет на стабильность системы.
- В то же время, LLC на самом деле является критически важным для достижения стабильного и безошибочного разгона в моем случае. Также интересно, что это почти всегда позволяет избежать настройки напряжения смещения.
- APM может оказывать негативное влияние на производительность. Тем не менее, чаще всего лучше оставлять его активным, так как это позволяет установить более высокую тактовую частоту, что в свою очередь улучшает общую производительность системы, особенно при умеренных нагрузках. Кроме того, это позволяет экономить электрическую энергию. Вот как это выглядит: (данные, полученные во время теста Prime95 с небольшими FFT на 6 потоках обработки) (размер 24K FFT)
разработки
Отключение APM действительно приводит к тому, что ваш процессор работает за пределами установленного уровня TDP в 125W. В итоге это заставляет ваш чип потреблять больше энергии и напряжения, что в свою очередь генерирует большее количество тепла с незначительным выигрышем. (. )
- Оптимальное решение для жидкостного охлаждения, как правило, из верхнего сегмента, желательно для вашего процессора, если вы планируете разгон в диапазоне от 4,9 до 5 ГГц, так как в любом случае это будет тащить систему до предельного уровня TDP. (. )
Здесь ничего не указывает на то, что APM как-либо влияет на стабильность системы, хотя предыдущая цитата (из вопроса) может наводить на такое мнение ("иногда оно может немного понизить напряжение, при этом поддерживая более высокую тактовую частоту процессора").
так я испытал это сам для следующего сценарии:
- APM не оказывает никакого влияния на стабильность системы.
- Производительность процессора возросла на 3,27%, достигнув 9132 баллов в тестировании Passmark. Это больше, чем у FX-8370: особенно заметно.
- Показатель производительности с плавающей точкой увеличился на 8,14%.
- Производительность SSE возросла на 8,93% (SSE реализована через FP).
- Простые вычисления также стали на 10% быстрее.
- Показатель целого представления остался без изменений.
Тем не менее, как и ни одно хорошее дело, это имеет свои последствия: 73°C достигнуто за 15-20 минут под максимальной нагрузкой с помощью Prime95. Это почти на 16% больше тепла и на 3°C выше теплового предела процессора. Очевидно, что это недостижимо при воздушном охлаждении.
Затем я протестировал следующие сценарии:
- Оба варианта оказались довольно стабильными.
- напряжение тока фиксируется на уровне 1,44 В при частоте 4500 МГц и составляет в среднем около 1,428 В при 4700 МГц с APM
- потребление энергии составляет примерно 266,6 Вт для 4500 МГц и 239,9 Вт для 4700 МГц с APM при полной нагрузке (измерено с помощью токоизмерительного клеща; реальное потребление будет немного ниже)
- потребление в холостом режиме составляет 62,1 Вт и 64,7 Вт соответственно
- максимальная температура достигала 65 °C (гнездо), 61,1 °C (ЦП), и 75 °C (ВРМ) для 4500 МГц; 57 °C (гнездо), 52,1 °C (ЦП), 68 °C (ВРМ) для 4700 МГц с APM.
- компиляция крупных проектов с MinGW на Windows 10 64 бита и далее на Arch Linux была примерно на 3,8% быстрее с установкой на 4700 МГц
- компиляция в Visual Studio на W10 и обработка видео 2 минуты 1080p с помощью Handbrake была на 1,5% эффективнее при 4700 МГц
- Производительность 2D-графики по тесту Passmark оказалась на 2,78% выше при частоте 4700 МГц
- В бенчмарке Unigine Heaven с настройками "Basic" была зафиксирована средняя скорость на уровне примерно 3,5% выше, а минимальные FPS увеличились на 6,84% при 4700 МГц
- Я был несколько удивлён тем, что процесс транскодирования с помощью HandBrake также прошёл быстрее на 4700 МГц с включённым APM, несмотря на более низкую производительность в задачах с плавающей запятой для данной конфигурации, поскольку кодирование требует значительных вычислительных мощностей. Вероятным объяснением этого является то, что продолжительность теста составила всего 6 минут 16 секунд, что не дало возможность процессору заметно снизить частоту. В дальнейшем я решил повторить конвертацию того же видео дважды, создав "очередь," что привело к общей продолжительности теста в 13 минут 03 секунды. При переключении на 4500 МГц и отключении APM результат снизился до 12 минут 44 секунд, что на 2,49% быстрее. Это был единственный "реальный" сценарий, где конфигурация с меньшей тактовой частотой и отключённым APM действительно оказалась более быстрой. Однако стоит отметить, что это связано с увеличением потребления энергии на более чем 10% и более высокими температурами, что делает такую настройку менее подходящей для большинства задач, кроме специализированных и требовательных к вычислительным ресурсам.
APM Configuration в биосе — что это такое?
Раздел настроек BIOS, содержащий расширенные параметры управления питаниям.
Возможные параметры могут включать:
- Управление энергией/АРМ — включение или отключение параметров данного раздела.
- Режим энергосбережения видеовыхода — настройка для повышения энергоэффективности дисплея. Может принимать значения: Приостановка (выключение разрешено), Отключено (выключение запрещено) и Ожидание (монитор работает в обычном режиме).
- Режим энергосбережения жесткого диска — альтернатива, предназначенная только для HDD. Доступны значения: Приостановка (диск может быть отключен при бездействии), Отключено (остановка не допускается) и Ожидание (диск работает в штатном режиме). Время простоя может повлечь отключение диска в зависимости от параметров Windows. Важно учитывать, что частые включения и выключения диска могут негативно сказаться на его сроке службы.
- Снижение тактовой частоты — указывается процент, на который будет уменьшена частота процессора при активации защиты от перегрева.
- Система контроля температуры — рекомендуется активировать, если в наличии имеется датчик температуры чипсета (PCH). После активации открываются два параметра: задается температура, при которой будет снижаться частота системной шины, и второй параметр — величина снижения частоты.
- Режим кнопки питания — настройка поведения кнопки включения/выключения системного блока. По умолчанию установлено стандартное значение — включение/выключение ПК. Например, чтобы компьютер переходил в режим сна, выберите значение Suspend.
- Восстановление после отключения питания — дает возможность восстановить состояние ПК после отключения электроэнергии. Power On — устройство автоматически включится при наличии электричества, Last State — возвращение к состоянию, которое было на момент исчезновения питания.
- Включение через устройства BS/2 — при активации этой функции ПК будет автоматически включаться при движении мыши или нажатии клавиши на клавиатуре. На некоторых материнских платах данная опция работает только после перевода компьютера в спящий режим.
- Включение через внешние модемы — позволяет запускать ПК при получении специального сетевого пакета от модема. Рекомендуется включать эту функцию только при необходимости, чтобы использовать модемный сигнал для включения компьютера.
- Включение через PCI-устройства — запуск компьютера возможен при получении специального Wake-on-LAN пакета на сетевую карту. Да, данную функцию следует включать только при необходимости, при этом сетевой адаптер должен поддерживать эту опцию и быть подключённым к материнской плате с помощью специального кабеля.
- Включение по сигналу RTC-таймера — эта функция позволяет настроить автоматическое включение по расписанию; при активации станут доступны дополнительные параметры для задания времени, даты, минут и даже секунд.
Опция может иметь разные параметры — зависит от модели материнской платы:
Определенные параметры можно регулировать через Windows, речь идет о разделе настроек Энергопотребление:
Верю, что предоставленные сведения были полезными. Удачи вам!
Загрузка ОС на ARM
Недавно попросили в двух словах рассказать серьезным людям о загрузке операционной системы на ARM и дать оценку угроз безопасности этого процесса. Вообще ARM-процессоров и вообще ОС. Вы понимаете, все ведь слышали про эти ARM, и что такое ОС тоже все знают. Желательно, на уровне квадратиков со стрелками.
Загрузка ARM в четырех прямоугольниках — подробнее внутри. Сразу уточним, что нас интересует общий процесс, а не технические детали, поэтому конкретные команды процессора опустим. Поищем общие черты среди различных процессоров и операционных систем, а Выявим возможные угрозы безопасности.
Разновидности процессоров ARM
Если вы знаете про ARM, то этот раздел можно смело пропустить.
В области разработки и использования в настоящее время имеют распространение процессоры ARM, относящиеся к пяти архитектурам: ARMv4, ARMv5, ARMv6, ARMv7 и ARMv8. Компания ARM присваивает этим архитектурам коммерческие наименования, таким образом, ARMv4 именуется, к примеру, ARM7, ARMv5 – ARM9, а процессоры, основанные на архитектурах ARMv6, v7 и v8, носят название Cortex. Ниже представлена таблица, в которой перечислены основные варианты.
Архитектура | Коммерческое название | Распространенные типы | Запуск Linux |
ARMv4 | ARM7 | ARM7TDMI | Неэффективно |
ARMv5 | ARM9 | ARM926EJ-S | Да |
ARMv6 | ARM11 | ARM1176JZF-S | Да |
Cortex-M0 | Cortex-M0 | Нет | |
ARMv7 | Cortex-M | Cortex-M3 | Неэффективно |
Cortex-A | Cortex-A9 | Да | |
Cortex-R | Cortex-R4 | Да | |
ARMv8 | Cortex-A | Cortex-A53 | Да |
К примеру, кнопочные телефоны в основном оснащены процессорами ARM7, в то время как смартфоны используют Cortex-A. Современные мобильные устройства обычно разрабатываются на базе ARMv8, которые являются единственными 64-битными. Процессоры ARM7 и ARM9 раньше активно использовались в самых разнообразных промышленных контроллерах и сетевом оборудовании, однако сейчас предпочтение отдается Cortex-A. Микроконтроллеры Cortex-M находят широкое применение в бытовой технике, небольших электронных устройствах, системах безопасности и других областях.
Вообще все устройства ARM можно условно разбить на микроконтроллеры и Application Processor.
- Микроконтроллеры характеризуются встроенной Flash-памятью и оперативным запоминающим устройством. Они предназначены для задач небольшой автоматизации.
- Процессоры приложений в основном используют внешние запоминающие устройства — DDRAM и Flash. В дальнейшем будем называть их просто процессорами. Их задачам присущ больший масштаб.
Виды ОС
Какие существуют способы запуска операционных систем:
- на микроконтроллерах, как правило, работает небольшая операционная система реального времени (RTOS) или просто программа без операционной системы;
- на процессорах чаще всего используется операционная система общего назначения (такие как Linux, Android), иногда небольшая RTOS, а порой и полноценная RTOS (например, vxWORKS).
В дальнейшем мы будем говорить только о запуске ОС (Linux, Android) или RTOS на ARM. По способу запуска “большие” RTOS попадают в одну группу с Linux, а “малые” RTOS объединяются с программами без ОС.
Процессоры ARM9, ARM11 и Cortex-A отлично подходят для работы с Linux. Упрощённая версия Linux также может быть запущена на ARM7, Cortex-M4 и Cortex-M7, однако это не является рациональным выбором.
Для небольших систем реального времени (RTOS) подойдут микроконтроллеры и процессоры ARM7, ARM9 и Cortex-M. В некоторых случаях для RTOS используются базовые модели Cortex-A, такие как Cortex-A5. Большинство процессоров Cortex-A имеют такую сложность, что их возможности оптимально применяются только в сочетании с предоставляемыми производителем Linux/Android SDK, что определяет предпочтение в сторону Linux.
Загрузчик ОС
С точки зрения разработчика системное ПО устройства делится на загрузчик и ОС. Основную функцию всегда выполняет программа, работающая под управлением ОС или RTOS.
Загрузчик отвечает за загрузку операционной системы и предоставляет дополнительные функции, включая:
- проверку целостности образа ОС перед её запуском;
- обновление программного обеспечения;
- сервисные функции и первичную инициализацию устройства;
- самодиагностику.
Таким образом, с точки зрения разработчика изделия запуск ОС выглядит следующим образом:
Здесь описан момент подачи питания или перезагрузки процессора. Похожий метод активации использовался в некоторых процессорах ARM7. В более поздних версиях процесс запуска стал сложнее, чем это изображено на схеме, но для разработчика конечного продукта это, как правило, не имеет большого значения.
Схема “Загрузчик-ОС” весьма удобна с практической точки зрения, так как загрузчик выполняет все низкоуровневые задачи:
- подготавливает память до запуска операционной системы и загружает ядро ОС в оперативную память;
- инициализирует ряд периферийных устройств;
- часто поддерживает два образа ОС: активный и резервный, или образ для восстановления;
- производит проверку образа ОС перед его запуском;
- предоставляет сервисный режим даже при наличии повреждений в образе ОС.
В то же время, загрузчик зачастую слабо защищен или не защищен вовсе. В большинстве домашних роутеров достаточно открыть крышку и подключиться к разъему UART, чтобы войти в меню управления загрузчиком. В телекоммуникационном оборудовании более высокого класса вход в меню загрузчика зачастую возможен по недокументированной комбинации клавиш или нажатой кнопке в момент включения устройства. Иными словами, зачастую загрузчик не защищен от локального нарушителя.
Рассмотрим процесс работы загрузчика на примере u-boot, который загружает Linux, шаг за шагом.
- После активации или перезагрузки, процессор загружает образ u-boot, находящийся в Flash-памяти, в оперативную память и передает управление первой команде этого образа.
- u-boot запускает и настраивает DDRAM.
- Затем u-boot инициализирует драйверы для загрузочного устройства (ЗН), такие как eMMC или NAND Flash.
- u-boot осуществляет чтение области переменных конфигураций с ЗН. В данной конфигурации прописан скрипт для загрузки, который будет выполнен u-boot.
- u-boot выводит на консоль уведомление о возможности прервать процесс загрузки для конфигурации устройства. Если пользователь не вмешивается в течение 2-3 секунд, запускается скрипт загрузки.
- Иногда скрипт начинается с поиска подходящего образа операционной системы на всех доступных носителях. В других случаях загрузочное устройство определяется заранее в самом скрипте.
- Скрипт осуществляет загрузку образа ядра Linux (zImage) и файла Device Tree с параметрами ядра (*.dtb) из ЗН в DDRAM.
- Кроме того, скрипт может загрузить в DDRAM образ initrd — компактной файловой системы, содержащей драйверы, необходимые для начального запуска. В современных дистрибутивах Linux использование initrd может варьироваться.
- После того как в памяти находятся загруженные 2 или 3 файла, скрипт направляет управление на первую команду образа zImage (ядро Linux).
- zImage включает в себя распаковщик и сжатый образ ядра. Распаковщик производит развертывание ядра в оперативной памяти, что инициирует процесс загрузки операционной системы.
Запуск загрузчика – предзагрузчик
Однако в реальности почти никогда не бывает, чтобы команды загрузчика выполнялись первыми после включения или сброса процессора. Это еще было на процессорах ARM7, но почти не встречалось далее.
При сбросе любое ядро процессора ARM начинает свою работу с адреса 0, где находится вектор "reset". В старых моделях процессоров загрузка велась непосредственно из внешней памяти, расположенной по нулевому адресу, что делало первой командой процессора команду загрузчика. Тем не менее, для этой процедуры подходят лишь параллельные NOR Flash или ROM. Эти типы памяти функционируют очень просто: при указании адреса они предоставляют соответствующие данные. Ярким примером параллельной NOR Flash является микросхема BIOS в персональных компьютерах.
В нынешних технологиях применяются альтернативные типы памяти, так как они более экономичны и обладают большим объемом. К таким видам относятся NAND, eMMC, SPI/QSPI Flash. Эти виды памяти функционируют не по схеме: подаём адрес — получаем данные, что делает их непригодными для непосредственного выполнения команд. Даже для элементарного считывания данных требуется разработка драйвера, и это создает дилемму «курицы и яйца»: драйвер необходимо заранее загрузить.
По этой причине в современные процессоры ARM интегрировано ПЗУ с предзагрузчиком. ПЗУ отображено в памяти процессора на адрес 0, и именно с него начинает исполнение команд процессор.
Предзагрузчик выполняет следующие функции:
- выявление конфигурации подключенных устройств;
- установление загрузочного носителя (ЗН);
- инициализация устройств и загрузочного носителя;
- считывание загрузчика с загрузочного носителя;
- передача управления загрузчику.
- в плане схемотехники, осуществление подключения определенных выводов процессора к земле или линии питания;
- запись производится в однократно-программируемую память процессора на этапе его производства.
Подобный предзагрузчик устанавливается как в процессорах ARM, таких, как Cortex-A, так и в микроконтроллерах, даже таких маленьких, как Cortex-M0. Вместе с предзагрузчиком процедура запуска ОС выглядит так:
Анализ угроз на этом этапе
Код загрузчика создается производителем процессора, а не самой компанией ARM, и является частью микросхемы, как продукт компании, что защищено авторскими правами. К примеру, в процессорах ARM от компаний Atmel и NXP загрузчики разработаны, соответственно, этими компаниями.
В отдельных случаях возможно извлечение загрузчика из ROM для дальнейшего анализа, однако в некоторых ситуациях доступ к нему может быть ограничен. Например, загрузчик процессора серии Psoc4000 от компании Cypress был защищен несколькими уровнями защиты, но все же был успешно взломан талантливым хакером.
Использования предзагрузчика в большинстве сценариев избежать нельзя. Можно рассматривать его как вариант BIOS, которого в ARM-системах нет.
Зашифрованный текст
Вообще-то, у ARMv8-A есть ARM Trusted Firmware, это системное ПО, отвечающее, например, за управление питанием (PSCI). Вот этот код можно считать BIOS для ARMv8. У ARMv7 и ранее такого стандартного ПО нет.
Предзагрузчик, находящийся в ROM, представляет собой потенциальную угрозу для порядка загрузки и выполнения произвольного кода. Тем не менее, как только управление переходит к загрузчику операционной системы, предзагрузчик становится безвредным. Мы можем просто не передавать ему управление и перенастроить все обработчики прерываний и так далее.
Некоторые небольшие микроконтроллеры имеют в своей ROM встроенные библиотеки для взаимодействия с периферийными устройствами, которые необходимо вызывать в процессе работы микроконтроллера. В таких случаях системное программное обеспечение (загрузчик и ОС) периодически направляет управление в область предзагрузчика, что приводит к следующей схеме передачи управления:
Это в общем случае небезопасно, но встречается только в некоторых микроконтроллерах на архитектуре ARM. На таких микроконтроллерах обычно запускаются программы без ОС или малые RTOS, и дизайнер системы может оценить риски.
Загрузка с TrustZone
В процессорах ARM серии Cortex-A и Cortex-R реализована технология TrustZone. Данная технология позволяет на уровне железа разделить режимы работы на два: Secure (защищенный) и Non-Secure (незащищенный).
Эти процессоры в основном нацелены на рынок смартфонов и планшетных компьютеров, и TrustZone используется для создания в режиме Secure доверенной “песочницы” для исполнения кода, связанного с криптографией, DRM, хранением пользовательских данных.
В режиме Secure активируется специализированная операционная система, известная как TEE (Trusted Execution Environment, доверенная среда выполнения), тогда как обычная операционная система, например, Linux, Android или iOS, функционирует в режиме Non-Secure. При этом доступ к некоторым устройствам ограничен для стандартной ОС, поэтому ее также называют гостевой ОС.
Вследствие установленных ограничений гостевая ОС периодически вынуждена обращаться к функциям TEE для выполнения определенных операций. TEE работает параллельно с гостевой ОС на протяжении всего времени, и у последней нет возможности изменить эту ситуацию.
Например, гостевая ОС использует функции TEE для:
- управление включением и выключением ядер процессоров (в ARMv8-A это осуществляется через PSCI — элемент ARM Trusted Firmware, а в ARMv7 — в зависимости от конкретного производителя процессоров);
- сохранение ключей, данных платежных карт и прочего;
- хранение ключей для полнодискового шифрования;
- выполнение криптографических операций;
- доступ к DRM-контенту.
Почему же разработчики систем выбирают такой способ работы? В процессорах с поддержкой TrustZone предусмотрен механизм Secure Boot в различных формах.
С Secure Boot предзагрузчик проверяет подпись загружаемого образа с помощью прошитого на этапе производства открытого ключа. Таким образом, гарантируется, что загружен будет только подписанный образ. Это функция безопасности.
Таким образом, процесс загрузки операционной системы будет выглядеть следующим образом:
- инициализируется предзагрузчик, находящийся в ROM, который загружает ключи для проверки подписи TEE из ROM;
- предзагрузчик помещает в оперативную память образ TEE, производит проверку его подписи. В случае успеха запускается TEE;
- TEE настраивает режимы Secure и Non-Secure. После этого TEE загружает основной загрузчик ОС и переключается на него в режиме Non-Secure, тогда как сам TEE остается активным в режиме Secure и ожидает;
- основной загрузчик ОС производит загрузку операционной системы в стандартном режиме;
- ОС периодически вызывает функции TEE для выполнения определённых задач.
После этого срабатывает принцип удобства — с TEE все функционирует должным образом, а без него система даже не запускается. Разработчики применяют SDK с TEE, инициируют вызовы закрытого бинарного кода из ядра Linux и не переживают.
Как проверить свой проект на обращения к TrustZone
Может даже показаться, что всей этой TrustZone не существует, по крайней мере, в вашей конкретной разработке. Проверить это совсем несложно.
Суть заключается в том, что все процессоры с поддержкой TrustZone начинают свою работу в Secure режиме, а затем переходят в Normal режим. Если ваша операционная система функционирует в Normal режиме, это указывает на наличие какой-либо Secure OS (TEE), которая перевела систему в этот режим.
Лакмусовой бумажкой является обращение к TEE для включения кэш-памяти 2-го уровня. По какой-то причине архитектура ARM не позволяет этого делать из Normal World. Поэтому для включения кэша ядру ОС потребуется сделать хоть один вызов к TrustZone. Делается это единственной командой: smc #0, и вы можете поискать ее сами в ядре Linux или Android.
Без сомнения, мы тоже провели собственные исследования и обнаружили подобные вызовы в программном коде для нескольких процессоров, включая Qualcomm, Samsung, Mediatek, Rockchip, Spreadtrum, HiSilicon и Broadcom, Cavium.
Загрузка ARM Cortex-A и анализ угроз
Таким образом, представляем процесс установки операционной системы на платформе ARM (в данном случае — Cortex-A) в четырёх этапах:
На схеме пунктиром обозначен путь обращения из ядра ОС в TEE.
В двух секциях содержится код, который нам не известен. Давайте выясним, к чему это может привести.
Технически, любой из компонентов системного ПО может содержать ошибки, намеренные закладки и так далее. Однако в большинстве случаев загрузчик, ОС и системное ПО можно проверить, изучив исходные коды. Сконцентрируемся на возможных угрозах, исходящих от предзагрузчика и TEE, исходные коды к которым закрыты.
Предзагрузчик активируется на самом начальном этапе, когда еще не выработана схема подключения к процессору различных периферийных устройств, и никаких коммуникационных инструментов (таких как WiFi, 3G и т.д.) не настроено. Также на этом этапе коммуникационные протоколы не функционируют. В то же время, предзагрузчик представляет собой небольшую программу, размер которой составляет всего несколько десятков килобайт, и трудно представить, что в ней могут быть полные наборы протоколов или сложная логика для идентификации подключенных устройств. Таким образом, предзагрузчик вряд ли содержит серьезные механизмы слежки или передачи данных.
Более привлекательной целью для атак является TEE, так как его функции запускаются уже в процессе работы операционной системы, когда все устройства находятся в действии, а коммуникационные протоколы активированы. Интеграция шпионской функции в код TEE дает возможность практически безгранично следить за пользователем специализированного вычислительного устройства.
В небольшом исследовании мы показали реализуемость закладки в TEE, незаметно перехватывающей системные вызовы ОС Linux. Для активации закладки нужно только одно обращение из ядра Linux в TEE (например, то самое, для кэша второго уровня), после чего система становится полностью управляемой. Это позволяет:
- осуществлять мониторинг операций чтения и записи файлов, а также изменять данные в реальном времени;
- перехватывать ввод пользователя, включая символы, введенные с помощью экранной клавиатуры;
- незаметно внедрять свои данные в процессе общения с удаленными серверами, включая использование протокола https, скрывая передачу шпионских данных под обычный зашифрованный интернет-трафик.
Выводы
Мы изучили процедуру загрузки различных микроконтроллеров и ARM-процессоров.
У микроконтроллеров наиболее уязвимым местом в процессе загрузки является загрузчик ОС.
В современных процессорах ARM Cortex-A присутствует технология TrustZone, и этого аспекта не избежать. Данная технология подразумевает запуск доверенной среды исполнения TEE перед операционной системой.
TEE представляет собой наиболее уязвимое место в процессе загрузки операционной системы на ARM Cortex-A, так как обращения к TEE инициируют выполнение закрытого системного кода, известного лишь производителю, но скрытого от пользователя.
Без контроля над TEE невозможно обеспечить безопасность и доверенность исполнения любой ОС на ARM Cortex-A.
- Дневник фирмы Аладдин Р.Д.
- Защита информации
- Шифрование данных
- Программирование для Linux
- Системное кодирование