در تحلیل سطوح حمله (Attack Surfaces) در میانافزارهای سیستم (Firmware)، رمزگشایهای تصویر (Image Decoders) تعبیه شده در بوتلودرها معمولاً کمتر از هستههای سیستمعامل که دارای تاییدیه رمزنگاری هستند، مورد بررسی قرار میگیرند. اگر تجزیه و تحلیل تصویر پیش از مرحله تایید امضا (Signature Verification) انجام شود، هرگونه فساد حافظه (Memory Corruption) در پردازشگر تصویر میتواند مدل اعتماد Secure Boot را مختل کند.
ریشه آسیبپذیری و مکانیسم حمله
پژوهشگران با تحلیل زیرسیستم ویدئویی U-Boot در فایل drivers/video/video_bmp.c، یک نقص امنیتی از نوع Unbounded Write در رمزگشای بیتمپ RLE8 (تابع video_display_rle8_bitmap()) شناسایی کردند که منجر به دور زدن Secure Boot پیش از احراز هویت میشود.
زمانی که U-Boot لوگوی بوت یا صفحه Splash را نمایش میدهد، یک تصویر BMP را که از حافظههای محلی (مانند SPI flash، MMC/eMMC، USB یا SD card) بارگذاری شده، تجزیه میکند. در این فرآیند، موارد زیر رخ میدهد:
- نوشتن نامحدود در Framebuffer: در حین بازسازی دادههای RLE8، تابع مذکور جریانهای کدگذاری شده را مستقیماً در Framebuffer فعال مینویسد، بدون اینکه مرزهای جریان داده را با مرزهای فریم یا اندازه بافر تخصیصیافته تطبیق دهد.
- پنجره اجرای پیش از احراز هویت: در بسیاری از پیکربندیهای سیستمهای تعبیهشده (Embedded)، صفحه Splash بلافاصله در هنگام استارتآپ و پیش از فراخوانی روتینهای Android Verified Boot (AVB) یا تایید امضای FIT Image رندر میشود.
- تفاوت در ذخیرهسازی: در حالی که Image هسته و Rootfs امضا شدهاند، تصاویر Splash اغلب در پارتیشنهای بدون امضا و قابل نوشتن توسط کاربر یا رسانههای خارجی ذخیره میشوند.
یک مهاجم با نوشتن یک فایل BMP RLE8 دستکاری شده در حافظه بوت، میتواند باعث ایجاد Out-of-bounds Write فراتر از Framebuffer در مراحل اولیه بوت شود. این اقدام منجر به تخریب ساختارهای داده بوتلودر، اشارهگرهای توابع (Function Pointers) یا پرچمهای تایید (Verification Flags) در حافظه شده و در نهایت جریان اجرا را پیش از تکمیل بررسی امضا، به کنترل مهاجم در میآورد.