Как безопасно обновить прошивку Intel ME?

Вопрос или проблема

Прошивка Intel ME (Management Engine) нуждается в обновлении время от времени. К сожалению, инструмент для обновления часто предоставляется только в виде исполняемого файла для Windows. Ниже приведены некоторые уже существующие обходные пути для пользователей Linux:

  • Версии инструмента обновления FWUpdLcl для Linux доступны на форуме WinRAID, но это неофициальный источник, поэтому неясно, насколько безопасны и подходят эти исполняемые файлы.
  • Windows PE (Preinstallation Environment) можно запустить с USB-накопителя, и официальный инструмент обновления можно запустить внутри него. Проблема заключается в том, что проприетарное ПО получит доступ к вашим дискам, сети и т.д., что может быть нежелательным.

Существует ли способ обновить прошивку Intel ME, не подвергая риску безопасность моего компьютера?

Запуск WinPE в виртуальной машине с PCI-проходкой

Один из способов обновить прошивку Intel ME — это запустить Windows PE (Preinstallation Environment) в виртуальной машине и предоставить ей доступ к PCI-устройству Intel ME Interface (MEI / HECI) на хосте. После этого прошивка Intel ME может быть обновлена из этого окружения.

Особенности данного решения:

  • Используется официальный ISO-образ Windows, а не живой CD с какого-то сайта в интернете
  • Проприетарное программное обеспечение не получит доступ к вашим дискам, сети и т.д., как это было бы в случае запуска на “голом” железе
  • Обновление прошивки выполняется из вашей обычной ОС Linux, т.е. нет необходимости загружаться с USB-накопителя

Предупреждение: Проприетарное программное обеспечение будет иметь доступ к Intel ME Interface (MEI / HECI). Неясно, какой доступ это дает системе, но потенциально это может предоставить доступ к оперативной памяти и зашифрованным дискам в их разблокированном состоянии, поскольку именно это уровень доступа имеет Intel ME к системе. Поэтому данное решение может оказаться даже менее безопасным, чем запуск образа Windows на “голом” железе, так как в этом случае диски не будут в разблокированном состоянии.
Используйте на свой страх и риск. Этот отрывок из статьи EFF может быть актуален:
“Доступ AMT не то же самое, что запуск произвольного кода ME, поэтому атакующие не могут напрямую получить доступ к памяти системы; им нужно использовать консоль, VNC или загруженные образы ОС, чтобы достичь своих целей.”
Одним из обходных путей может быть загрузка Ubuntu с USB-накопителя и запуск WinPE в виртуальной машине там.

Представленное здесь решение было протестировано на материнской плате ASUS Pro WS W680-ACE с Ubuntu 24.04.

Создание образа Windows PE

Скачать необходимые файлы

  • Официальный ISO-образ Windows 11 (бесплатно для скачивания)
  • Драйвер Intel ME Interface (MEI / HECI) для Windows для конкретной материнской платы
  • Инструмент обновления прошивки Intel ME для Windows для конкретной материнской платы

Подготовка файлов (пример)

mkdir overlay
cp -ai motherboard/DRV_MEI_Intel_Corp_TP_W11_64_V2407.../Drivers/MEI/win10 overlay/driver-mei-win10
cp -ai motherboard/MEUpdateTool_16.1.30.2307_TP overlay/

Создание образа

./make-winpe

Родительские директории образа должны иметь особые настройки разрешений, чтобы virt-manager мог получить доступ к образу, поэтому скрипт make-winpe создает доступный для чтения всем миром каталог /tmp/iso и помещает образ туда.

Запуск образа в виртуальной машине

sudo apt install virt-manager
virt-manager

Настройка виртуальной машины в virt-manager:

  • Учебный носитель: Ручная установка
  • Включить хранилище: Выкл
  • Настроить конфигурацию перед установкой: Да
  • Удалить NIC (нет необходимости в сети, чтобы избежать риска безопасности)
  • Добавить оборудование: Хранилище: /tmp/iso/winpe-intel-me.img, устройство диска, USB, только для чтения
  • Добавить оборудование: PCI-устройство хоста: контроллер HECI
  • Нажмите “Начать установку” (“Отменить установку” удалит виртуальную машину)

Скриншот запуска FWUpdLcl64.exe в WinPE в virt-manager

Скриншот запуска FWUpdLcl64.exe в WinPE в virt-manager

Файлы

make-winpe

Этот скрипт основан на https://wiki.archlinux.org/title/Windows_PE.

#!/bin/bash
set -e

# Создание образа Windows PE (Preinstallation Environment) GPT + FAT32 с инструментами обновления
# прошивки.
#
# Если скрипт дает сбой, используйте следующие команды для очистки:
# sudo umount /media/winimg /media/winpe /media/winpefat
# sudo rmdir /media/winimg /media/winpe /media/winpefat
# sudo losetup -l -a | grep -v /var/lib/snapd/
# sudo losetup -d /dev/loopX
# rm winpe.iso
#
# Скрипт основан на <https://wiki.archlinux.org/title/Windows_PE>.

################################################################################
# Расположение файлов
win_iso='win11/Win11_22H2_EnglishInternational_x64v2.iso'
overlay_dir="overlay"
start_script="start_script.cmd"
output_image="/tmp/iso/winpe-intel-me.img"
################################################################################

if ! which -s mkwinpeimg mkisofs; then
  echo 'Пожалуйста, выполните следующую команду:' >&2
  echo 'sudo apt install wimtools genisoimage' >&2
  exit 1
fi

if [ "$output_image" != "${output_image#/tmp/iso/}" ]; then
  if [ ! -e /tmp/iso ]; then
    mkdir --mode=755 /tmp/iso
  fi
  if [ ! -d /tmp/iso -o "$(stat -c%U /tmp/iso)" != "$USER" ]; then
    echo '/tmp/iso должен быть каталогом, принадлежащим пользователю!' >&2
    exit 1
  fi
fi

rm -f -- "$output_image"
if [ -e "$output_image" ]; then echo "Не удалось удалить $output_image!" >&2; exit 1; fi
truncate --size=1G -- "$output_image"

sudo mkdir /media/winimg
sudo mkdir /media/winpe
sudo mkdir /media/winpefat

sudo mount --read-only -- "$win_iso" /media/winimg
mkwinpeimg --iso --windows-dir=/media/winimg --overlay="$overlay_dir" \
  --start-script="$start_script" winpe.iso
sudo mount --read-only winpe.iso /media/winpe

loop="$(sudo losetup --find --show -- "$output_image")"
if [ "$loop" = "${loop#/dev/loop}" ]; then echo 'Ошибка создания устройства цикла!' >&2; exit 1; fi
sudo parted "$loop" \
  mklabel gpt \
  mkpart fat32 0% 100% \
  set 1 boot on \
  set 1 esp on
sudo mkfs.fat -F 32 "${loop}p1"
sudo mount -o uid="$USER" "${loop}p1" /media/winpefat

cp -a /media/winpe/* /media/winpefat/
cp -a /media/winimg/efi /media/winpefat/

sudo umount /media/winimg
sudo umount /media/winpe
sudo umount /media/winpefat
sudo losetup --detach "$loop"
rm -f -- winpe.iso

sudo rmdir /media/winimg
sudo rmdir /media/winpe
sudo rmdir /media/winpefat

echo
echo 'Образ WinPE, загружаемый через UEFI, можно найти здесь:'
printf '%s\n' "$output_image"

start_script.cmd

@echo Загружается драйвер Intel ME Interface (MEI / HECI):
@drvload \driver-mei-win10\heci.inf

@echo.
@echo ------------------------------------------------------------------------------
@type \README.txt
@echo ------------------------------------------------------------------------------
@echo.

@cd \MEUpdateTool*\FW
@echo Нажмите "exit", чтобы выключить компьютер.
@echo.
@cmd /k

@REM Выключить компьютер
@wpeutil shutdown

Конвертируйте файл в формат DOS (CRLF):

unix2dos start_script.cmd

overlay/README.txt

Чтобы отобразить содержимое этого файла:
type \README.txt

Чтобы показать справку, отобразить текущую/новую версию прошивки, обновить прошивку Intel ME:
cd \MEUpdateTool*\FW
FWUpdLcl64.exe -h
FWUpdLcl64.exe -fwver
FWUpdLcl64.exe -fwver ME.bin
FWUpdLcl64.exe -f ME.bin

Конвертируйте файл в формат DOS (CRLF):

unix2dos overlay/README.txt

Ответ или решение

Обновление прошивки Intel Management Engine (Intel ME) представляет собой важную процедуру для обеспечения безопасности и стабильности ваших систем. Однако, учитывая, что инструменты обновления часто предоставляются только в виде исполняемых файлов для Windows, пользователи Linux сталкиваются с проблемами при выполнении этой задачи. Ниже приведены шаги для безопасного обновления прошивки Intel ME с использованием Windows PE в виртуальной машине, что минимизирует риск для безопасности вашей системы.

Подготовка к обновлению

  1. Загрузите необходимые файлы:

    • Официальный образ ISO Windows 11 (возможно, предыдущие версии также подойдут).
    • Драйвер Intel ME Interface (MEI / HECI) для вашей материнской платы.
    • Инструмент обновления прошивки Intel ME для вашей материнской платы.
  2. Создайте рабочий каталог и подготовьте файлы:

    mkdir overlay
    cp -ai путь_к_драйверам/DRV_MEI_.../Drivers/MEI/win10 overlay/driver-mei-win10
    cp -ai путь_к_инструменту/MEUpdateTool_... overlay/

Создание образа Windows PE

  1. Скачайте и установите необходимые утилиты:
    Убедитесь, что установлены wimtools и genisoimage:

    sudo apt install wimtools genisoimage
  2. Запустите скрипт для создания образа Windows PE (make-winpe):
    Сначала создайте файл make-winpe.sh с приведенным ниже содержимым и дайте ему права на выполнение:

    chmod +x make-winpe.sh
    ./make-winpe.sh

    После выполнения команды образ Windows PE будет создан в каталоге /tmp/iso/.

Запуск образа в виртуальной машине

  1. Установка и настройка Virt-Manager:

    sudo apt install virt-manager
    virt-manager
  2. Создание виртуальной машины:

    • Выберите "Manual install" для установки медиа.
    • Отключите сетевой интерфейс для минимизации рисков.
    • Добавьте хранилище: выберите созданный образ Windows PE /tmp/iso/winpe-intel-me.img.
    • Добавьте PCI-устройство: выберите контроллер HECI для доступа к Intel ME.
    • Запустите установку, выбрав "Begin installation".

Обновление прошивки Intel ME

  1. Выполните обновление:
    После запуска виртуальной машины вам нужно будет выполнить загрузку драйвера Intel ME Interface с помощью файла start_script.cmd, который автоматически загрузит драйвер и запустит инструмент обновления. Вы можете выполнить следующие команды в интерактивной оболочке, чтобы проверить текущую версию прошивки и запустить процесс обновления:
    FWUpdLcl64.exe -h
    FWUpdLcl64.exe -fwver
    FWUpdLcl64.exe -fwver ME.bin
    FWUpdLcl64.exe -f ME.bin

Заключение

Обновление прошивки Intel ME в большинстве случаев требует выполнения шагов с учетом безопасности. Использование Windows PE в виртуальной машине с доступом к PCI-устройству обеспечивает контроль над средой выполнения и минимизирует риски. Однако, имейте в виду, что система все равно предоставляет доступ к Intel ME Interface, поэтому выполняйте эти действия с осторожностью и на свой риск.

Оцените материал
Добавить комментарий

Капча загружается...