نمایش عملی دسترسی روت در OpenBSD با زنجیره‌کردن یک باگ ۳۷ ساله حافظه مشترک

اخبار داغ فناوری اطلاعات و امنیت شبکه

اکسپلویتی که KARL و محافظت‌های سخت‌افزاری SMAP و SMEP را دور می‌زند؛ هر دو نقص پیش‌تر وصله شده‌اند

یک اکسپلویت افزایش سطح دسترسی محلی که تازه منتشر شده، با زنجیره‌کردن یک سرریز عدد صحیحِ حدود ۳۷ ساله و یک نقص جداگانه در هسته، به دسترسی روت روی OpenBSD 7.9 دست می‌یابد. این روش، سازوکار تصادفی‌سازی آدرس هسته در OpenBSD موسوم به KARL و همچنین محافظت‌های سخت‌افزاری SMAP و SMEP را دور می‌زند.

شرکت امنیتی Calif که این نقص‌ها را کشف و گزارش کرده، پس از آن‌که OpenBSD در ماه سپتامبر وصله‌های هر دو مشکل را منتشر کرد، یک تحلیل فنی مفصل و کد کامل اثبات مفهوم (PoC) را به‌صورت عمومی منتشر کرده است.


وضعیت وصله‌ها: هر دو نقص برطرف شده‌اند

هر دو وصله از طریق syspatch در دسترس هستند و تمام معماری‌ها را پوشش می‌دهند. نسخه OpenBSD 7.8 نیز وصله سرریز عدد صحیح را دریافت کرده است.

تا زمان انتشار خبر، هیچ شناسه CVE‌ای برای این دو نقص ثبت نشده و هیچ شواهدی دال بر استفاده از آن‌ها در حملات واقعی وجود ندارد.


ریشه مشکل: یک متغیر ۱۶ بیتی از سال ۱۹۸۸

نقطه آغاز زنجیره، شمارنده اتصال حافظه مشترک با نام shm_nattch است که به‌صورت یک short علامت‌دار ۱۶ بیتی با حداکثر مقدار ۳۲٬۷۶۷ تعریف شده است. این تعریف در سورس‌های اصلی BSD مربوط به سال ۱۹۸۸ وجود داشته؛ OpenBSD این نوع را به ارث برده و هرگز آن را بزرگ‌تر نکرده است.

نکته جالب‌توجه این است که همین سرریز، که «نقطه ورود» کل زنجیره است، در طبقه‌بندی رسمی صرفاً یک اصلاح قابلیت اطمینان به حساب آمده، نه امنیتی.

مراحل کلی زنجیره حمله

بر اساس توضیحات منتشرشده:


چرا KARL کافی نبود؟

پژوهشگر اندرو گریفیتس توضیح می‌دهد که KARL با پیوند مجدد (Relink) باینری هسته، هم آدرس توابع و هم آدرس داده‌ها را تصادفی می‌کند، اما تخصیص‌دهنده‌های حافظه هسته همچنان قطعی (Deterministic) باقی مانده‌اند.

هم تخصیص‌دهنده زمان راه‌اندازی و هم تخصیص‌دهنده Best-Fit، فاقد تصادفی‌سازی آدرس پایه هستند. در نتیجه ساختارهای اوایل راه‌اندازی — از جمله اشاره‌گرهای تابع در رابط‌های شبکه lo0 و enc0 — در راه‌اندازی‌های مجدد روی همان سخت‌افزار، در آدرس‌های یکسان قرار می‌گیرند. به همین دلیل، این اکسپلویت نیازی به هیچ آسیب‌پذیری افشای اطلاعات ندارد.


پیشنهادهای Calif برای تقویت امنیت

فراتر از دو وصله ذکرشده، Calif چهار دسته سخت‌سازی را پیشنهاد می‌کند:

Calif اعلام کرده این نقص‌ها را «در اوایل امسال» به OpenBSD گزارش داده است.


چرا این یافته اهمیت دارد؟

سه نکته در این گزارش برجسته است. نخست، عمر باگ: یک تعریف ساده نوع داده در سال ۱۹۸۸، بیش از سه دهه در یکی از امن‌ترین سیستم‌عامل‌های جهان باقی مانده است؛ سیستمی که به‌خاطر رویکرد امنیتی سخت‌گیرانه‌اش شهرت دارد. این موضوع نشان می‌دهد حتی پروژه‌های با بازبینی دقیق نیز می‌توانند ریشه‌های قدیمی و نادیده‌گرفته‌شده‌ای داشته باشند.

دوم، دور زدن چندلایه دفاع: با اینکه OpenBSD از KARL، SMAP و SMEP بهره می‌برد، زنجیره مذکور با تکیه بر قطعی بودن تخصیص‌دهنده‌های حافظه، همه آن‌ها را بدون نیاز به افشای اطلاعات دور می‌زند؛ یادآوری این‌که تصادفی‌سازی تنها یک لایه دفاعی است و به تنهایی کافی نیست.

سوم، طبقه‌بندی وصله‌ها: این‌که نقطه ورود کل زنجیره ابتدا فقط به‌عنوان «اصلاح قابلیت اطمینان» منتشر شد، پرسشی تازه درباره مرز میان باگ‌های امنیتی و غیرامنیتی در پروژه‌های بزرگ مطرح می‌کند؛ باگی که امروز بی‌ضرر به نظر می‌رسد، می‌تواند فردا حلقه‌ای از یک زنجیره بهره‌برداری باشد.


توصیه‌های امنیتی


جمع‌بندی

اکسپلویت منتشرشده توسط Calif نشان می‌دهد چگونه یک خطای ساده و قدیمی در اندازه یک متغیر — که بیش از سه دهه بدون تغییر مانده بود — می‌تواند با یک نقص مکمل در هسته ترکیب شود و حتی مجموعه دفاع‌های پیشرفته OpenBSD را دور بزند. خبر خوب این است که هر دو نقص پیش از انتشار عمومی جزئیات، وصله شده‌اند و هیچ شواهدی از بهره‌برداری واقعی وجود ندارد. با این حال، انتشار کد کامل اثبات مفهوم، فشار را بر مدیران سیستم برای اعمال سریع وصله‌ها افزایش می‌دهد؛ و پیشنهادهای سخت‌سازی Calif می‌تواند راهنمایی برای تقویت بلندمدت امنیت هسته در سیستم‌های مشابه باشد.

برچسب ها: KARL, SMAP, امنیت_اطلاعات, امنیت_سایبری, Cyberattack, cybersecurity, حمله سایبری, news

نوشته شده توسط تیم خبر.

چاپ