Введение

Режим управления системой (SMM, иногда называемый кольцом -2 относительно защитных колец) — это режим работы центральных процессоров (CPU) x86, в котором приостанавливается всё нормальное выполнение, включая операционную систему. Затем выполняется альтернативная программная система, обычно расположенная в прошивке компьютера, или отладчик с аппаратной поддержкой, с повышенными привилегиями. Впервые он был представлен с Intel 386SL. Изначально для SMM требовались специальные версии SL, но Intel включила SMM в свои основные процессоры 486 и Pentium в 1993 году. AMD реализовала SMM от Intel с процессорами Am386 в 1991 году. Он доступен во всех последующих микропроцессорах архитектуры x86. В архитектуре ARM режим уровня исключений 3 (EL3) также называют режимом безопасного монитора или режимом управления системой.

Операция

SMM – это специальный режим работы, предназначенный для обработки общесистемных функций, таких как управление питанием, управление аппаратным обеспечением системы или проприетарный код, разработанный OEM-производителем. Он предназначен исключительно для использования системной прошивкой (BIOS или UEFI) и не предназначен для прикладного программного обеспечения или программного обеспечения общего назначения. Основное преимущество SMM заключается в том, что он предоставляет отдельную и легко изолированную среду процессора, которая работает прозрачно для операционной системы, исполнительных программ и приложений. Для обеспечения прозрачности SMM устанавливает определенные правила. Вход в SMM возможен только через SMI (System Management Interrupt). Процессор выполняет код SMM в отдельном адресном пространстве (SMRAM), которое прошивка должна сделать недоступным для других режимов работы процессора. Режим управления системой (SMM) может адресовать до 4 ГБ памяти как большой реальный режим. В процессорах x86-64 SMM может адресовать более 4 ГБ памяти как режим реальных адресов.

Проблемы

По своей конструкции операционная система не может перезапустить или отключить SMI. В силу этого, он является целью для размещения вредоносных руткитов, включая "импланты" АНБ, которые имеют индивидуальные кодовые имена для конкретного оборудования, такие как SOUFFLETROUGH для брандмауэров Juniper Networks, SCHOOLMONTANA для маршрутизаторов серии J той же компании, DEITYBOUNCE для DELL или IRONCHEF для серверов HP Proliant. Неправильно спроектированный и недостаточно протестированный код SMM BIOS может делать неверные предположения и работать некорректно при прерывании других режимов работы x86, таких как PAE или 64-битный режим. Согласно документации ядра Linux, около 2004 года подобные ошибочные реализации функции поддержки устаревшего USB часто приводили к сбоям, например, на материнских платах на основе чипсета Intel E7505. Переключение в SMM и обратно также связано с определенными накладными расходами, поскольку состояние процессора необходимо сохранять в памяти (SMRAM), а кэши обратной записи – очищать. Это может нарушить работу в реальном времени и привести к потере тактов. Ядра Windows и Linux определяют настройку "SMI Timeout", устанавливающую период, в течение которого обработчики SMM должны вернуть управление операционной системе, иначе система "зависнет" или "аварийно завершит работу". SMM может нарушать работу приложений реального времени с жесткими требованиями к синхронизации. Для определения, вошел ли процессор в SMM (путем проверки состояния SMIACT#-пина процессора), может потребоваться логический анализатор. Для восстановления кода обработчика SMI с целью анализа на наличие ошибок, уязвимостей и секретов необходим логический анализатор или дизассемблирование системной прошивки.