
О подсистеме 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 с сайта производителя:

- распаковываем архив, копируем оригинал 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


