فرآیند بوت در گوشی های مدیا تک
برسی چند فراید ثابت در پروسه بوت گوشی (MTK)
MediaTek Boot Process (پروسه بوت در مدیاتک)
همانطور که در شکل زیر نشان داده شده است، بسیاری از SoCهای موبایل و تبلت مدیاتک از یک فرآیند بوت معمولی پیروی می کنند. حمله تزریق خطا برای هدف قرار دادن BootROM طراحی شده است، زیرا در حال بارگذاری و تأیید فایل اجرایی پیش بارگذاری(Preloder) است. و این آسیب پذیری را زیاد میکند
Boot Rom درواقع چه وظیفه ای دارد؟
BootROM اولین مرحله تغییر ناپذیر در فرآیند بوت است و به عنوان ریشه سخت افزاری اعتماد برای SoC عمل می کند. همانطور که معمول است، این SoCها حاوی یک بانک تخلیه هستند که می تواند در طول ساخت دستگاه OEM پیکربندی شود تا بوت امن را فعال کند و هش گواهی امضای پیش بارگذاری را مشخص کند. در طول راهاندازی، BootROM این فیوزها را میخواند تا سیاست راهاندازی امن پیکربندی شده را تعیین کند. در مرحله بعد، BootROM پیش بارگذاری کننده را از eMMC در RAM بارگذاری می کند و امضای آن را قبل از اجرای آن تأیید می کند.
پیش بارگذاری مدیاتک دومین مرحله در فرآیند بوت است و اولین کد قابل تغییر است. Preloader در پارتیشن BOOT0 eMMC ذخیره می شود. همانطور که در بخش دیگر مشخصات eMMC توضیح داده شد، پارتیشنهای بوت، پارتیشنهای سختافزاری ویژهای هستند که از پارتیشن دادههای کاربر اصلی جدا هستند.
تجزیه و تحلیل فرآیند اصلی
مدیاتک دو نسخه از پیشلودر(Preloader) را در BOOT0 ذخیره میکند. اگر img اول خراب باشد (یعنی بررسی تأیید امضا را پاس نکند)، BootROM سعی میکند img دوم را بارگذاری می کند. اگر هر دو کپی خراب باشند، BootROM وارد حالت دانلود می شود، همانطور که با رشته “[DL] 00009C40 00000000 010701” که از طریق UART ارسال می شود نشان داده می شود.
به منظور بارگیری پیش بارگذاری از فلش در رم، از ویژگی eMMC boot mode استفاده می شود. به جای ارسال دستورات READ فردی، BootROM eMMC را به این «حالت راهاندازی جایگزین» بازنشانی میکند. این با ارسال دو دستور GO_IDLE_STATE (CMD0) انجام می شود: ابتدا با آرگومان 0xF0F0F0F0 که کارت را در حالت “pre-idle” قرار می دهد، سپس با 0xFFFFFFFA که آن را در حالت بوت قرار می دهد.
به تصویر زیر خوب دقت کنید زیاد خودتون رو اذیت نکنید (:
پس از دریافت فرمان دوم، eMMC شروع به انتقال محتویات پارتیشن BOOT0 از طریق خط DAT0 در حالت 1 بیتی می کند. دریافت کل محتویات پارتیشن حدود 100 میلی ثانیه طول می کشد.
هنگامی که BootROM کل اولین تصویر پیش بارگذاری کننده(Preloder) را از پارتیشن BOOT0 دریافت کرد، با ارسال یک فرمان بازنشانی GO_IDLE_STATE، فرآیند قطع می شود.
اگر اولین تصویر پیشلودر معتبر باشد، مشاهدات ما نشان میدهد که بین زمانی که بایتهای نهایی پیشلودر ارسال میشود تا زمانی که اولین فرمان eMMC صادر شده توسط پیشلودر مشاهده میشود، حدود ۲ ثانیه طول میکشد.
از طرف دیگر، اگر اولین img پیش بارگذاری نامعتبر باشد (یعنی تأیید امضا ناموفق باشد)، این روند تکرار می شود. با این حال، اکنون BootROM فرمان بازنشانی را تا زمانی که نسخه دوم پیشلودر دریافت نشود، ارسال نمیکند. در این مورد، بین تلاش BootROM برای بارگذاری اولین و دومین img پیشلودر تنها حدود 700 میلیثانیه طول میکشد.
بنابراین، ما فرض میکنیم که در طول ~700 میلیثانیه اول، BootROM مشغول تجزیه ساختار img پیشبارگذاری و انجام اعتبارسنجی امضا است، و اجرای 1.2 ثانیه زیر عمدتاً کد اولیهسازی پیشبارگذار است. به همین دلیل، گروه NCC تصمیم گرفت که حمله خطای ولتاژ باید اولین پنجره ۷۰۰ میلیثانیه را پس از خواندن پیشلودر از eMMC هدف قرار دهد.
واین یک باگ برای توسعه دهندگان بیگانه بود(:
که شروع توسعه دانگل ها و باکس ها از این جا بود
Payload Execution(این عنوان نیز بعدا بروزرسانی میشود)
و چگونه گی این عمل در این مقاله نمی گنجد فقط یک عکس میتواند تشریح کند