شرکت اینتل برای 16 سال در تراشه هایش نقص امنیتی بسیار جالبی داشته است. در ادامه با روش بهره بردن از آن آشنا می شوید. در تراشه های قدیمی اینتل نقص امنیتی وجود دارد که هکر ها می توانند با استفاده از آن کنترل کامپیوتر ما را در دست بگیرند، بدون آن که متوجه شویم. گرچه این مشکل حل شده است ولی هنوز شکاف امنیتی در کار اینتل را نشان می دهد.
یک نقص در طراحی پردازنده های اینتل که می توان از آن برای نصب بدافزار در زیر سیستم عامل ها و ویروس یاب ها از آن سو استفاده شود یافته شده که شناسایی و حذف آن بسیار دشوار است.
کریستوفر دوماس یک محقق امنیتی که این باگ سخت افزاری را کشف کرده است گفت: " البته این یک راه حل فراموش شده برای یک مشکل فراموش شده است، اما ضعف شگفت انگیزی را نشان می دهد."
این نقص در سال 1995 در Pentium Pro معرفی شد، که به یک سیلیکون مرتبط است و نگاه کنجکاو برنامه نویسان در سطح هسته ای را برای سال هابه خود داشته است.
این ضعف به هکرهای باهوش اجازه می دهد که کد های روت کیت را در سطوح خیلی پایینی روی کامپیوتر، خارج از دسترس سیستم عامل، اپلیکیشن های آن، و حتی هایپرویژن قرار دهند. و این به آن معناست که روت کیت می تواند، در بین دیگر چیزها، به صورت مخفیانه هر ضربه بر صفحه کلید، موس و دانلود ها را نظارت و ضبط کند.
تلاش ها برای شناسایی روت کیت و نابود کردن آن در کامپیوتر توسط خود بدافزار می تواند مسدود و یا از آن جلوگیری شود، که به بیان دیگر یک کابوس است.
خبر خوب این است که اینتل این اشکال را در بلوپرینت پردازنده خود قرار داده است، و این مشکل را تصحیح کرده است: تراشه هایی که در سال ماه ژانویه 2011 و پس از آن ساخته شده اند (CPU های Sandy Bridge Core و پس از آن) این مشکل را ندارند.
دوماس برآورد کرده است که صدها میلیون پردازنده اینتل به صورت همیشگی آسیب پذیر می باشند، که قابل به روز رسانی برای حل این مشکل نیستند.
یک بسته لینوکس که دهه قبل که هنوز کار می کند، یک شرکت با کامپیوترهای قدیمی و یا یک لپ تاپ قدیمی از انواع کامپیوترهایی هستند که در خطر حمله از طریق این ضعف می باشند. کامپیوتر بازی شیک جدیدتان ، ماشین مجازیتان در cloud و یا workstation و یا کامپیوتری که دو سال پیش برای محل کارتان خریده اید مصون می باشند.
این ضعف طراحی بسیار جالب است. گرچه تراشه هایی که امروزه ساخته می شوند این گاف مهندسی را ندارند، اما باید درس هایی گرفته شود. اساسا، اجرای کد دلخواه در حالت مدیریت سیستم قدرت مند و قفل شده پردازش گر ، با سو استفاده از ویژگی تاریک CPU امکان پذیر است . در قسمت زیر توضیح می دهیم آنچه گفتیم به چه معناست.
لایه! کامپیوترها لایه دارند
پردازنده های سازگار با اینتل نرم افزار را به آنچه حلقه های ایمنی، یا حلقه های محافظتی نامیده می شوند تقسیم می کند. حلقه های زیرین به حلقه های بالایی می پردازند و آن ها را کنترل می کنند، و حلقه های بالایی امکان دخالت در حلقه های زیرین را ندارند.
اپلیکیشن های معمولی در بالاترین حلقه بدون ایمنی معروف به حلقه شماره 3 اجرا می شوند، و نمی توانند به طور مستقیم سیستم زمینه را تحت تاثیر قرار دهد. حلقه 1 و 2 را فراموش کنید، عملا کسی از آن ها استفاده نمی کند.
سیستم عامل شما در حلقه 0 اجرا می شود. اپلیکیشن ها در حلقه 3 نمی توانند با سیستم عامل مداخله داشته باشند چرا که سیستم عامل در حلقه 0 محافظت می شود.
یک حلقه 1- نیز وجود دارد، که جایی است که هایپرویژن در آنقرار دارد، البته اگر از آن استفاده می کنید. هایپرویژن از یک یا چند سیستم عامل که در حلقه 0 وجود دارند محافظت می کند. هایپرویژن که در حلقه 1- وجود دارد، از سیستم عامل ها که در حلقه 0 اجرا می شوند مصون است. که باعث می شود که یک سیستم عامل مهمان نتواند کنترل یک دستگاه میزبان را در دست بگیرد.
سرایدار مخفی ترسناک کامپیوتر شما
در نهایت، در زیر همه این ها، حلقه 2- وجود دارد، که شامل نرم افزار حالت مدیریت سیستم اینتل (SMM) می شود. این حلقه از حلقه های دیگر غیر قابل دسترسی می باشد، و با سفت افزار مادربورد ، پیش از آن که هر سیستم عامل دیگر یا هایپرویژن شروع شود، بارگیری شده است. SMM به صورت مخفی از حلقه های دیگر کار می کند و مانند یک سرایدار مخفی ترسناک است که کارهای کوچک پیش زمینه ای را انجام می دهد و باعث می شود که سخت افزار به آرامی کار کند، بدون این که حلقه های دیگر متوجه شوند.
برای مثال، کد SMMنیروی مادربورد را هنگامی که کاربر می خواهد کامپیوتر خود را در حالت خواب قرار دهد یا آن را دوباره روشن کند کنترل کرده، از یک صفحه کلید PS/2 هنگامی که فقط یک USB one متصل است تقلید می کند. و به طول کامل خطاهای یک ست تراشه را رفع می کند. به بیان دیگر، اگر یک سیستم عامل یا هایپرویژن قصد داشته باشد که به سخت افزار مادربورد باگ دار دسترسی بیابد، SMM درخواست را رد می کند و کاری می کند که همه چیز در نرم افزار آنطور که انتظار می رود پیش رود.
همه این اتفاقات برای دیگر حلقه ها نیز اتفاق می افتد: کد اجرا شده در SMM برای دیگر اجزای کامپیوتر به صورت مخفی است و کنترل کامل روی سخت افزار و سفت افزار دارد که ادمین اصلی سیستم کامپیوتر شماست. کنترل کردن این سرایدار، به معنی کنترل کردن همه چیز است.
این سرایدار کجا کار و زندگی می کند؟
کد SMM یک تکه کوچک از RAM کامپیوترتان را برای ذخیره سازی متغیرها و دیگر داده های مخفی اش رزرو می کند و دیگر حلقه ها از طرف سخت افزار مادربورد اجازه دسترسی به آن را ندارند. این تکه کوچک درx1FF80000 0 یا چیزی بین MB 511 و MB 512 از RAM شما را درگیر می کند. هر تلاشی برای دسترسی به آن قسمت از حافظه از طریق نرم افزار خارج از SMM توسط مرکز کنترل حافظه روی مادربورد مصدود می شود.
همه اشکالات کجا پیش می آید؟
در سال 1999، اینتل کنترل گر بازدارنده قابل برنامه نویسی پیشرفته (APIC) خود را معرفی کرد، که همانطور که اسمش بیان می کند بازدارنده هایی را که در یک پردازنده به وجود می آید مدیریت می کند. وقفه ها پالس های الکتریکی هستند که توسط سخت افزار تولید می شوند تا CPU را وادار کنند کاری که می کند را متوقف کند و در عوض این کار اضطراری را انجام دهد، که می تواند شمارش معکوس یک تایمر باشد که به 0 رسیده است، و یا یک درایو سخت در حال پایان انتقال یک داده است و غیره. در بیشتر مواقع گرداننده دستگاه پیش از این که CPU به کار قبلی خود برگردد به آن وقفه می پردازد.
APIC یک طرح چند قسمتی است. یک APIC محلی برای هر هسته پردازنده ، و معمولا یک IO APICروی مادر بورد وجود دارد. IO APIC به سخت افزار متصل می شود، و سیگنال های بازدارنده را درAPIC های محلی طی می کند، و تصمیم می گیرد که هسته خود را درگیر کند یا خیر و همچنین پیام ها را بین هسته ها منتقل می کند.
این APIC های محلی به عنوان تراشه های مجزا معرفی شده اند (82489DX) که با Pentium P54C در سال 1994 شروع شد.APIC های محلی در پردازنده اصلی ساخته شده است.APIC های محلی کنترل ها - متغیرهای درونی که نحوه کار را مشخص می کنند- را ثبت می کنند و در حافظه فیزیکی پردازنده قرار می گیرند که از xFEE00000 0 و xFEE01000 0 شروع می شود. این به آن معناست که نرم افزار سیستم عامل می تواند با یک APIC محلی هسته، در آن آدرس های حافظه ارتباط برقرار کند.
وقتی که Pentium Pro ( یک تراشه بزرگ P6) در سال 1995 منتشر شد، اینتل به برنامه نویسان در سطح هسته ای اجازه داد که APIC محلی را دوباره برنامه نویسی کنند تا در جایی دیگر در حافظه فیزیکی نمایش داده شود. که برای برداشتنAPIC محلی از سر راه نرم افزار در سطوح پایین که انتظار می رفت از آدرس xFEE00000 0 بالا برای چیزهای دیگر استفاده می کنند، بسیار کارآمد بود.
برای استفاده از ساختار wrmsr ، برنامه نویس سیستم عامل می تواند یک هسته پردازنده را برای انتقال APIC محلی در هرجای حافظه پیکربندی کند. فقط با نوشتن آدرس حافظه فیزیکی جدید رافهرست خاص مدل bx001 0 .
جایی در حافظه؟؟؟
بله جایی در حافظه فیزیکی. می توان گفت، جایی که کد SMM داده های خصوصی مخفی اش را ذخیره می کند.
با نقشه برداری از APIC محلی به x1FF80000 0 ، یا در این حوالی، با تکه RAM خصوصی SMM تداخل می یابد. حال هنگامی که SMM توسط یک بازدارنده خاص که SMI نامیده می شود وارد عمل می شود، CPU کاری را که در حال انجامش است را متوقف می کند و به SMM در حلقه 2- می پردازد و کد آن را اجرا می کند. در حال اجرا، CPU که کنترل کننده را متوقف می کند می خواهد که از داده خصوصی خود در حافظه استفاده کند- البته به تکه مخفی RAM خود دسترسی پیدا نخواهد کرد، و در عوض ازفهرست داخلی APIC محلی استفاده می کند. و می توانیم آن فهرست ها را کنترل کنیم می از آن ها استفاده کنیم تا داده های دستکاری شده را در SMM تغذیه کند تا آن را گول بزند.
کد SMM هیچ ایده ای ندارد که این اتفاق در حال افتادن است و به این واقعه بی اعتناست. در زیر این این اتفاق صورت گام به گام توضیح داده شده است.
1. این پردازنده است،APIC محلی طرح ریزی شده درxFEE00000 0 و داده های مخفی SMM در x1FF80000 0.
2. یک SMI وارد شده و پردازنده به SMM در حلقه 2- منتقل می شود، و از آدرس حافظه x1FF88000 0 شروع به خواندن می کند ، که در داخل فضای خصوصی RAM آن است...
... و ست تراشه اجازه دسترسی به خوانش را می دهد، در نتیجه کد SMM داده هایی را که می خواسته دریافت میکند. همه چیز آنطور که انتظار می رفت پیش می رود.
3. حال ساختار جادویی wrmsr به میدان می آید و APIC محلی را به x1FF88000 0 منتقل کرده، با محدوده خصوصی کد SMM تداخل میابد.
4. حال یک SMI را با ضربه زدن به یک فهرست سخت افزاری فعال می کنیم- در این مورد، با نوشتن صفر در درگاه IOx00b2 0
5. پردازنده به SMM تغییر می یابد و کد های آن را اجرا می کند. سعی می کند که از آدرس حافظه x1FF88000 0 بخواند که باید درون فضای خصوصی RAM اش باشد...
6. اما در عوض، از یک ثبت کنترل درون APIC شروع به خواندن می کند. ما کاری کردیم که داده ها را از جایی که ما می خواهیم بخوانند، به زودی قدرت با ماست.
تبدیل این حقه به چیزی که می توان از آن استفاده کرد
حال دیدیم که عملکرد آن چگونه است: کد SMM قدرتمند ، ادمین سیستم کامپیوتر شما، را وادار کنید که از حافظه ای که ما خیلی به آن توجه نمی کنیم بخواند و روی آن بنویسد. ثبت های پیکر بندی APIC محلی در همه جا حظور دارند: شکاف های بزرگی در نقشه حافظه وجود دارند، جایی که نمی توانیم اجزا را کنترل کنیم.
به طور موثر، هرچه که ما داریم KB4 از صفر هایی است که می توانیم به حافظه خصوصی کدهای SMM ضربه بزنیم. نوشتن روی آن بی فایده است. دوماس به آن گودال حافظه می گوید. این موقعیت نا امید کننده به نظر می رسد.
در نتیجه دوماس به کد SMM نمونه اینتل نگاهی انداخته ، که به فروشندگان سفت افزار ارائه شده است تا در مادربورد ها از آن استفاده کنند. معلوم شده که تقریبا همه فروشندگان از کد SMM الگو اینتل استفاده می کنند.
این کد الگو به یک ساختار داده بسیار مهم وابسته است ، اندازه و آدرس هرکدام در x1FF8A000 0 در حافظه ذخیره شده است: ساختاری که جدول توصیف جهانی (GDT) نامیده می شود. این جدول یک بازگشت به دهه 80 میلادی است.
هنگامی که کد SMM از یک وقفه SMI وارد می شود ، GDT را با دادن سایز و آدرس در x1FF8A000 0 GDT خود پر می کند. با قرار دادن گودال در جایی که کد SMM قرار است که نشانگر GDT خود را بخواند، پردازشگر صفر را می خواند. پیش از فعال کردن بازدارنده، مطمئن شوید که یک جدول از آنچه خودمان قرار داده ایم در آدرس صفر قرار داده شده است، و CPU ، GDT ما را در کد SMM بارگیری می کند.
پس از آن می توانیم این عمل را به جایی راحت تر در حافظه منتقل کنیم، در حالی که هنوز در حلقه 2- قرار داریم. اکنون در حال اجرای نمایش، و نه سرایدار مخفی هستیم. می توانیم روت کیت خود را به طور دائمی در سفت افزار نصب کنیم، در نتیجه حتی اگر درایوهای سخت پاک شوند و اپلیکیشن ها و سیستم عامل دوباره نصب شوند، هنوز می تواند دوباره احیا شود.
تعمیرات و کاهش ضرر ها
این مشکل در تراشه های اینتل که از سال 2011 به بعد ساخته شده رفع شده است، شما نمی توانید APIC محلی را در منطقه حفاظت شده SMM حرکت دهید. ماشین های مجازی، چه در cloud باشند و یا روی کامپیوتر روی میزی، ازاین ضعف نمی توانند استفاده کنند ( مگر این که مدیریت ماشین مجازی شما به شدت بدون ایمنی باشد و به سیستم عامل های مهمان اجازه دهد که سخت افزار اصلی را دوباره دوباره ترسیم کنند). تکنیک هایی مثل نظارت بر چرخه شمارشگر پردازنده ، می توانند برای روت کیت های مخفی به کار بیایند: چرخه های دزدیده شده توسط بدافزار های پنهانی در نرم افزار های اپلیکیشن خود را نشان می دهند.
شما باید یک روت و یا دسترسی در سطح اداره کننده به یک ماشین برای استفاده از این باگ تراشه ای داشته باشید؛ یک درایور مخرب یا یک برنامه که از یک ضعف در یک سیستم عامل بهره می برند ، می توانند از این ضعف سخت افزاری اینتل بهره ببرند .
البته دنیا به آخر نرسیده است ، اما این مشکلی است که مردم باید از آن آگاه شوند. همانطور که قبلا گفته شد، آنچه در معرض خطر است کامپیوتر های قدیمی درون شرکت ها، و یا سرور های Linuxpre-Sandy Bridge می باشد که عوض کردنشان برایتان خیلی سخت است.
دوماس در کنفرانس Black Hat گفت: " صدها میلیون کامپیوتر در دنیا وجود دارد که قابل تعمیر نیست." اینتل بسیار خوب عمل کرده است و به روز رسانی هایی را برای سفت افزار ها ارائه داده است، اما برای برخی سیستم ها، دیگر هیچ راه نجاتی وجود ندارد.
- منتشرشده در سخت افزارها