هک و جیلبریک نینتندو سوییچ ۲؛ بررسی فنی یک آسیبپذیری — Jailbreaking the Switch 2
خلاصه
مقاله پیش رو به بررسی اولین جیلبریک نرمافزاری برای کنسول نینتندو سوییچ ۲ میپردازد. این هک با ترکیب آسیبپذیریهای مفسر SmileBASIC و ماژول فایلسیستم انجام شده و به توسعهدهندگان اجازه اجرای کد دلخواه و دور زدن لایههای امنیتی را میدهد.
مقدمه و زمینه
امنیت کنسولهای بازی همیشه یکی از چالشبرانگیزترین حوزهها برای مهندسان معکوس و پژوهشگران امنیت بوده است. با عرضه نینتندو سوییچ ۲، جامعه امنیتی چشمانتظار کشف راههایی برای دسترسی به لایههای سیستمی آن بود. این پروژه یک جیلبریک نرمافزاری تِتِرد (Tethered) را برای سوییچ ۲ مستند میکند که اجازه اجرای کد بومی (Native) را به عنوان ماژولهای سیستمی معمولی و داخلی (sysmodule) فراهم میسازد. این دسترسی به مهندسان اجازه میدهد کدهای هومبرو (Homebrew) را اجرا کنند، بازیها را ماد کنند، از فایلهای ذخیره پشتیبان بگیرند و از طریق MMIO به سختافزار دسترسی پیدا کنند.
زنجیره اکسپلویت و چالشهای امنیتی
تلاش اولیه برای اجرای کد از طریق مرورگر و WebKit به دلیل مکانیزمهای دفاعی مدرن نظیر حافظه فقط-اجرایی (XOM)، اشارهگرهای امضاشده (PAC) و بررسیکنندههای نوع جریان کنترل (CFI) با موانع جدی روبهرو شد. با وجود دسترسی خواندن و نوشتن حافظه (Arbitrary RW)، عبور از این لایهها در بستر مرورگر کار بسیار دشواری است.
برای دور زدن این محدودیتها، پژوهشگران به سراغ بازیهای نسل قبل یعنی عناوین نینتندو سوییچ ۱ رفتند؛ زیرا این بازیها فاقد مکانیزمهای سختافزاری پیشرفتهای مانند PAC هستند و ریشه اعتماد (Root of Trust) آنها از قبل شناخته شده است. بازی SmileBASIC که یک مفسر بزرگ C++ است، هدف مناسبی تشخیص داده شد.
جزئیات فنی آسیبپذیری SmileBASIC
با تحلیل مفسر، یک سرریز عدد صحیح ۳۲ بیتی (Integer Overflow) در زمان حذف عناصر از آرایهها کشف شد:
- در زمان حذف عناصر، محاسبه موقعیت و تعداد (position + count) میتواند سرریز کند و منفی شود.
- تابع
memmoveبا محاسبه اشتباه، بایتهای قبل از آرایه را کپی میکند. - از آنجا که ۸ بایت قبل از هر آرایه در این مفسر حاوی یک اشارهگر به خود آرایه است، این عملیات منجر به دستکاری طول رشته و فراهم شدن قابلیت خواندن و نوشتن خارج از محدوده (Out-of-Bounds RW) میشود.
با این دسترسی خواندن و نوشتن، امکان دستکاری اتصال ابزارها و ارتقای سطح دسترسی به سیستمعامل فراهم شد.
سوءاستفاده از ماژول فایلسیستم (fs)
ماژول فایلسیستم داخلی (fs) مسئول سرویسدهی و بارگذاری کدهای رمزگشاییشده است. بررسیها نشان داد که در فرمانهای مربوط به نرمالسازی مسیر (Path Normalization)، یک بافر موقت دچار سرریز میشود:
- مسیرهای حاوی کاراکترهای والد و اسلش معکوس مثل
/..\موجب تخصیص یک بافر حافظه کوچک میشوند. - با سرریز کردن این بافر روی شیء
BufferedStorage، میتوان خواندن و نوشتن دلخواه را روی حافظه پیادهسازی کرد. - با تغییر شناسسه فرآیند (PID) به یک، سطح دسترسی به
FullPermissionارتقا مییابد که اجازه دامپ کردن حافظه داخلی و کدهای سیستمی را میدهد.
اجرای کد بومی در ماژولهای سیستمی
برای اجرای کد بومی، هدف ماژول ro (بارگذار برنامهها) بود. بازیها و ماژولها به صورت بستههای NCA توزیع میشوند که شامل متادیتای main.npdm و فایل اجرایی هستند. سیستم امنیتی چکهای امضای رمزنگاری را انجام میدهد تا از صحت فایلها مطمئن شود.
با داشتن دسترسی خواندن و نوشتن دلخواه (ARW)، میتوان شیء فایلسیستم اصلی را با یک فایلسیستم موقت جایگزین کرد که همان متادیتا را دارد اما کد اجرایی آن سفارشی است:
- تعویض ورودی جدول دامنه برای لودر با فایلسیستم ساختگی.
- کنترل پیامهای IPC با دستکاری رویدادها تا ماژول
fsدرخواستها را در زمان دلخواه پردازش کند.
با استفاده از این روش، امکان اجرای کد بومی با مجوزهای ماژولهای سیستمی و تغییر حافظه کدهای موجود از طریق دستورات کرنل فراهم شد.
دیدگاه جامعه مهندسی (هکر نیوز)
در بحثهای پیرامون این پروژه در هکر نیوز، توسعهدهندگان علاوه بر ابعاد امنیتی هک، به پیشرفت جذاب ابزارهای مدرن اتوماسیون اشاره کردند. استفاده از سختافزارهایی نظیر JetKVM برای ارسال ورودی و تصویر، کنترلرها و کلیدهای نوری هوشمند متصل به بلوتوث برای ریستارت کردن خودکار سختافزار پس از کرش، نشاندهنده ابعاد نوین و مهندسیشده در اتوماسیون تست و تحقیق سختافزاری است.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل