APIC/EPIC! تراشه‌های اینتل رازهایی را فاش می‌کنند که حتی هسته نیز نباید آنها را ببیند… هوش داده‌های پلاتوبلاک چین. جستجوی عمودی Ai.

APIC/EPIC! اسرار تراشه‌های اینتل درز می‌کند که حتی هسته‌ای که نباید آن را ببیند…

در اینجا BWAIN این هفته، اصطلاح شوخی ما برای a است اشکال با نام چشمگیر.

BWAIN افتخاری است که وقتی یک نقص جدید امنیت سایبری نه تنها جالب و مهم است، بلکه با لوگو، نام دامنه و وب‌سایت خود نیز ظاهر می‌شود، به آن دست می‌دهیم.

این یکی دوبله شده نشت ÆPIC، جناس بر کلمات APIC و EPIC.

اولی کوتاه شده است کنترل کننده وقفه قابل برنامه ریزی پیشرفته، و دومی به سادگی کلمه "حماسه" است، همانطور که در غول, عظیم, مفرط, مگا, همزن.

حرف Æ از زمان ساکسون ها در زبان انگلیسی نوشتاری استفاده نشده است. نامش هست æsc، تلفظ شده خاکستر (مانند درخت)، و تقریباً صدای A in را در کلمه مدرن ASH نشان می دهد. اما ما فرض می کنیم که شما قرار است این کلمه را تلفظ کنید ÆPIC در اینجا یا به عنوان "APIC-slash-EPIC"، یا به عنوان "ah!-eh?-PIC".

همه اینا ها برای چی است؟

همه اینها پنج سوال جذاب را ایجاد می کند:

  • APIC چیست؟، و چرا به آن نیاز دارم؟
  • چگونه می توانید داده هایی داشته باشید که حتی هسته نمی توانی نگاه کنی؟
  • چه چیزی باعث این شکست حماسی می شود در APIC؟
  • آیا نشت ÆPIC روی من تاثیر بگذارد?
  • چه کاری انجام دهید در مورد آن؟

APIC چیست؟

اجازه دهید به سال 1981 برگردیم، زمانی که رایانه شخصی IBM برای اولین بار ظاهر شد.

رایانه شخصی دارای تراشه ای به نام the کنترل کننده وقفه قابل برنامه ریزی Intel 8259A، یا PIC. (مدل های بعدی، از PC AT به بعد، دارای دو PIC بودند که به هم زنجیر شده بودند تا از رویدادهای وقفه بیشتری پشتیبانی کنند.)

هدف از PIC به معنای واقعی کلمه این بود که برنامه در حال اجرا بر روی پردازنده مرکزی رایانه شخصی (CPU) را هر زمان که اتفاق مهمی رخ می‌داد و نیاز به توجه فوری داشت، قطع شود.

این وقفه های سخت افزاری شامل رویدادهایی مانند: ضربه زدن به صفحه کلید. پورت سریال دریافت کاراکتر؛ و یک تایمر سخت افزاری که تکرار می شود.

بدون سیستم وقفه سخت‌افزاری از این نوع، سیستم عامل باید مملو از فراخوانی‌های عملکردی باشد تا به طور منظم ضربه‌های کلید ورودی را بررسی کند، که وقتی کسی تایپ نمی‌کند، اتلاف قدرت CPU خواهد بود، اما پاسخگو نخواهد بود. به اندازه کافی زمانی که آنها انجام دادند.

همانطور که می توانید تصور کنید، PIC به زودی توسط یک تراشه ارتقا یافته به نام the دنبال شد APIC، پیشرفته نوعی PIC که در خود CPU تعبیه شده است.

این روزها، APIC ها بسیار بیشتر از بازخورد از صفحه کلید، پورت سریال و تایمر سیستم ارائه می دهند.

رویدادهای APIC توسط رویدادهایی مانند گرمای بیش از حد (و ارائه داده‌های بی‌درنگ درباره) ایجاد می‌شوند و امکان تعامل سخت‌افزاری بین هسته‌های مختلف در پردازنده‌های چند هسته‌ای معاصر را فراهم می‌کنند.

و تراشه های امروزی اینتل، اگر بخواهیم بسیار ساده تر بگوییم، می توانند به طور کلی پیکربندی شوند تا به دو روش مختلف کار کنند، به نام حالت xAPIC و حالت x2APIC.

در اینجا، xAPIC روش "میراث" برای استخراج داده ها از کنترل کننده وقفه است، و x2APIC روش مدرن تر است

با ساده‌تر کردن بیشتر، xAPIC به چیزی که نامیده می‌شود متکی است MMIO، کوتاه برای ورودی/خروجی با نقشه حافظه، برای خواندن داده های خارج از APIC هنگامی که یک رویداد مورد علاقه را ثبت می کند.

در حالت MMIO، می‌توانید با خواندن از ناحیه خاصی از حافظه (RAM)، که رجیسترهای ورودی/خروجی خود تراشه APIC را منعکس می‌کند، دریابید که چه چیزی باعث یک رویداد APIC شده است.

این داده های xAPIC در یک بلوک حافظه 4096 بایتی در جایی از RAM فیزیکی رایانه نگاشت می شوند.

این امر دسترسی به داده ها را ساده می کند، اما به یک تعامل آزاردهنده، پیچیده (و همانطور که خواهیم دید، بالقوه خطرناک) بین تراشه APIC و حافظه سیستم نیاز دارد.

در مقابل، x2APIC به شما نیاز دارد داده های APIC را مستقیماً بخوانید از خود تراشه، با استفاده از آنچه به عنوان شناخته شده است رجیسترهای خاص مدل (MSR).

به گفته اینتل، اجتناب از بخش MMIO از فرآیند "آدرس پذیری پردازنده و برخی پیشرفت ها در تحویل وقفه به طور قابل توجهی افزایش یافته است."

قابل ذکر است، استخراج داده‌های APIC مستقیماً از رجیسترهای روی تراشه به این معنی است که کل داده‌های پشتیبانی شده و حداکثر تعداد هسته‌های CPU که می‌توان همزمان مدیریت کرد، به 4096 بایت موجود در حالت MMIO محدود نمی‌شود.

چگونه می توانید داده هایی داشته باشید که حتی هسته نتواند به آنها نگاه کند؟

احتمالاً قبلاً حدس زده‌اید که داده‌هایی که هنگام استفاده از حالت xAPIC در قسمت حافظه MMIO قرار می‌گیرند همیشه آنطور که باید با دقت مدیریت نمی‌شوند…

... و بنابراین نوعی "نشت داده" در آن منطقه MMIO قلب این مشکل است.

اما با توجه به اینکه شما در حال حاضر به قدرت های سطح sysadmin نیاز دارید برای خواندن داده های MMIO در وهله اول، و بنابراین تقریباً مطمئناً می توانید تمام داده های موجود در حافظه را به هر حال دریافت کنید…

...چرا نمایش داده های افراد دیگر به اشتباه در ناحیه داده APIC MMIO نشان دهنده یک است حماسه نشت؟

ممکن است برخی از انواع حملات سرقت داده یا خراش دادن حافظه RAM را در عمل کمی آسان‌تر کند، اما مطمئناً توانایی بیشتری برای ردیابی حافظه که قبلاً در تئوری داشتید، به شما نمی‌دهد؟

متأسفانه، اگر هر نرم افزاری در سیستم از SGX اینتل استفاده کند، این فرض درست نیست. برنامه های افزودنی محافظ نرم افزار.


درباره SGX بیشتر بیاموزید


SGX توسط بسیاری از CPUهای اخیر اینتل پشتیبانی می‌شود و راهی را برای هسته سیستم عامل فراهم می‌کند تا تکه‌ای از کد و داده را در یک بلوک فیزیکی از RAM مهر و موم کند تا چیزی را که به عنوان یک Enclave شناخته می‌شود، تشکیل دهد.

این باعث می‌شود که حداقل به‌طور موقت، مانند تراشه‌های امنیتی ویژه تلفن‌های همراه که برای ذخیره اسرار مانند کلیدهای رمزگشایی استفاده می‌شوند، رفتار کند.

هنگامی که "قفل" SGX محصور تنظیم شد، فقط کد برنامه ای که در داخل ناحیه محفظه حافظه اجرا می شود می تواند محتویات آن RAM را بخواند و بنویسد.

در نتیجه، جزئیات داخلی هر محاسباتی که پس از فعال‌سازی enclave اتفاق می‌افتد برای هر کد، رشته، فرآیند یا کاربر دیگری در سیستم نامرئی است.

از جمله خود هسته.

راهی برای فراخوانی کدهای مهر و موم شده به داخل محفظه وجود دارد، و راهی برای بازگرداندن خروجی محاسباتی که ممکن است انجام دهد، وجود دارد، اما راهی برای بازیابی، جاسوسی، یا اشکال زدایی کدها وجود ندارد. داده های مرتبط با آن در حالی که اجرا می شود.

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

همانطور که می‌توانید تصور کنید، اگر داده‌هایی که قرار است در داخل یک SGX محصور شوند، به‌طور تصادفی در رم MMIO کپی شوند که برای «آینه‌سازی» داده‌های APIC هنگام استفاده از حالت xAPIC «نقشه‌برداری حافظه» استفاده می‌شود…

... که امنیت SGX را نقض می کند، که می گوید هیچ داده ای نباید از یک SGX پس از ایجاد آن بیرون بیاید، مگر اینکه عمداً توسط کدی که قبلاً در داخل خود آنکلاو اجرا می شود صادر شده باشد.

علت این شکست حماسی در APIC چیست؟

محققین پشت ÆPIC نشت کاغذ متوجه شد که با ترتیب خواندن داده‌های APIC از طریق یک توالی حیله‌گر و غیرعادی از دسترسی‌های حافظه…

آنها می توانند پردازنده را فریب دهند تا فضای APIC MMIO را نه تنها با داده های تازه دریافت شده از خود APIC، بلکه با داده هایی که اخیراً توسط CPU برای اهداف دیگری استفاده شده است، پر کند.

این رفتار یک عارضه جانبی از این واقعیت است که اگرچه صفحه حافظه APIC MMIO 4096 بایت است، تراشه APIC در حالت xAPIC در واقع 4096 بایت داده تولید نمی کند و CPU همیشه به درستی خنثی نمی شود. ابتدا قسمت های استفاده نشده ناحیه MMIO را با صفر پر کنید.

در عوض، داده های قدیمی باقی مانده در حافظه پنهان CPU به همراه داده های جدید دریافت شده از خود تراشه APIC نوشته می شد.

همانطور که محققان بیان کردند، این اشکال به چیزی که به عنوان یک شناخته می شود خلاصه می شود خواندن حافظه بدون مقدار اولیه، جایی که شما به طور تصادفی از داده های باقی مانده شخص دیگری در RAM مجددا استفاده می کنید زیرا نه او و نه شما ابتدا آن را از اسرار قبلی آن پاک نکردید.

آیا نشت ÆPIC بر من تأثیر می گذارد؟

برای لیست کامل تراشه های تحت تأثیر، نگاه کنید مشاوره خود اینتل.

تا آنجا که ما می توانیم بگوییم، اگر شما یک پردازنده نسل دهم یا یازدهم اینتل دارید، احتمالاً تحت تأثیر قرار گرفته اید.

اما اگر یک CPU نسل دوازدهم کاملاً جدید دارید (جدیدترین در زمان نوشتن)، به نظر می رسد که فقط تراشه های کلاس سرور تحت تأثیر قرار می گیرند.

از قضا، در تراشه‌های لپ‌تاپ نسل دوازدهم، اینتل از SGX چشم پوشی کرده است، بنابراین این باگ اعمال نمی‌شود، زیرا غیرممکن است که هر یک از محفظه‌های SGX "مهر شده" وجود داشته باشد که نشت کند.

البته، حتی بر روی یک تراشه بالقوه آسیب پذیر، اگر به نرم افزاری که از SGX استفاده می کند متکی نیستید، باگ نیز اعمال نمی شود.

و اشکال، دوبله CVE-2022-21233، فقط می تواند توسط مهاجمی مورد سوء استفاده قرار گیرد که از قبل دسترسی محلی، سطح مدیریت (ریشه) به رایانه شما دارد.

کاربران معمولی نمی‌توان به بلوک داده APIC MMIO دسترسی پیدا کرد، و بنابراین هیچ راهی برای بررسی چیزی در آن وجود ندارد، چه رسد به داده‌های سری که ممکن است از یک SGX به بیرون درز کرده باشد.

بنابراین، ماشین های مجازی مهمان (VMs) که تحت کنترل یک سیستم عامل میزبان در Hypervisor مانند HyperV، VMWare یا VirtualBox اجرا می شوند تقریباً مطمئناً نمی توانند از این ترفند برای غارت اسرار سایر مهمانان یا خود میزبان استفاده کنند.

دلیلش این است که ماشین های مجازی مهمان معمولاً به مدارهای APIC واقعی در پردازنده میزبان دسترسی ندارند. در عوض، هر مهمان APIC شبیه سازی شده خود را دریافت می کند که منحصر به فرد VM است.

چه کاری انجام دهید؟

وحشت نکنید

در لپ تاپ یا رایانه رومیزی، ممکن است اصلاً در معرض خطر نباشید، یا به این دلیل که یک رایانه قدیمی (یا خوش شانس شما، یک رایانه کاملاً جدید!) دارید، یا به این دلیل که به هر حال به SGX متکی نیستید.

و حتی اگر در معرض خطر هستید، هر کسی که به عنوان ادمین/روت وارد لپ‌تاپ شما می‌شود، احتمالاً قدرت کافی برای ایجاد دنیایی دردسر برای شما دارد.

اگر سرورهای آسیب پذیری دارید و به عنوان بخشی از امنیت عملیاتی خود به SGX متکی هستید، توصیه امنیتی اینتل را بررسی کنید. INTEL-SA-00657 برای اطلاعات حفاظت و کاهش

به گفته محققانی که این را نوشته اند، «اینتل [برای رفع این مشکل، به‌روزرسانی‌های میکروکد و کیت توسعه نرم‌افزار SGX را منتشر کرده است».

تیم هسته لینوکس همچنین به نظر می رسد در حال حاضر روی یک وصله کار می کند که به شما امکان می دهد سیستم خود را به گونه ای پیکربندی کنید که همیشه از x2APIC استفاده کند (که همانطور که قبلاً به یاد دارید، داده های APIC را از طریق حافظه مشترک منتقل نمی کند). و به خوبی از بازگرداندن سیستم به حالت xAPIC پس از راه اندازی جلوگیری می کند.


تمبر زمان:

بیشتر از امنیت برهنه