автордың кітабынан сөз тіркестері Аппаратный хакинг: взлом реальных вещей
Оксфордский словарь английского языка определяет безопасность как «состояние свободы от опасностей или угроз». Это определение подразумевает, что безопасной можно назвать либо такую систему, которую никто не планирует атаковать, либо ту, которая способна пережить любую атаку. Первый вид систем мы называем кирпичами, поскольку они попросту не работают, а второй — единорогами, так как их не существует.
3 Ұнайды
Загрузчики аутентифицируются с помощью цифровых подписей, которые обычно проверяются с помощью открытого ключа (или хеша открытого ключа), внедренного в загрузочное ПЗУ или FUSE-биты.
Загрузчик инициализирует систему после выполнения кода загрузочного ПЗУ. Обычно он хранится в энергонезависимой, но изменяемой памяти, поэтому его можно обновлять в любой момент. Производитель оборудования печатной платы (original equipment manufacturer, OEM) создает загрузчик, позволяющий инициализировать компоненты уровня печатной платы.
Загрузочный код отличается от обычного: он неизменяем, выполняется в системе первым и должен иметь доступ ко всему процессору/системе-на-кристалле, чтобы иметь возможность поддерживать производство, выполнять отладку и анализировать отказы чипа. Разрабатывать код ПЗУ следует максимально внимательно.
Стартовый загрузочный код — это набор инструкций, которые процессор выполняет при включении устройства. Загрузочный код создается производителем процессора и сохраняется в ПЗУ. Основная функция данного кода состоит в том, чтобы подготовить главный процессор к запуску всего последующего кода.
Цепочка доверия — этапы проверок и загрузки
Теоретически такая цепочка доверия кажется довольно безопасной, но схема уязвима для множества атак, начиная от использования слабых мест в процессе проверки и заканчивая внедрением ошибок, атаками по времени и т.д. См. выступление Джаспера на конференции Hardwear.io USA 2019 под названием Top 10 Secure Boot Mistakes на YouTube (https://www.youtube.com/watch?v=B9J8qjuxysQ/), где описаны десять основных ошибок.
Прошивка — низкоуровневое программное обеспечение, работающее на процессорах или периферийных устройствах. Простые периферийные устройства часто бывают чисто аппаратными, но в более сложных системах устанавливаются микроконтроллеры, на которых работает прошивка. Например, большинство чипов Wi-Fi после включения питания загружают свою прошивку.
Внутренние шины. Технически шины — всего лишь пучок микроскопических проводников. Но в действительности соединение между различными компонентами SoC — важный фактор безопасности. Представьте, что это внутреннее соединение элементов сети. Если перед нами сеть, это значит, что шины уязвимы для спуфинга, прослушивания, внедрения и всех других видов атак типа «человек посередине». Усовершенствованные SoC поддерживают меры контроля доступа на различных уровнях. Это позволяет гарантировать, что компоненты SoC защищены друг от друга брандмауэром.
Несколько (микро)процессоров и периферийных устройств. Например, процессор приложений, криптографический движок, видеоускоритель и драйвер интерфейса I2C.
Энергонезависимая память. Реализованная в виде микросхем DRAM, установленных поверх SoC, SRAM или банков регистров.
Энергонезависимая память. В виде встроенной постоянной памяти (ПЗУ), одноразовых программируемых (one-time-programmable, OTP) FUSE-битов, EEPROM и флеш-памяти. FUSE-биты OTP обычно кодируют важные данные конфигурации микросхемы, например идентификационные данные, этап жизненного цикла и информацию о версии с защитой от отката.
Все вычисления выполняются в центральном процессоре (ЦП). На рис. 1.1 процессор встроен в систему на чипе (System-on-Chip, SoC) и помечен цифрой ❶. Как правило, процессор приводит в действие основное программное обеспечение и операционную систему (ОС), а SoC содержит дополнительные аппаратные периферийные устройства.
