Пособие для компьютерных диггеров

08 Фев 2016

Пособие для компьютерных диггеров

Утилита RU32 позволяет просматривать дамп только для первых 256 байт конфигурационного пространства PCI для каждого устройства. Возможно, существуют некие недокументированные возможности для обхода такого ограничения, но нам не удалось их найти, хотя сов­ре­мен­ные процессоры, а также наборы системной логики и периферийные устройства используют механизм PCI Extended Configuration Space, позволяющий адресовать регистровые блоки, размером 4 килобайта. При этом за пределами видимости рассматриваемой утилиты ока­зы­ва­ют­ся достаточно важные характеристики устройства. Так, например, ряд регистровых полей, декларирующих поддержку технологий виртуализации, определены как PCI Extended Capabilities, и находятся за пределами первых 256 байт. Можно ли их увидеть, с помощью рассматриваемой утилиты?

Анализ PCI Extended Capabilities

Для настоящих хакеров ничего невозможного нет. Просмотрев дамп ACPI-таблицы MCFG (Memory-mapped Configuration) можно определить базовый адрес диапазона, используемого для адресации конфигурационных регистров. Затем, используя функцию Config \ Memory(Flat) следует получить дамп этого диапазона.

Адресное смещение 4-килобайтного блока конфигурационных регистров конкретного устройства относительно базового адреса диапазона MCFG MMIO, рассчитывается на основании параметров Bus, Device, Function согласно спецификации PCI.

Примечание. Подобный эксперимент, включая программное обеспечение в исходных кодах на ассемблере, приводится в нашей статье: «Memory-mapped Configuration. Тайное станет явным».

Пошагово процедура доступа к расширенным регистрам с помощью утилиты RU32 может быть описана следующим образом:

Просматриваем список PCI-устройств
Рис 1. Просматриваем список PCI-устройств

Просматриваем первые 256 байт одного из устройств классическим методом: Bus=0, Device=31=1Fh, Function=0
Рис 2. Просматриваем первые 256 байт одного из устройств классическим методом: Bus=0, Device=31=1Fh, Function=0

Просматриваем список таблиц ACPI
Рис 3. Просматриваем список таблиц ACPI

Просматриваем ACPI таблицу MCFG, видим, что MCFG MMIO base=DC000000h
Рис 4. Просматриваем ACPI таблицу MCFG, видим, что MCFG MMIO base=DC000000h

Выбираем режим просмотра дампа памяти
Рис 5. Выбираем режим просмотра дампа памяти

Просматриваем первые 256 байт устройства посредством MCFG
Рис 6. Просматриваем первые 256 байт устройства посредством MCFG то же устройство: Bus=0, Device=31=1Fh, Function=0. Номер устройства умножается на размер блока, представляющего устройство: 1Fh*8000h = F8000h. Суммируем базовый адрес MCFG MMIO и смещение: DC000000h + F8000h = DC0F8000h

Нажимаем PageDown и видим следующие 256 байт, адрес увеличен на 100h и равен DC0F8100h
Рис 7. Нажимаем PageDown и видим следующие 256 байт, адрес увеличен на 100h и равен DC0F8100h

В этом примере, байты расширенного конфигурационного пространства не используются и обнулены. Вместе с тем, ряд современных устройств используют этот диапазон адресов, например для декларирования поддержки технологий виртуализации.

Вся теория и формулы, необходимые для пересчета параметров Bus, Device, Function в адреса MCFG MMIO диапазона, доступны в ранее упомянутой статье на сайте IC Book.

Результаты получены с помощью RU32 под Oracle VMBox, эмуляция UEFI x64. С этим связан несколько необычный набор PCI-устройств. Первоначально планировался цикл экспериментов на Intel Compute Stick, но в силу отсутствия механизма сохранения экрана в RU32 пришлось ограничиться работой в виртуальной среде.

Дамп Model-Specific регистров

Дамп Model-Specific регистров (MSR) позволяет получить информацию о состоянии процессора. В частности содержимое регистра IA32_APIC_BASE позволяет сделать выводы относительно инициализации мультипроцессорной топологии платформы: доступность контроллера прерываний Local APIC, входящего в состав процессора и базовый адрес этого контроллера.

Оценив значение приращения счетчика процессорных тактов TIME_STAMP_COUNT (классическое название TIME STAMP COUNTER) за одну секунду, можно определить тактовую частоту ядра процессора, если, например вследствие неисправности подсистемы RTC или других таймеров, результат программного измерения не верен.

Содержимое регистра IA32_FEATURE_CONTROL позволяет определить поддержку процессором технологий виртуализации, а также безопасной загрузки Secure Boot. Расшифровывая содержимое этого регистра в соответствии с документацией Intel следует помнить о том, что декларация поддержки указанных технологий процессором является необходимым, но не достаточным условием их работоспособности на данной платформе, так как для такой поддержки также требуется соответствующая функциональность со стороны UEFI Firmware.

Список ACPI-таблиц

Список таблиц ACPI содержащий их сигнатуры, базовые адреса в памяти и фрагменты содержимого. Заметим, что утилита также позволяет просмотреть каждую из таблиц детально. Не акцентируя внимание на стандартных объектах, обязательных для каждой ACPI-совместимой системы, отметим нескольких таблиц, наличие которых может выделять данную платформу среди подобных.

ACPI таблица с сигнатурой UEFI декларирует каналы взаимодействия ОС и UEFI firmware платформы. Как правило, для такого взаимодействия используется режим управления системой или System Management Mode (SMM).

Таблица DBG2 (Microsoft Debug Port Table 2) сообщает о наличии отладочных портов, которые могут применяться как для контроля старта платформы, так и для отладки программного обеспечения в сеансе операционной системы с помощью инструментального компьютера.

Таблица HPET (High Precision Event Timer или по другой версии High Performance Event Timer) сообщает о наличии в составе системной логики высокоточных таймеров, ориентированных на эффективную поддержку приложений, для которых важен прецизионный контроль реального времени. Данные устройства пришли на смену Legacy таймеру Intel 8254.

Таблица LPIT (Low Power Idle Table) позволяет расширить набор энергосберегающих состояний, поддерживаемых платформой.

Таблица MSDM (Microsoft Data Management Table) содержит информацию, используемую в процедурах, связанных с лицензированием программного обеспечения.

Теги: