System Management Mode как зеркало x86-архитектуры

System Management Mode как зеркало x86-архитектуры

Режим управления системой (SMM) — это режим x86-совместимого процессора, про­зрач­ный для операционной системы. Он инициализируется UEFI BIOS во время за­груз­ки платформы для обслуживания аппаратного обеспечения и поддержки без­о­пас­нос­ти компьютера.

System Management Mode как зеркало x86-архитектуры

Как видно из выше приведенной схемы, переход в SMM-режим выполняется путем запуска управления системой (SMI). Когда SMI активно, процессор сохраняет контекст, отключает прерывания и переключается в другое адресное пространство, называемое RAM системы управления (SMRAM). Для возврата из SMM используется команда rsm (Return from System Management), восстанавливающая предыдущее состояние. Эта ин­струк­ция может быть выполнена только из SMM. Все эти механизмы позволяют ре­жи­му SMM быть прозрачными для ОС.

В процессе выполнения POST запускается процедура инициализации диапазона па­мя­ти SMRAM, резервирующая пространство в нашем классической ОЗУ. Затем на­стра­и­ва­ет­ся код SMM в этом диапазоне, прежде чем скрыть его от посторонних глаз. Первое что должно быть сделано для инициализации SMRAM, — назначение SMBASE, ба­зо­во­го ад­ре­са.

Во время загрузки UEFI BIOS может устанавливать обработчики SMI и, в частности, обработчики SoftWare SMI (SWSMI), которые будут запускаться из ОС на более при­ви­ле­ги­ро­ван­ном уровне.

mov dx, 0xB2
mov ax, SMINumber
out dx, ax

Когда возникает запрос SMI, процессор сохраняет текущее состояние в SMRAM по адресу SMBASE + 0FC00h, а управление передается SMM-процедурам в SMBASE + 8000h . Поскольку SMM является режимом работы конкретного процессора, каждый из которых может его активировать независимо, базовый адрес SMBASE должен быть уникальным. Если это условие не соблюдается, последующий запрос на прерывание SMI перезапишет предыдущее сохраненное состояние.

Распределение памяти SMRAM

Сохраненное состояние содержит доступный SMI-обработчику контент, который мо­жет быть модифицирован. SMI-обработчик с помощью команды rsm может также из­ме­нить и само значение SMBASE: в следующем сеансе входа в SMM-режим этот адрес будет использован в качестве базового для сохранения содержимого регистров про­цес­со­ра. Это единственный способ изменить SMBASE, инициализированное процедурами POST и однозначно определенное чипсетом при старте платформы.

Состояние, в котором находится процессор при входе в SMM-режим, очень похоже на ре­аль­ный 16-битный режим с некоторыми вариациями. Но первое, что нужно сделать процессору при запуске System Management Mode, — вернуться в 64-битную среду, обес­пе­чи­ва­ю­щую адресацию всей памяти. В результате SMM получает возможность оперировать со всей физической памятью и всем аппаратным средствами платформы. Доступ к этим ресурсам в SMM-режиме не может быть перехвачен гипервизором. Даже если запросы SMM не входят в привилегированное кольцо, они фактически будут бо­лее привилегированы по сравнению с полномочиями ядра операционной системы ​​и ги­пер­ви­зо­ра. Это значит, что вызовы SMM относятся к «ring-2».

Изоляция данных от злонамеренных действий в SMM-режиме

Поскольку SMM имеет решающее значение для безопасности в компьютерной ар­хи­тек­ту­ры, он должен быть надежно защищен. Критической частью SMM-режима яв­ля­ет­ся, очевидно, область памяти SMRAM, в которой находится SMM-код. Для ее защиты разработано несколько механизмов.

Первая защита, очевидно, связана с доступом к памяти из «стандартного» режима. Это делается в Регистре диапазонов управления системой (SMRR). Эта защита, по-видимому, ранее обрабатывалась регистром управления системным управлением / совместимым (SMRAMC) с контроллера DRAM. Даже если SMRAMC не защищает от доступа к SMRAM, по-прежнему важно заблокировать его, чтобы избежать введения другой уязвимости. SMRR является модель конкретного регистра (MSR) на ядро (что означает , что должно быть установлено для каждого ядра). Первоначально они были введены для защиты от атак с отражением кэш-памяти SMM, Когда они установлены, они защищают доступ для чтения и записи, если не в SMM. На практике запись будет проигнорирована, и чтение вернет только 0xFF .

Другие механизмы защищают SMRAM, в частности, диапазон TSEG / BGSM и регистр TOLUD. Диапазон TSEG / BGSM, который предназначен для защиты от доступа DMA, должен охватывать тот же диапазон, что и SMRR. Эти защиты дают нам некоторую информацию о локализации SMBASE.

Если одна из этих защит не установлена, несколько атак могут позволить взять контроль в SMM. Хороший способ проверить эту конфигурацию — использовать Chipsec. Однако эти защиты не покрывают возможное повреждение памяти в обработчике SMI.

Теги