Статьи

О подсистеме Intel ME и ее отключении

Начиная с 2006 года на всех материнских платах компьютеров с процессорами Intel устанавливается микроконтроллер подсистемы ME (в современных компьютерах он интегрирован в чипсет).

Его назначение и функционал большинству пользователей непонятны.

Официально Intel® ME — это маленькая, мало потребляющая энергию компьютерная подсистема, которая выполняет различные задачи в спящем режиме, во время запуска компьютера и во время его работы.

Фрагмент вывода команды hwinfo, показывающий информацию о контроллере Intel 200 Series PCH CSME HECI, отвечающем за работу подсистемы Intel ME на компьютере с материнской платой Gigabyte Z370P D3:

31: PCI 16.0: 0780 Communication controller

[Created at pci.386]

Unique ID: WnlC.+ignOUsuRuB

SysFS ID: /devices/pci0000:00/0000:00:16.0

SysFS BusID: 0000:00:16.0

Hardware Class: unknown

Device Name: "Onboard - Other"

Model: "Intel 200 Series PCH CSME HECI #1"

Vendor: pci 0x8086 "Intel Corporation"

Device: pci 0xa2ba "200 Series PCH CSME HECI #1"

SubVendor: pci 0x1458 "Gigabyte Technology Co., Ltd"

SubDevice: pci 0x1c3a

Driver: "mei_me"

Driver Modules: "mei_me"

Memory Range: 0xf7f2d000-0xf7f2dfff (rw,non-prefetchable)

IRQ: 137 (39 events)

Module Alias: "pci:v00008086d0000A2BAsv00001458sd00001C3Abc07sc80i00"

Driver Info #0:

Driver Status: mei_me is active

Driver Activation Cmd: "modprobe mei_me"

Config Status: cfg=new, avail=yes, need=no, active=unknown

Что такое и зачем нужна подсистема Intel ME?

Модуль Intel ME изначально назывался Intel Manageability Engine, затем — Intel Management Engine, а также Converged Security and Manageability Engine (CSME) или сокращенно Converged Security Engine (CSE).

В ноутбуках и embedded-компьютерах эта система называется Trusted Execution Engine (TXE), а на серверах — Server Platform Services (SpS).

Первая версия (ME 1.0) появилась в 2005 году, вторая (встроенная в северный мост) — в 2006-м. В 2007-м году были созданы ME 3.0 для desktop-ов и ME 4.0 — для мобильных устройств. Очередные релизы Intel ME затем стали регулярно обновляться, например:

  • в 2009 году вышла версия AMT/ME 6.0 (превая PCH платформа), а также ME Gen 2 (для ARC600 CPU), добавлена поддержка KVM (на основе протокола VNC);
  • в 2011-м — появилось обновление ME 7.1 DAL (Dynamic Application Loader) для IPT/OTP;
  • в 2014 году вышел ME 10.0;
  • в 2015 — ME 11.0.

Программная часть кода Intel ME прописана в BIOS материнской платы:

Intel ME имеет собственную маленькую память (SRAM), потребляет очень мало энергии. Подсистема способна читать данные на PC без ведома пользователя (шпионить за ним) и в некоторых случаях даже может дистанционно отключать компьютер. Фактически, Intel ME — это шпионский backdoor.

Intel ME firmware активна, даже если компьютер находится в дежурном режиме (состояние sleeping/hibernating).

Intel Management Engine может читать/писать данные RAM с помощью функционала DMA, а также используется для:

  • менеджмента служб Low-power, out-of-band (OOB);
  • управления службой Capability Licensing Service (CLS)
  • реализации функционала Anti-Theft Protection и Protected Audio Video Path (PAVP);
  • может осуществлять доступ и контроль функций AMT/vPro, TPM (Trusted Platform Module), QST (fan control), ICC (Integrated Clock Control), DAL (IPT/OTP), SWC (Silicon Workaround Capability).

В современных компьютерах для питания подсистемы Intel ME, используется отдельная линия. Таким образом, работа Intel® Management Engine не зависит от операционной системы компьютера, функционируя независимо от ядра.

Когда компьютер работает (состояние процессора S0/M0), подсистема Intel ME работает следующим образом:

Когда компьютер находится в дежурном режиме (состояние CPU S3/M1), подсистема Intel ME продолжает ограниченно работать:

Лишь когда, компьютер обесточен, подсистема Intel ME отдыхает (находится в состоянии S3/M-off):

Так как обычному пользователю функционал Intel ME не нужен, сторонники теории заговора предполагают, что эта подсистема создана и работает в интересах американского Агентства национальной безопасности. Правда это или нет, каждый может судить сам…

Как отключить Intel Manageability Engine?

Функционал современной Intel ME невозможно полностью отключить, так как в противном случае компьютер перестанет работать.

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

На компьютерах, использующих Intel ME 6.0 (модели, выпускавшиеся до 2008-2009 годов) включительно, ее можно полностью отключить.

Более современные версии Intel ME используются для инициализации оборудования и power-менеджмента, поэтому на них полностью отключить эту подсистему нельзя.

Функционал Intel ME компьютеров под управлением Linux можно максимально ограничить с помощью открытого программного обеспечения coreboot.

На любом компьютере можно прошить очищенную от Intel Meпрошивку, которую можно сделать с помощью утилиты me_cleaner.

me_cleaner — это программа написанная Nicola Corna на Python, которая может частично отключить функционал ME для компьютеров с процессорами Intel, начиная с архитектуры Nehalem и новее.

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

Для использования me_cleaner используется оригинальный файл BIOS (original_dump.bin), который модифицируется командой

python me_cleaner.py -S -O modified_image.bin original_dump.bin

Модифицированный файл (modified_image.bin) нужно записать на микросхему SPI-флеш BIOS вместо родного BIOS, либо штатной утилитой, либо с помощью программатора.

Для устранения возможных проблем перед прошивкой обязательно нужно сохранить в безопасное место ориганальную версию BIOS.

Отключение функционала Intel ME на примере материнской платы Gigabyte Z370P D3

На плате Gigabyte Z370P D3 можно модифицировать прошивку BIOS и без программатора, с помощью одной из утилит со страницы HowToReflashBIOS.

Автором использовалась оригинальная версия bios, скачанная с сайта производителя и утилита Q-Flash, встроенная в BIOS.

Для очищения BIOS от функционала Intel ME:

  • распаковываем архив, копируем оригинал BIOS и и модифицируем его скриптом me_cleaner:
python me_cleaner.py -S -O Z370PD3_mod.bin Z370PD3.F15
  • получаем вывод с сообщением об успехе (в конце: Checking the FTPR RSA signature… VALID
Done! Good luck!):

Full image detected

The ME/TXE region goes from 0x3000 to 0x200000

Found FPT header at 0x3010

Found 11 partition(s)

Found FTPR header: FTPR partition spans from 0x1000 to 0xa8000

Found FTPR manifest at 0x1448

ME/TXE firmware version 11.8.81.3807

Public key match: Intel ME, firmware versions 11.x.x.x

The HAP bit is NOT SET

Reading partitions list...

FTPR (0x00001000 - 0x0000a8000, 0x000a7000 total bytes): NOT removed

FTUP (0x00110000 - 0x0001bc000, 0x000ac000 total bytes): removed

DLMP ( no data here , 0x00000000 total bytes): nothing to remove

PSVN (0x00000e00 - 0x000001000, 0x00000200 total bytes): removed

IVBP (0x0010c000 - 0x000110000, 0x00004000 total bytes): removed

MFS (0x000a8000 - 0x00010c000, 0x00064000 total bytes): removed

NFTP (0x00110000 - 0x0001bc000, 0x000ac000 total bytes): removed

ROMB ( no data here , 0x00000000 total bytes): nothing to remove

FLOG (0x001bc000 - 0x0001bd000, 0x00001000 total bytes): removed

UTOK (0x001bd000 - 0x0001bf000, 0x00002000 total bytes): removed

ISHC ( no data here , 0x00000000 total bytes): nothing to remove

Removing partition entries in FPT...

Removing EFFS presence flag...

Correcting checksum (0x54)...

Reading FTPR modules list...

FTPR.man (uncompressed, 0x001448 - 0x002000): NOT removed, partition manif.

rbe.met (uncompressed, 0x002000 - 0x002096): NOT removed, module metadata

kernel.met (uncompressed, 0x002096 - 0x002124): NOT removed, module metadata

syslib.met (uncompressed, 0x002124 - 0x002188): NOT removed, module metadata

bup.met (uncompressed, 0x002188 - 0x00274a): NOT removed, module metadata

pm.met (uncompressed, 0x00274a - 0x0027f8): NOT removed, module metadata

vfs.met (uncompressed, 0x0027f8 - 0x003124): NOT removed, module metadata

evtdisp.met (uncompressed, 0x003124 - 0x0032b2): NOT removed, module metadata

loadmgr.met (uncompressed, 0x0032b2 - 0x0033da): NOT removed, module metadata

busdrv.met (uncompressed, 0x0033da - 0x00375e): NOT removed, module metadata

gpio.met (uncompressed, 0x00375e - 0x0038a8): NOT removed, module metadata

prtc.met (uncompressed, 0x0038a8 - 0x003a58): NOT removed, module metadata

policy.met (uncompressed, 0x003a58 - 0x003c18): NOT removed, module metadata

crypto.met (uncompressed, 0x003c18 - 0x003da2): NOT removed, module metadata

heci.met (uncompressed, 0x003da2 - 0x003f6e): NOT removed, module metadata

storage.met (uncompressed, 0x003f6e - 0x00426a): NOT removed, module metadata

pmdrv.met (uncompressed, 0x00426a - 0x00438e): NOT removed, module metadata

maestro.met (uncompressed, 0x00438e - 0x004478): NOT removed, module metadata

fpf.met (uncompressed, 0x004478 - 0x004590): NOT removed, module metadata

hci.met (uncompressed, 0x004590 - 0x004692): NOT removed, module metadata

fwupdate.met (uncompressed, 0x004692 - 0x00479a): NOT removed, module metadata

ptt.met (uncompressed, 0x00479a - 0x0048a6): NOT removed, module metadata

touch_fw.met (uncompressed, 0x0048a6 - 0x0049c0): NOT removed, module metadata

rbe (Huffman , 0x0049c0 - 0x007240): NOT removed, essential

kernel (Huffman , 0x007240 - 0x017280): NOT removed, essential

syslib (Huffman , 0x017280 - 0x0285c0): NOT removed, essential

bup (Huffman , 0x0285c0 - 0x053040): NOT removed, essential

pm (LZMA/uncomp., 0x053040 - 0x055300): removed

vfs (LZMA/uncomp., 0x055300 - 0x05d600): removed

evtdisp (LZMA/uncomp., 0x05d600 - 0x05efc0): removed

loadmgr (LZMA/uncomp., 0x05efc0 - 0x061e40): removed

busdrv (LZMA/uncomp., 0x061e40 - 0x0636c0): removed

gpio (LZMA/uncomp., 0x0636c0 - 0x0647c0): removed

prtc (LZMA/uncomp., 0x0647c0 - 0x065340): removed

policy (LZMA/uncomp., 0x065340 - 0x06a080): removed

crypto (LZMA/uncomp., 0x06a080 - 0x077d40): removed

heci (LZMA/uncomp., 0x077d40 - 0x07bc00): removed

storage (LZMA/uncomp., 0x07bc00 - 0x080040): removed

pmdrv (LZMA/uncomp., 0x080040 - 0x0811c0): removed

maestro (LZMA/uncomp., 0x0811c0 - 0x082f40): removed

fpf (LZMA/uncomp., 0x082f40 - 0x084900): removed

hci (LZMA/uncomp., 0x084900 - 0x085180): removed

fwupdate (LZMA/uncomp., 0x085180 - 0x089e80): removed

ptt (LZMA/uncomp., 0x089e80 - 0x09f6c0): removed

touch_fw (LZMA/uncomp., 0x09f6c0 - 0x0a8000): removed

The ME minimum size should be 360448 bytes (0x58000 bytes)

The ME region can be reduced up to:

00003000:0005afff me

Setting the HAP bit in PCHSTRP0 to disable Intel ME...

Checking the FTPR RSA signature... VALID

Done! Good luck!

Каталог со скриптом me_cleaner.py и файлами bios:

Как видно из примера, me_cleaner удалил из BIOS материнской платы Gigabyte Z370P D3 восемнадцать (!) модулей: pm, vfs, evtdisp, loadmgr, busdrv, gpio, prtc, policy, crypto, heci, storage, pmdrv, maestro, fpf, hci, fwupdate, ptt и touch_fw.

  • прошиваем модифицированный Bios (файл Z370PD3_mod.bin) любым удобным способом, например, штатной утилитой Q-Flash (для этого нужно сохранить файл BIOS на флешку);

При прошивке модифицированного BIOS на материнскую плату Gigabyte Z370P D3 утилита Q-Flash показывает разницу прошиваемого файла (версия Fast) с оригиналом (Intact):

  • наслаждаемся работой компьютера без шпионского модуля Intel ME.

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

Hwinfo теперь не видит шпионского устройства PCI 16.0: 0780 Communication controller. Потребление процессора хоть и незначительно, но снизилось, что положительно сказалось на его температуре при майнинге.

P.S. В ubuntu 22.04 предустановлен python3, поэтому команда для модификации BIOS выглядит так:

python3 me_cleaner.py -S -O modified_image.bin original_dump.bin

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *