相关链接

受影响型号

第一批修复

Intel 700/600
AMD 500/400

第二批修复
Intel 500/400
AMD 600

样本比对

z790 未上传

20230606224909

b760 已上传

20230606225056

选取b760的两个版本固件作为分析对象,标记为F1和F2

根据eclypsium提供的信息,获得UEFI固件中相关可执行程序:
GUID:AEB1671D-019C-4B3B-BA-00-35-A2-E6-28-04-36
提取出一个二进制efi文件,标记为

F1_Section_PE32_image_AEB1671D-019C-4B3B-BA00-35A2E6280436_body.efi
F2_Section_PE32_image_AEB1671D-019C-4B3B-BA00-35A2E6280436_body.efi

EFI文件分析

先使用NtCreateFile函数尝试创建一个文件,第三个参数ObjectAttributes指明了位置:

使用ida pro比对两个版本之间差异,发现只存在一处不同:

20230606232531

该函数是一个写文件的函数,不同位置为写入缓冲区的大小(以字节为单位)。

F1:
数据长度:0x1208F8u

F2
数据长度:0x120AF8u, 1182456

找到对应写入文件的指针,提取出该文件,标记为

F1_payload.bin
F2_payload.bin

Payload沙盒测试

运行释放的可执行文件F1_payload

20230607142040

服务管理器中出现GigabyteUpdateService

20230607142152

Payload静态分析

使用bindiff比对F1_payload.bin、F2_payload.bin,并未发现不同

使用binwalk在文件中查询PE头,发现在payload.exe中还存在第二个PE可执行文件,提取出该文件,标记为

F1_MZ2.bin
F2_MZ2.bin

第二个PE文件分析

该文件是一个.NET编写的程序

Bindiff

20230607180316

反编译分析

反编译工具:dotPeek

AppLiveUpdateWebPath

\Utilities\AppLiveUpdate\AppLiveUpdateWebPath.cs

20230607175009

删除了更新源Software-nas/Swhttp/LiveUpdate4,保留 mb.download.gigabyte.com/FileList/Swhttp/LiveUpdate4

UtilityUserControlsDownloadAndInstallBox

\UtilityUserControlsDownloadAndInstallBox.xaml.cs

20230607175541

添加了安全校验库,之前可能未作安全校验

20230608144219

增加了安装前验证,未通过则抛出异常

URL说明

url格式为 {0}://{1}/{2}/{3},如:
https://mb.download.gigabyte.com/FileList/Swhttp/LiveUpdate4/AppCenter/verInfo.ini

  • {0}:
    • http
    • https,默认状态下设置为https
  • {1}: ToUrl:
    • mb.download.gigabyte.com/FileList/Swhttp/LiveUpdate4
    • Software-nas/Swhttp/LiveUpdate4
  • {2}: folderName:
    • AppCenter
    • webappcenter
    • GCC
  • {3}: 文件名称
    • UpdPack.exe
    • verInfo.ini
    • setup.exe
    • setup.iss

结论

可以确定,未修复的版本中存在两个弱点:

  1. InternalUrl(Software-nas/Swhttp/LiveUpdate4):实际情况下无法发起攻击
  2. 下载文件未作校验:可被中间人攻击并释放可执行文件

厂商借助WPBT功能,从固件层面向用户的操作系统内释放网络下载器,具有潜在的安全风险。
如果不能保证下载来源的可靠性,或者通过中间人替换下载来源,则很容易造成漏洞利用。