Режим управления системой ( SMM , иногда называемый кольцом −2 в отношении колец защиты ) [1] [2] — это режим работы центральных процессоров x86 (ЦП), в котором все нормальное выполнение, включая операционную систему , приостанавливается. Затем с высокими привилегиями выполняется альтернативная программная система, которая обычно находится в прошивке компьютера , или аппаратно-управляемый отладчик .
Впервые он был выпущен с Intel 386SL . [3] [4] Хотя изначально для SMM требовались специальные версии SL, Intel включила SMM в свои основные процессоры 486 и Pentium в 1993 году. AMD реализовала SMM Intel с процессорами Am386 в 1991 году. [5] Он доступен во всех более поздних микропроцессорах в архитектуре x86 . [ требуется ссылка ]
В архитектуре ARM режим Exception Level 3 (EL3) также называется режимом безопасного монитора или режимом управления системой. [6]
SMM — это режим работы специального назначения, предназначенный для обработки общесистемных функций, таких как управление питанием, управление аппаратным обеспечением системы или фирменный код, разработанный OEM. Он предназначен для использования только системной прошивкой ( BIOS или UEFI ), а не прикладным программным обеспечением или системным программным обеспечением общего назначения. Главное преимущество SMM заключается в том, что он предлагает отдельную и легко изолируемую среду процессора, которая работает прозрачно для операционной системы или исполнительных и программных приложений. [ необходима цитата ]
Для достижения прозрачности SMM налагает определенные правила. Вход в SMM возможен только через SMI (System Management Interrupt). Процессор выполняет код SMM в отдельном адресном пространстве (SMRAM), которое должно быть сделано недоступным для других режимов работы ЦП с помощью прошивки . [7]
Режим управления системой может адресовать до 4 ГБ памяти как огромный реальный режим . В процессорах x86-64 SMM может адресовать >4 ГБ памяти как реальный режим адреса. [8]
Первоначально режим управления системой использовался для реализации функций управления питанием и аппаратного контроля, таких как Advanced Power Management (APM). Однако производители BIOS и OEM-производители полагаются на SMM для более новых функций, таких как Advanced Configuration and Power Interface (ACPI). [9] [10]
Некоторые варианты использования режима управления системой:
Режим управления системой также может быть использован для запуска высокопривилегированных руткитов , как было продемонстрировано на конференциях Black Hat 2008 [14] и 2015 [15].
Вход в SMM осуществляется через SMI (прерывание управления системой), которое вызывается:
При входе в SMM процессор ищет первую инструкцию по адресу SMBASE (содержимое регистра SMBASE) + 8000h (по умолчанию 38000h), используя регистры CS = 3000h и EIP = 8000h. Значение регистра CS (3000h) обусловлено использованием процессором адресов памяти реального режима в SMM. В этом случае к CS внутренне добавляется 0h на его правом конце.
По замыслу операционная система не может переопределить или отключить SMI. Из-за этого он является целью для вредоносных руткитов, [18] [19] включая «импланты» АНБ , [20] которые имеют индивидуальные кодовые имена для определенного оборудования, например, SOUFFLETROUGH для брандмауэров Juniper Networks , [21] SCHOOLMONTANA для маршрутизаторов серии J той же компании, [22] DEITYBOUNCE для DELL, [23] или IRONCHEF для серверов HP Proliant . [24]
Неправильно спроектированный и недостаточно протестированный код SMM BIOS может делать неверные предположения и работать некорректно при прерывании некоторых других режимов работы x86, таких как PAE или 64-битный длинный режим . [25] Согласно документации ядра Linux , около 2004 года такие ошибочные реализации функции поддержки устаревших USB были частой причиной сбоев, например, на материнских платах на базе чипсета Intel E7505 . [11]
Поскольку код SMM (обработчик SMI) устанавливается системной прошивкой ( BIOS ), ОС и код SMM могут иметь несовместимые ожидания относительно настроек оборудования, например, разные представления о том, как следует настраивать расширенный программируемый контроллер прерываний (APIC).
Операции в SMM отнимают процессорное время у приложений, ядра операционной системы и гипервизора , причем эффекты усиливаются для многоядерных процессоров, поскольку каждое SMI заставляет все ядра переключать режимы. [26] Также существуют некоторые накладные расходы, связанные с переключением в SMM и из него, поскольку состояние процессора должно быть сохранено в памяти (SMRAM), а любые кэши обратной записи должны быть очищены. Это может разрушить поведение в реальном времени и привести к потере тактов часов . Ядра Windows и Linux определяют настройку «SMI Timeout» — период, в течение которого обработчики SMM должны вернуть управление операционной системе, иначе она « зависнет » или « вылетит ».
SMM может нарушить работу приложений реального времени с ограниченными требованиями по времени.
Для определения того, вошел ли ЦП в режим SMM (проверка состояния контакта SMIACT# ЦП), может потребоваться логический анализатор. [ 16 ] Для восстановления кода обработчика SMI с целью его анализа на наличие ошибок, уязвимостей и секретов требуется логический анализатор или разборка системной прошивки.
{{cite web}}
: CS1 maint: numeric names: authors list (link)