نمیتوان روی زیربنای ضعیف چیزی ساخت و امنیت نیز از این قاعده مستثنی نیست. ویندوز با قابلیتهای مهم امنیتی پرشده است؛ مانند یکپارچگی کدی که توسط Hypervisor محافظت شده (HVCI) و Windows Defender Credential Guard که از کاربر در برابر حملات پیشرفته سختافزاری و سفتافزاری محافظت میکند. به منظور کارکرد بهینه این قابلیتها، سختافزار و سفتافزار یا Firmware پلتفرم باید سالم و قابل اطمینان باشد و در غیر این صورت، زنجیره اطمینانی که با اعتبارسنجی رمزنگاری اجزای فرآیند Boot، یکپارچگی سیستم را تایید میکند ممکن است دچار تغییرات مخربی شود. بنابراین امنیت قابلیتهای سیستم عملیاتی که از سختافزار و نرمافزار به عنوان بلوکهای سازنده زیربنایی استفاده میکنند با تهدید مواجه میشود. بدون قابلیتهای شناسایی و جلوگیری، سیستم قادر نخواهد بود تا نرمافزارهای مخربی که پیش از شروع کار سیستم عملیاتی یا طی خود فرآیند Boot راه اندازی میشوند را شناسایی و بلاک کند. بنابراین احتمال دارد نرمافزار مخرب امتیازات بالایی کسب کند، جایگاه خود را گسترش دهد و در سیستم شناسایی نشده باقی بماند. در صورت وجود Secured-core PCها، Secure Launch که از اصل Dynamic Root of Trust for Measurement (DRTM) بهره میگیرد یک تکنولوژی Built-In است و بطور پیش فرض فعال شده تا بطور گسترده محافظت را در مقابل حملات پیچیده Boot افزایش دهد. با استفاده از زیرساختهای Silicon و Built-In یا بخشهای سفتافزاری، Secure Launch یا راهاندازی امن به سیستم اجازه میدهد تا آزادانه در ابتدا کد فاقد اطمینان را Boot کند اما سریعا با در اختیار گرفتن کنترل CPUها و ارسال کدهای نامطمئن به مسیر کد شناختهشده و ارزیابی شده برای شناسایی آن، سیستم را درحالت مطمئن راهاندازی میکند. این اقدام کدUnified Extensible Firmware Interface (UEFI) را از مرز اطمینان خارج میکند؛ یعنی پس از اینکه Secure Launch با تمامی تهدیدات یک رده مبازره کرد، سیستمهای درون UEFI بهتر در مقابل Bugها یا سواستفادهها (Exploit) مورد محافظت قرار میگیرند.
برای مدتی تجهیزات Windows قادر بودند تا از یک Root of Trust (ریشه اطمینان) مبتنی بر نرمافزار استفاده کنند تا مطمئن شوند نرمافزار یا سفتافزار تصدیق نشده پیش از راهاندازی Windows Bootloader مستقر نمیشود. این Root of Trust حاصل یک قابلیت UEFI به نام Secure Boot است. Secure Boot از یک Trusted Platform Module (TPM) استفاده میکند تا ارزشیابی رمزنگاری هر قسمت از سفتافزار یا نرمفزار را در طی فرآیند Boot انجام دهد. این تکنیک اندازهگیری اجزای ثابت و اولیه Boot UEFI با نام Static Root of Trust for Measurement یا SRTM شناخته شده است. از آنجایی که هزاران Vendor کامپیوتر وجود دارند و مدلهای بسیاری را با نسخههای مختلف UEFI BIOS تولید میکنند، تعداد زیادی از ارزیابیهای SRTM در Startup وجود خواهند داشت. دو تکنیک برای ایجاد اطمینان در اینجا قابل استفاده است: یا یک لیست از ارزیابیهای بد SRTM ایجاد کنید (لیست غیرمجاز)، یا یک لیست از ارزیابیهای خوب SRTM (لیست مجاز). هر گزینه نقطه ضعف خود را دارد:
- لیست ارزیابیهای بد SRTM به هکر این امکان را میدهد تا تنها با تغییر 1 Bit در اجزا، یک SRTM Hash کاملا جدید که نیاز به لیست کردن دارد ایجاد کند. این بدان معناست که جریان SRTM بطور ذاتی شکننده است. یک تغییر اساسی کوچک باعث غیرمجاز شدن زنجیره اطمینان میگردد.
- لیست ارزیابیهای خوب SRTM نیازمند اضافه کردن محتاطانه ترکیبات جدید BIOS/PC است که میتواند امر زمانبری باشد. به علاوه، اصلاح Bug در کد UEFI ممکن است زمان زیادی برای طراحی، ساخت، ارزشیابی، تصدیق و پیادهسازی دوباره نیاز داشته باشد.
از آنجایی که Windows به امن بودن، قابل اطمینان بودن و اصلاح نشدن Hypervisor وابسته است تا تکنولوژیهای امنیتی بسیاری را اجرایی کند، مهم است تا آن را از هرگونه تهدید بنیادین که میتواند از این مشکلات حاصل شود محافظت کرد.System Guard Secure Launch در نسخه 1809 Windows 10 طراحی و معرفی شد تا به این نقاط ضعف رسیدگی کند.
استفاده از یک Root of Trust پویا برای بررسی یکپارچگی کد
Secure Launch اولین خط دفاعی در مقابل آسیبپذیریها و سواستفادههایی است که سعی در سودجویی از نقصهای Early-Boot را دارند. بخشهای سفتافزاری و زیرساختهای Silicon و Built-In به سیستمها اجازه میدهند تا با ارسال کد غیرقابل اطمینان و قابل سواستفاده به یک مسیر ارزیابی پیش از راهاندازی به یک حالت مطمئن، یه یک حالت مطمئن Boot شوند.
به منظور دستیابی به یک مرز امنیتی میان UEFI/ سفتافزار و کد بعدی OS، محیط Windows Boot به دو مرحله تقسیم شده است. مرحله اول با UEFI راهاندازی میشود و از سرویسهای Boot که برای Secure Launch غیرقابل اطمینان هستند استفاده میکند. مرحله دوم شامل بخش قابل اطمینان است که پس از رویداد DRTM، بدون سرویسهای سفتافزاری راهاندازی میشود. این مرحله قابل اطمینان با عنوان مرحله راهاندازی Trusted Computing Base (TCB) شناخته شده است. Trusted Computing Base شامل بخش سفتافزاری است با حوزه محدود و سختافزار لازم برای اجرای یک رویداد DRTM است. مرحلهای که با پشتیبانی سفتافزار همراه است از باینریهای قدیمی Boot یعنی Boot Manager و Winload استفاده میکند. در این مدل، Winload دیگر OS و ساختارهای دادههای آن را آماده نمیکند اما به گونهای عمل میکند که برای مرحله TCB محیط Boot، دادههای کافی را در حافظه آماده کند تا بتواند بدون سفتافزار فعالیت کند. این امر شامل بارگذاری تمامی باینریهای غیر منتظره و لازم برای OS در حافظه و همچنین راهاندازی سایر سفتافزارها یا اطلاعات ذخیرهشده در دیسک میباشد. تمامی دادهها، باینریها و ساختارهای ذخیرهای مرتبط پیش از استفاده توسط TCB اعتبارسنجی میشوند.
مرحله TCB محیط Boot توسط برنامه کاربردی جدید TCB Launch آغاز میگردد. این باینری با درخواستهای DRTM TPM اندازهگیری شده و زنجیره اطمینان را برای OS راهاندازی شده آغاز میکند. TCB Launch از امنیت سیستم اطمینان حاصل کرده و سپس با بارگذاری و اعتبارسنجی تمامی باینریها و ایجاد ساختارهای دادهای برای راهاندازی OS، OS را برای اقدامات اجرایی آماده میکند.
با وجود اینکه تمامی دادههای OS توسط سفتافزار و Winload از دیسک ذخیره شده، مرحله TCB تمامی Signatureها و یکپارچگی کدها را پیش از استفاده اعتبارسنجی میکند. TCB Launch بطور مستقیم توسط این مرحله مورد بررسی یکپارچگی کد قرار نگرفته اما اندازه گیری Root of Trust که توسط رویداد DRTM ارائه شده به منظور تصدیق اعتبار و صحت باینری استفاده میگردد. برای تداوم امنیت مرحله TCB، موارد زیر باید توسط رویداد DRTM و TCB Launch تصدیق شوند:
- محافظت مداوم در مقابل Direct Memory Access (DMT) در TCB Launch و حافظه OS
- متناسب بودن توضیحات سختافزاری RAM
- توضیحات سختافزاری امنیتی حیاتی باید اعتبارسنجی شوند، مانند ساختارهای IOMMU
- حافظه به محض وقفه غیرمنتظره TCB پاک میشود
پس از راهاندازی TCB Launch، کنترل محیط DRTM و کنترلهای مرتبط به Hypervisor منتقل میشوند. سپس Hypervisor مسئول مدیریت کردن محافظت DMA، محافظتهای پاک کردن حافظه و سایر کنترلهای مرتبط با DRTM است.
DRTM به پلتفرم امکان کاهش حملاتی را که قصد تغییر Hypervisor یا اجرای سایر اقدامات مخرب را در طی Boot/Hibernate دارند میدهد. PCILeech یک ابزار رایج برای خواندن و نوشتن به سبک DMA در PCIe است و بطور مکرر از سوی مهاجمان مورد استفاده قرار میگیرد. درحالی که محافظتهای Kernel DMA (همچنین با عنوان Memory Access Protection نیز شناخته شده است) به ما کمک میکنند تا مطمئن شویم که موارد جانبی مخرب و احرازهویت نشده نمیتوانند به حافظه دسترسی داشته باشند، حتی اگر مهاجم در Early-Boot مستقر شود، سفتافزار Pre-DRTM و رویداد DRTM محیط Windows را از چنین سواستفادههایی مصون میدارد.