پرش به مطلب اصلی
مهدی بحرینی
مهدی بحرینی
دکترا ۱۴۰۱
مهدی علینژاد
مهدی علینژاد
کارشناسی ۱۴۰۱

مفهوم ثابت‌افزارFirmware و اهمیت آن

ثابت‌افزار چیست؟

ثابت‌افزار تعاریف متعددی دارد. برخی آن را به‌عنوان نرم‌افزار تعبیه‌شدهEmbedded Software می‌شناسند، برخی دیگر آن را واسطی میان سخت‌افزار و نرم‌افزار می‌دانند، اما رایج‌ترین تعریف آن، نزدیک‌ترین لایۀ نرم‌افزاری به سخت‌افزار است.

عملکرد ثابت‌افزار

ثابت‌افزار یک نرم‌افزار برنامه‌پذیر است که با جزئیات سخت‌افزار در ارتباط است، مانند تغییر مقادیر رجیسترهای خاص یا تنظیمات سخت‌افزار. در سیستم‌هایی همچون لپ‌تاپ‌ها و رایانه‌‌های شخصی که سیستم‌عامل دارند،  ثابت‌افزار اولین نرم‌افزاری است که اجرا می‌شود. به‌عنوان مثال، در لپ‌تاپ‌های امروزی ثابت‌افزار UEFI استفاده می‌شود که هنگام فشردن دکمۀ پاور، ابتدا تست‌های اولیه مانند تست حافظه (Mem Test) و تست سلامت سیستم (POST) را انجام می‌دهد و سپس کنترل را به سیستم‌عامل واگذار می‌کند. برنامه‌ای که روی سیستم‌های نهفته اجرا می‌شود، ثابت‌افزار نام دارد. فایل باینری‌ای که روی یک میکروکنترلر بارگذاری می‌شود و نرم‌افزاری که روی یک روتر اجرا شده و پروتکل‌های ارتباطی را مدیریت می‌کند، مثال‌هایی از ثابت‌افزار هستند.

حوزه‌های مرتبط با ثابت‌افزار

امنیت ثابت‌افزار

یکی از مسائل مهم در امنیت ثابت‌افزار، دسترسی به فایل باینری آن و مهندسی معکوس برای استخراج ویژگی‌های مختلف است.

به‌روزرسانی امن ثابت‌افزار

 ثابت‌افزار در دستگاه‌های اینترنت اشیاء (IoT) اغلب نیاز به به‌روزرسانی دارد. برخی از چالش‌های امنیتی آن عبارت‌اند از:

  • جلوگیری از این‌که افراد غیرمجاز، خود را به‌عنوان سرور ثابت‌افزار معرفی کرده و نسخه‌ای آلوده از ثابت‌افزار را روی دستگاه نصب کنند.
  • جلوگیری از دسترسی غیرمجاز به ثابت‌افزار هنگام ارسال آن از طریق شبکه.
در گذشته، به‌روزرسانی ثابت‌افزار فقط از طریق اتصال فیزیکی انجام می‌شد، اما امروزه بیشتر به‌ صورت به‌روزرسانی از راه دور (OTA)Over the Air انجام می‌شود. چالش اصلی این روش، به‌روزرسانی بدون ایجاد اختلال در عملکرد فعلی دستگاه است.

روش‌های جدید برای به‌روزرسانی ایمن شامل استفاده از بلاکچین و رمزنگاری کلید عمومی و خصوصی برای جلوگیری از خواندن ثابت‌افزار توسط مهاجمان است.

تحمل‌پذیری در برابر خطا

تحلیل سیستم از نظر واکنش به خطاها، یکی از مباحث مهم در طراحی ثابت‌افزار است. در سیستم‌های بی‌درنگReal-Time Systems مانند FreeRTOS، بررسی می‌شود که اگر خطایی مانند وارونگی بیت یا تغییر مقدار داده رخ دهد، سیستم چه واکنشی نشان می‌دهد. یکی از روش‌های افزایش قابلیت اطمینان سیستم، استفاده از TMRTriple Modular Redundancy است که از سه ماژول موازی برای انجام عملیات استفاده کرده و نتیجه با بیشترین رأی را انتخاب می‌کند. در کنار این روش، رویکردهای ترکیبی و پویا نیز برای تحمل‌پذیری در برابر خطا مورد استفاده قرار می‌گیرند.

روش‌های جلوگیری از استخراج ثابت‌افزار

رمزنگاری فایل‌های باینری ثابت‌افزار یکی از راهکارهای امنیتی در این حوزه است. این روش نه‌تنها در سیستم‌های ثابت‌افزار بلکه در سایر سیستم‌های نرم‌افزاری نیز کاربرد دارد.

یکی از تکنیک‌های پیشرفته برای جلوگیری از استخراج ثابت‌افزار، تغییر کد باینری در زمان اجراست تا فرآیند تحلیل مهندسی معکوس را پیچیده‌تر کند. همچنین روش‌های مبهم‌سازی کدObfuscation مانع از تبدیل کد باینری به کد منبع می‌شوند. ابزارهای تحلیل مانند Ghidra و IDA Pro برای استخراج اطلاعات از ثابت‌افزار مورد استفاده قرار می‌گیرند. برای مثال، در یک پروژۀ تحقیقاتی، امکان استخراج UUID و رمز عبور WiFi از ESPای که در حافظۀ فلش بدون رمزنگاری ذخیره شده بود، بررسی شد.

اهمیت امنیت ثابت‌افزار: نمونه‌های واقعی

حملات علیه ثابت‌افزار در دنیای واقعی نمونه‌های مهمی دارد. یکی از این نمونه‌ها، حملۀ استاکس‌نتStuxnet بود که با هدف تخریب تأسیسات هسته‌ای ایران انجام شد. استاکس‌نت با آلوده کردن سیستم‌های PLCProgrammable Logic Controller باعث شد که سانتریفیوژهای غنی‌سازی اورانیوم از کنترل خارج شوند.

نمونۀ دیگر، حملات به ثابت‌افزار UEFI است که در مادربوردها مورد استفاده قرار می‌گیرد. برخی از بدافزارهای سطح ثابت‌افزار (Bootkits) از این ضعف بهره می‌برند و می‌توانند کلیدهای فشرده‌شده توسط کاربر را به سروری از راه دور ارسال کنند، بدون این‌که حتی آنتی‌ویروس‌ها قادر به شناسایی آن باشند.

فازینگFuzzing در ثابت‌افزار

فازینگ یک روش تست خودکار برای کشف آسیب‌پذیری‌های نرم‌افزاری و سیستم‌های ثابت‌افزار است. در این روش، ورودی‌های تصادفی مختلف به سیستم داده می‌شود تا واکنش آن بررسی شود.

به‌عنوان مثال، اگر یک کد C با مقدار ورودی "۴" دچار خطا شود، فازینگ به‌دنبال یافتن چنین نقاط ضعفی در برنامه است. این ایده در سطح ثابت‌افزار نیز کاربرد دارد و با استفاده از الگوریتم‌های تولید دادهGeneration-Based یا جهش دادهMutation-Based ، سیستم را تست کرده و نقاط ضعف آن را مشخص می‌کند.