قفل کردن/باز کردن قفل بوت لودر

به طور پیش فرض، اکثر دستگاه های اندرویدی با یک بوت لودر قفل شده عرضه می شوند، به این معنی که کاربران نمی توانند بوت لودر یا پارتیشن های دستگاه را فلش کنند. در صورت نیاز، شما (و کاربران دستگاهی که گزینه‌های برنامه‌نویس را فعال کرده‌اند) می‌توانید قفل بوت‌لودر را برای فلش کردن تصاویر جدید باز کنید.

باز کردن قفل بوت لودر

برای باز کردن قفل بوت لودر و فعال کردن پارتیشن ها برای باز کردن قفل، دستور fastboot flashing unlock روی دستگاه اجرا کنید. پس از تنظیم، حالت باز کردن قفل در طول راه‌اندازی مجدد باقی می‌ماند.

دستگاه‌ها باید فرمان fastboot flashing unlock رد کنند، مگر اینکه get_unlock_ability روی 1 تنظیم شده باشد. اگر روی 0 تنظیم شده باشد، کاربر باید در صفحه اصلی بوت شود، منوی تنظیمات > سیستم > گزینه‌های برنامه‌نویس را باز کرده و گزینه باز کردن قفل OEM را فعال کند (که get_unlock_ability را روی 1 تنظیم می‌کند). پس از تنظیم، این حالت در راه اندازی مجدد و بازنشانی داده های کارخانه باقی می ماند.

هنگامی که فرمان fastboot flashing unlock ارسال می شود، دستگاه باید از کاربران بخواهد که به آنها هشدار دهند که ممکن است در تصاویر غیر رسمی با مشکل مواجه شوند. پس از اینکه کاربر هشدار را تأیید کرد، دستگاه باید بازنشانی کارخانه ای را انجام دهد تا از دسترسی غیرمجاز به داده ها جلوگیری کند. بوت لودر باید دستگاه را بازنشانی کند حتی اگر نتواند آن را به درستی فرمت کند. فقط پس از تنظیم مجدد می توان پرچم ثابت را تنظیم کرد تا دستگاه بتواند دوباره فلش شود.

تمام رم هایی که قبلاً بازنویسی نشده اند باید در طی فرآیند fastboot flashing unlock بازنشانی شوند. این معیار از حملاتی که محتویات RAM باقی مانده از بوت قبلی را می خوانند جلوگیری می کند. به طور مشابه، دستگاه‌های قفل‌شده باید RAM را در هر بار بوت پاک کنند (مگر اینکه این تاخیر غیرقابل قبولی ایجاد کند)، اما باید منطقه مورد استفاده برای ramoops هسته را ترک کنند.

قفل کردن بوت لودر

برای قفل کردن بوت لودر و ریست کردن دستگاه، دستور fastboot flashing lock روی دستگاه اجرا کنید. دستگاه‌هایی که برای خرده‌فروشی در نظر گرفته شده‌اند باید در حالت قفل ارسال شوند (با get_unlock_ability بازگشت 0 ) تا اطمینان حاصل شود که مهاجمان نمی‌توانند با نصب یک سیستم جدید یا تصویر راه‌اندازی دستگاه را به خطر بیاندازند.

تنظیم ویژگی های قفل/باز کردن قفل

ویژگی ro.oem_unlock_supported باید در زمان ساخت بر اساس اینکه آیا دستگاه از باز کردن قفل چشمک زن پشتیبانی می کند یا خیر تنظیم شود.

  • اگر دستگاه از باز کردن قفل چشمک زن پشتیبانی می کند، ro.oem_unlock_supported روی 1 تنظیم کنید.
  • اگر دستگاه از باز کردن قفل چشمک زن پشتیبانی نمی کند، ro.oem_unlock_supported روی 0 تنظیم کنید.

اگر دستگاه از باز کردن قفل چشمک زن پشتیبانی می کند، بوت لودر باید وضعیت قفل را با تنظیم متغیر خط فرمان هسته androidboot.flash.locked روی 1 در صورت قفل شدن یا روی 0 در صورت باز بودن قفل نشان دهد. این متغیر باید به جای اینکه در خط فرمان هسته در اندروید 12 در bootconfig تنظیم شود.

برای دستگاه هایی که از dm-verity پشتیبانی می کنند، ro.boot.verifiedbootstate استفاده کنید تا مقدار ro.boot.flash.locked را روی 0 تنظیم کنید. اگر حالت بوت تایید شده نارنجی باشد، این قفل بوت لودر را باز می کند.

حفاظت از بخش های بحرانی

دستگاه‌ها باید از قفل و باز کردن بخش‌های حیاتی پشتیبانی کنند، بخش‌هایی که به‌عنوان هر آنچه برای راه‌اندازی دستگاه در بوت‌لودر لازم است تعریف می‌شوند. چنین بخش هایی ممکن است شامل فیوزها، پارتیشن های مجازی برای هاب حسگر، بوت لودر مرحله اول و موارد دیگر باشد. برای قفل کردن بخش‌های حیاتی، باید از مکانیزمی استفاده کنید که از تغییر عمدی هر بخش حیاتی در کد (هسته، تصویر بازیابی، کد OTA و غیره) که روی دستگاه اجرا می‌شود، جلوگیری کند. اگر دستگاه در حالت بحرانی قفل است، OTA ها نباید بخش های حیاتی را به روز کنند.

انتقال از حالت قفل به حالت قفل باز باید به تعامل فیزیکی با دستگاه نیاز داشته باشد. این تعامل شبیه به اثرات اجرای فرمان fastboot flashing unlock است، اما کاربر را ملزم می کند تا یک دکمه فیزیکی روی دستگاه را فشار دهد. دستگاه‌ها نباید اجازه دهند بدون تعامل فیزیکی، از lock critical به unlock critical به صورت برنامه‌ریزی شوند، و دستگاه‌ها نباید در حالت unlock critical ارسال شوند.