System Management Mode
Режим системного управления (англ. System Management Mode, SMM) — режим исполнения на процессорах x86/x86-64, при котором приостанавливается исполнение другого кода (включая операционные системы и гипервизор), и запускается специальная программа, хранящаяся в SMRAM в наиболее привилегированном режиме.
Технология SMM была впервые реализована в микропроцессоре Intel 386 SL. Изначально SMM работал только на специальных процессорах (SL), но в 1992 году была внедрена в 80486 и Intel Pentium. AMD реализовала технологию в Enhanced Am486 (1994). Все более современные x86/x86-64 процессоры поддерживают её.
Среди возможных применений SMM:
- Обработка системных ошибок, таких как ошибки памяти и чипсета;
- Функции защиты, например выключение процессоров при сильном перегреве;
- Глубокие уровни энергосбережения;
- Управление питанием — например, схемами изменения напряжения (VRM[англ.]*);
- Эмуляция периферии, которая не была реализована на материнской плате или реализация которой содержит ошибки;
- Эмуляция мыши и клавиатуры PS/2 при использовании таких же устройств с интерфейсом USB;
- Централизованная конфигурация системы, например на ноутбуках Toshiba и IBM;
- Обход систем защиты, встроенных в ОС[1];
- Запуск высокопривилегированных руткитов, как было предложено на Black Hat 2008[2][3];
- Эмуляция или передача вызовов на модуль Trusted Platform Module (TPM)[4];
Операционная система работает в защитном «Кольце 0»; однако, гипервизор (в системах VT/AMD-v) является более привилегированным, и режим исполнения гипервизора условно называется «Кольцом −1». Соответственно, SMM, являющимся более приоритетным, чем гипервизор, условно называют «Кольцом −2»[5][6][7]. Код, работающий в режиме SMM, получает неограниченный доступ ко всей системной памяти, включая память ядра и память гипервизора.
Активация SMM
[править | править код]SMM активируется при помощи прерываний SMI (system management interrupt — прерывание системного управления), которое возникает:
- По сигналу от чипсета или периферии на материнской плате. Используется выделенный контакт процессора SMI#[8].
- Программный SMI, посланный системным ПО через порт ввода-вывода (часто используется порт номер B2[9])[10].
- Запись по адресу ввода-вывода, для которого микропрограммно установлена необходимость активации SMM.
На ближайшей границе инструкций после получения сигнала SMI#, процессор сохраняет своё состояние в памяти и переходит в SMM. Для выхода из SMM и восстановления состояния процессора используется инструкция RSM (0F AA[9])[8].
Проблемы
[править | править код]- Согласно архитектуре SMM, прерывания SMI не могут быть заблокированы операционной системой
- На старых чипсетах (до 2006 года) не выставлялся бит D_LOCK для защиты памяти SMM (что позволяло создавать SMM-зловреды)[5]
- Так как программы обработки SMM (SMI handler) устанавливаются из базовой микропрограммы BIOS[5], предполагаемые настройки важной периферии (например, APIC) в ОС и программах SMM могут не совпадать
- Работа в режиме SMM приостанавливает работу ОС. Состояние процессора сохраняется в SMRAM[8], а кэши write-back должны быть сброшены. Из-за этого могут нарушиться требования жесткого реального времени. ОС Windows и ядро Linux устанавливают «SMI Timeout» — период времени, в который любая программа SMM должна вернуть управление операционной системе.
- Для определения входа процессора в SMM может потребоваться цифровой логический анализатор (дополнительное отладочное оборудование). При работе в SMM выставляется сигнал процессора SMIACT#[8].
- Получение кодов программ SMM для их анализа и отладки также требует логического анализатора или обратной разработки микропрограмм BIOS, так как во время исполнения память TSEG, хранящая программы SMM, недоступна ОС.
См. также
[править | править код]- Процессор MediaGX, использующий SMM для эмуляции аппаратных функций
- Extensible Firmware Interface (EFI)
- Coreboot, реализующий SMM/SMI обработчики для некоторых чипсетов
Примечания
[править | править код]- ↑ Loic Duflot. «Security Issues Related to Pentium System Management Mode.» Presented at CanSecWest 2006, Vancouver, Canada, 2006.
- ↑ Hackers find a new place to hide rootkits . Дата обращения: 2 мая 2011. Архивировано 8 июня 2011 года.
- ↑ Sherri Sparks and Shawn Embleton. «SMM Rootkits: A New Breed of OS Independent Malware.» Presented at Black Hat USA, Las Vegas, NV, USA, 2008.
- ↑ https://www.youtube.com/watch?v=X72LgcMpM9k&feature=player_detailpage#t=2070s Архивная копия от 25 июня 2016 на Wayback Machine Google Tech Talks — Coreboot — 00:34:30
- ↑ 1 2 3 invisiblethingslab.com/resources/misc09/smm_cache_fun.pdf Rafal Wojtczuk, Рутковская, Йоанна, «Attacking SMM Memory via Intel® CPU Cache Poisoning»
- ↑ Ring −1 vs. Ring −2: Containerizing Malicious SMM Interrupt Handlers on AMD-V Архивная копия от 13 ноября 2013 на Wayback Machine, 2010
- ↑ In-depth Analysis of x86’s System Management Mode Архивировано 23 сентября 2013 года., Georg Wassen: "If Virtual Machine Monitors can be called Ring −1, the System Management Mode is Ring −2. "
- ↑ 1 2 3 4 Intel’s System Management Mode by Robert R. Collins
- ↑ 1 2 Шестнадцатеричный код
- ↑ прим. 5
Литература
[править | править код]- Intel’s System Management Mode by Robert R. Collins, 1997 (англ.)
Ссылки
[править | править код]- Badness of SMM, part 1 and part 2, 2005
- Intel 32/64 Architectures Software Developer’s Manual Volume 3B: System Programming Guide, Part 2
- AMD Hammer BIOS and Kernel Developer’s guide, Chapter 6
- An exploit against SMM based on OpenBSD, 2006
- SMM based rootkit
- SMM Rootkit limitations. (and how to defeat it), 2008