AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1528418
Accepted
Håkon A. Hjortland
Håkon A. Hjortland
Asked: 2024-09-29 09:31:26 +0800 CST2024-09-29 09:31:26 +0800 CST 2024-09-29 09:31:26 +0800 CST

如何以安全的方式更新英特尔 ME 固件?

  • 772

Intel ME(管理引擎) 固件需要不时更新。遗憾的是,更新工具通常仅作为 Windows 可执行文件提供。Linux 用户的一些现有解决方法如下:

  • Linux 版本的FWUpdLcl更新工具可在 WinRAID 论坛中获取,但这是一个非官方来源,因此很难完全确定这些可执行文件的安全性和适用性。
  • Windows PE(预安装环境) 可以从 USB 拇指驱动器启动,并在其中运行官方更新实用程序。 这样做的问题是专有软件将能够访问您的驱动器、网络等,而这可能是您不希望的。

有没有什么方法可以更新英特尔 ME 固件而不危及我的计算机的安全?

updates
  • 1 1 个回答
  • 25 Views

1 个回答

  • Voted
  1. Best Answer
    Håkon A. Hjortland
    2024-09-29T09:31:26+08:002024-09-29T09:31:26+08:00

    使用 PCI 直通在虚拟机中运行 WinPE

    更新 Intel ME 固件的一种方法是在虚拟机中运行 Windows PE(预安装环境),并让其访问主机上的 Intel ME 接口 (MEI / HECI) PCI 设备。然后可以从此环境中更新 Intel ME 固件。

    该解决方案的特点:

    • 使用官方的 Windows ISO,而不是来自互联网某处的 Live CD
    • 专有软件将无法访问您的驱动器、网络等,就像在裸机上运行一样
    • 固件更新是在常规 Linux 操作系统中执行的,即无需从 USB 拇指驱动器启动

    警告:专有软件将有权访问 Intel ME 接口 (MEI/HECI)。目前尚不清楚这会为系统提供何种访问权限,但它可能会授予对 RAM 和任何处于解锁状态的加密驱动器的访问权限,因为这是 Intel ME 对系统的访问级别。因此,此解决方案可能比在裸机上运行 Windows 映像更不安全,因为在这种情况下驱动器不会处于解锁状态。使用风险自负。不过, EFF文章中的这段话可能与此相关:“AMT 访问与运行任意 ME 代码不同,因此攻击者无法直接访问系统内存;他们必须使用控制台、VNC 或启动操作系统映像来实现他们的目标。”一种解决方法可能是从 USB 拇指驱动器启动 Ubuntu 并在那里的虚拟机中运行 WinPE。

    这里介绍的解决方案已经在搭载 Ubuntu 24.04 的 ASUS Pro WS W680-ACE 主板上进行了测试。

    制作 Windows PE 映像

    下载必要的文件

    • 官方Windows 11 ISO(免费下载)
    • 适用于特定主板的 Windows 版 Intel ME 接口 (MEI / HECI) 驱动程序
    • 适用于 Windows 的特定主板的 Intel ME 固件更新工具

    准备文件(示例)

    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 中设置虚拟机:

    • 安装介质:手动安装
    • 启用存储:关闭
    • 安装前自定义配置:是
    • 移除网卡(不需要网络,避免安全风险)
    • 添加硬件:存储:/tmp/iso/winpe-in​​tel-me.img,磁盘设备,USB,只读
    • 添加硬件:PCI 主机设备:HECI 控制器
      • 更多信息请阅读virt-manager 中的 PCI passthrough
    • 单击“开始安装”(“取消安装”将删除虚拟机)

    FWUpdLcl64.exe 在 vi​​rt-manager 中的 WinPE 中运行的屏幕截图

    FWUpdLcl64.exe 在 vi​​rt-manager 中的 WinPE 中运行的屏幕截图

    文件

    制作winpe

    该脚本基于https://wiki.archlinux.org/title/Windows_PE。

    #!/bin/bash
    set -e
    
    # Make a Windows PE (Preinstallation Environment) GPT + FAT32 image with firmware
    # update tools included.
    #
    # If the script crashes, use the following commands to clean up:
    # 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
    #
    # The script is based on <https://wiki.archlinux.org/title/Windows_PE>.
    
    ################################################################################
    # File locations
    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 'Please run the following command:' >&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 must be a directory owned by user!' >&2
        exit 1
      fi
    fi
    
    rm -f -- "$output_image"
    if [ -e "$output_image" ]; then echo "Unable to remove $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 'Error creating loop device!' >&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 'The UEFI-bootable WinPE image can be found here:'
    printf '%s\n' "$output_image"
    

    启动脚本

    @echo Loading Intel ME Interface (MEI / HECI) driver:
    @drvload \driver-mei-win10\heci.inf
    
    @echo.
    @echo ------------------------------------------------------------------------------
    @type \README.txt
    @echo ------------------------------------------------------------------------------
    @echo.
    
    @cd \MEUpdateTool*\FW
    @echo Type "exit" to shut down the computer.
    @echo.
    @cmd /k
    
    @REM Shut down the computer
    @wpeutil shutdown
    

    将文件转换为 DOS 格式 (CRLF):

    unix2dos start_script.cmd
    

    覆盖/README.txt

    To display the contents of this file:
    type \README.txt
    
    To show help, show current/new firmware version, update the Intel ME firmware:
    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
    
    • 0

相关问题

  • 无法更新雷鸟

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • iPod Touch (iPhone) 的固件更新?

  • 如何让 Ubuntu 减少检查更新的频率?对于 11.04 及更高版本对于赶时间的人!通过 Ubuntu 软件中心

  • 如何启用自动更新?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve