Программную ошибку исправляют обновлением. Аппаратную — только заменой микросхемы. В процессорах Apple A12 и A13, установленных в десятках миллионов iPhone и iPad, обнаружена уязвимость второго типа: дефект в загрузочном коде SecureROM, записанном в кремний на этапе производства. Патч невозможен. Отзыв устройств — немыслим. Уязвимость останется навсегда.
Исследователи из Paradigm Shift опубликовали рабочий эксплойт под названием usbliter8 и передали информацию Apple заблаговременно. На момент публикации Apple не выпустила ни бюллетеня безопасности, ни идентификатора CVE, ни оценки CVSS.
Для рядового пользователя угроза невелика: эксплуатация требует физического доступа к устройству и специализированного оборудования. Для инженера-электронщика — история куда интереснее: наглядная демонстрация того, как ошибка в конфигурации USB-контроллера и блока управления памятью превращается в неустранимую брешь в цепочке доверия.
Какие устройства затронуты
Уязвимы устройства на процессорах:
- Apple A12 Bionic — iPhone XS, iPhone XS Max, iPhone XR, iPad Air (3-е поколение), iPad Mini (5-е поколение);
- Apple A13 Bionic — iPhone 11, iPhone 11 Pro, iPhone 11 Pro Max, iPad (9-е поколение), iPhone SE (2-е поколение).
Процессоры A11 и старше не затронуты: USB-драйвер принудительно сбрасывает DMA-адрес после каждого пакета, что не позволяет уязвимости накапливаться. Процессоры A14 и новее — защищены: таблица DART настроена корректно, без режима обхода.
Уязвимость существует ровно в двух поколениях процессоров — A12 и A13. Два года производства. Десятки миллионов устройств. И ни одно из них никогда не будет исправлено.
Как работает уязвимость: разбор для инженеров
Эксплойт usbliter8 использует комбинацию двух аппаратных проблем: ошибку в USB-контроллере Synopsys DWC2 и некорректную конфигурацию блока DART (Device Address Resolution Table — по сути, IOMMU для ввода-вывода) внутри SecureROM.
Механизм переполнения буфера через DMA:
USB-контроллер DWC2 сохраняет входящие пакеты через механизм прямого доступа к памяти (DMA) — до трёх пакетов на буфер. На четвёртом пакете контроллер сбрасывает указатель записи, уменьшая его на фиксированные 24 байта. Одновременно контроллер принимает пакеты уменьшенного размера, увеличивая указатель лишь на фактически записанные байты.
Несоответствие между фиксированным откатом (24 байта) и переменным приращением (менее 24 байтов) создаёт повторяющееся переполнение: указатель записи постепенно сдвигается назад по памяти — на 12 байтов за каждый цикл.
Почему это критично именно на A12/A13
В процессорах A12 и A13 таблица DART в SecureROM настроена в режиме обхода (bypass mode). Это означает: DMA-контроллер USB может записывать данные в произвольную область оперативной памяти SRAM без проверки адресов. Переполненный указатель «гуляет» по памяти и перезаписывает всё на своём пути — включая управляющие структуры ядра.
На A11 — USB-драйвер сбрасывает DMA-адрес после каждого пакета, не давая ошибке накапливаться. На A14 — DART настроен корректно, и DMA-записи ограничены разрешённым диапазоном адресов. Окно уязвимости — ровно два поколения.
Различия в эксплуатации A12 и A13
На A12 — эксплуатация проще. DMA-буфер расположен рядом с USB-стеком в куче (heap). Перезапись сохранённого регистра связи (link register) передаёт атакующему контроль над счётчиком команд при следующем переключении контекста.
На A13 — сложнее. Аутентификация указателей (PAC — Pointer Authentication Codes) защищает адреса возврата в стеке. Исследователям пришлось действовать поэтапно: повреждение структур кучи DART, перезапись счётчика глубины «паники» (чтобы процессор зацикливался на ошибках вместо перезагрузки), контроль времени записи DMA, и финально — перезапись указателя обработчика прерывания USB. При следующем USB-прерывании выполняется внедрённый код на уровне привилегий EL1 внутри SecureROM.
Условия эксплуатации
Массовое удалённое использование — исключено. Для срабатывания эксплойта необходимы:
- физический доступ к устройству;
- перевод устройства в режим DFU (Device Firmware Update);
- подключение через USB к специализированной плате на микроконтроллере RP2350.
Александр Зонов из компании SEQ формулирует: «Это не та уязвимость, которую можно использовать "на лету". Эксплуатировать её смогут разве что спецслужбы или особенно продвинутый и целеустремлённый киберкриминал».
Однако успешная эксплуатация даёт атакующему:
- временное понижение статуса SoC до производственного режима;
- возможность загрузить неподписанный образ iBoot — полный выход за рамки цепочки доверия Apple;
- внедрение собственного обработчика USB-запросов.
Secure Enclave (криптографический сопроцессор, отвечающий за биометрию и шифрование) напрямую не скомпрометирован. Но авторы исследования предупреждают: контроль над SecureROM теоретически открывает пути к последующей атаке на Secure Enclave.
Почему это важно для проектировщиков микросхем
Для аудитории, работающей с электроникой, usbliter8 — учебный кейс по трём направлениям:
- Конфигурация IOMMU — критический параметр безопасности
Режим обхода DART в SecureROM — решение, которое, вероятно, упростило отладку на этапе разработки. Но оно осталось в серийном кремнии. Одна строка конфигурации — и сотни миллионов устройств уязвимы навсегда.
- DMA — вечный источник уязвимостей
Прямой доступ к памяти обходит процессор и операционную систему. Любая ошибка в контроллере DMA — потенциальный вектор атаки. USB-контроллер Synopsys DWC2 — один из самых массовых IP-блоков в индустрии. Ошибка в нём затрагивает не только Apple.
- Аппаратные баги неисправимы
Программный баг живёт до следующего обновления. Аппаратный — до утилизации устройства. В мире, где срок жизни смартфона — три-пять лет, а iPad — семь-десять, уязвимость usbliter8 будет существовать до конца 2030-х, пока последний iPhone XR не окажется на свалке.
Для российских разработчиков процессоров «Эльбрус», «Байкал», микроконтроллеры НИИЭТ — урок прямой: конфигурация периферийных контроллеров и блоков управления памятью требует такого же уровня верификации безопасности, как и ядро процессора. Ошибка в USB-контроллере стоит Apple репутационного ущерба и миллионов уязвимых устройств. Ошибка в контроллере процессора для критической инфраструктуры может стоить значительно дороже.
Код, записанный в кремний, не принимает патчей. Он принимает только правильные решения — с первого раза.