BlackHat Europe 2023 - LogoFAIL: Security Implications of Image Parsing During System Boot
BlackHat USA 2009 - Attacking Intel® BIOS - PDF
0x01. 议题简介
《LogoFAIL: Security Implications of Image Parsing During System Boot》这个议题主要介绍 BIOS 启动时 Logo 图片解析相关的漏洞,顺便提及了 2009 年的一个类似的议题《Attacking Intel® BIOS》,也是 BIOS 启动时 BMP 解析导致的整数溢出漏洞。所以,作者也感叹 History Repeats Itself。
在漏洞挖掘过程中,攻击面的挖掘是一个很重要的点,如果能找到大家(厂商、安全研究员、攻击者)都没怎么关注过的攻击面,极有可能收获一波 Low Hanging Fruits。
0x02. Attacking Intel BIOS
2.1 研究思路
更新 BIOS 固件时,固件包必须有合法的数字签名,作者的思路是看看有没有不需要签名的数据,在这部分数据上做研究。而 BIOS 的 Logo 图片便满足这一条件,在启动的早期阶段,图片会被解析和展示,这就来到了经典的文件格式解析问题。
2.2 漏洞案例
解析 BMP 图片格式时,存在经典的整数溢出漏洞。
1 | EFI_STATUS ConvertBmpToGopBlt() |
因为触发了整数溢出,会导致向目标缓冲区写入大量数据,直到访问到未映射的内存页,触发 Page Fault 异常。作者的利用思路是,在溢出的过程中改写 Page Fault Exception Handler,让其跳转到 BMP 图片中的执行 Shellcode。利用思路如下:
0x03. LogoFAIL
研究思路和前面是完全一致的,发现 UEFI 固件会解析如下图片格式:BMP、GIF、PNG、JPEG、PCX 以及 TGA。作者在仿真的环境下做了一些基于 LibAFL 的 Fuzzing。
3.1 漏洞案例
BMP 解析缓冲区下溢漏洞。
JPEG 解析内存破坏漏洞(未校验 Huffman Table 个数)。
PNG 解析整数溢出漏洞。
3.2 种子文件
PCX 是一种上古时期的文件格式,现在基本没人用了,作者在 Internet Archive 上找到了一个压缩包下载连接。
1 | https://archive.org/details/Universe_Of_PCX_1700_PCX_Files |
笔者在过去的工作中也做过 PCX Fuzzing,不过都是 Google 上找的少量零星的样本🤣。
0x04. 小结
攻击面挖掘是重点,老议题也值得回顾(可以开阔思路)。当然,LogoFAIL 中的研究也是有较高门槛的,在当前的国内环境下,一般的公司很可能是不会给这个时间去研究的。