برنامه های متعددی که روی یک رایانه اجرا می شوند ممکن است نتوانند مستقیماً به اطلاعات پنهان یکدیگر دسترسی داشته باشند، اما از آنجایی که آنها سخت افزار حافظه یکسانی دارند، اسرار آنها می تواند توسط یک برنامه مخرب از طریق “حمله کانال جانبی زمان بندی حافظه” به سرقت رود.
این برنامه مخرب هنگام تلاش برای دسترسی به حافظه رایانه متوجه تاخیر می شود، زیرا سخت افزار بین همه برنامه هایی که از دستگاه استفاده می کنند به اشتراک گذاشته می شود. سپس میتواند این تأخیرها را برای به دست آوردن اسرار برنامه دیگری مانند رمز عبور یا کلید رمزنگاری تفسیر کند.
یکی از راههای جلوگیری از این نوع حملات این است که اجازه دهید تنها یک برنامه در هر زمان از کنترلر حافظه استفاده کند، اما این امر محاسبات را به طور چشمگیری کاهش میدهد. در عوض، تیمی از محققان MIT رویکرد جدیدی ابداع کردهاند که به اشتراکگذاری حافظه اجازه میدهد تا در عین امنیت قوی در برابر این نوع حملات کانال جانبی ادامه یابد. روش آنها می تواند در مقایسه با طرح های امنیتی پیشرفته 12 درصد سرعت برنامه ها را افزایش دهد.
به گفته محققان، علاوه بر ارائه امنیت بهتر و در عین حال محاسبات سریعتر، این تکنیک میتواند برای طیف وسیعی از حملات کانال جانبی مختلف که منابع محاسباتی مشترک را هدف قرار میدهند، اعمال شود.
“امروزه، اشتراک گذاری رایانه با دیگران بسیار رایج است، به خصوص اگر در حال انجام محاسبات در فضای ابری یا حتی در دستگاه تلفن همراه خود هستید. بسیاری از این اشتراک گذاری منابع در حال انجام است. از طریق این منابع مشترک، مهاجم می تواند به دنبال آن باشد. منجیا یان، نویسنده ارشد، استادیار مهندسی برق و علوم کامپیوتر (EECS) و یکی از اعضای آزمایشگاه علوم کامپیوتر و هوش مصنوعی (CSAIL) میگوید، حتی اطلاعات بسیار دقیق.
نویسندگان مشترک، دانشجویان فارغ التحصیل CSAIL، پیتر دویچ و یونگ یانگ هستند. نویسندگان دیگر شامل جوئل امر، استاد این عمل در EECS، و دانشجویان فارغ التحصیل CSAIL، توماس بورژات و ژول درین هستند. این تحقیق در کنفرانس بین المللی پشتیبانی معماری از زبان های برنامه نویسی و سیستم عامل ها ارائه خواهد شد.
متعهد به حافظه
می توان حافظه رایانه را به عنوان یک کتابخانه و کنترل کننده حافظه را به عنوان درب کتابخانه در نظر گرفت. یک برنامه برای بازیابی برخی از اطلاعات ذخیره شده باید به کتابخانه برود، به طوری که آن برنامه درب کتابخانه را برای ورود به داخل خیلی کوتاه باز می کند.
راه های مختلفی وجود دارد که یک برنامه مخرب می تواند از حافظه مشترک برای دسترسی به اطلاعات مخفی سوء استفاده کند. این کار بر روی یک حمله جدال متمرکز است، که در آن مهاجم باید لحظه دقیق عبور برنامه قربانی از درب کتابخانه را تعیین کند. مهاجم این کار را با تلاش برای استفاده همزمان از در انجام می دهد.
“مهاجم به کنترل کننده حافظه، درب کتابخانه ضربه می زند تا بگوید “الان مشغول است؟” اگر آنها به دلیل باز شدن درب کتابخانه مسدود شوند – زیرا برنامه قربانی از قبل از کنترل کننده حافظه استفاده می کند – با تاخیر مواجه می شوند. توجه به این تاخیر اطلاعاتی است که درز می کند.”
برای جلوگیری از حملات مجادله، محققان طرحی را ایجاد کردند که درخواست های حافظه یک برنامه را به یک الگوی از پیش تعریف شده «شکل می دهد» که مستقل از زمانی است که برنامه واقعاً نیاز به استفاده از کنترل کننده حافظه دارد. قبل از اینکه یک برنامه بتواند به کنترل کننده حافظه دسترسی پیدا کند و قبل از اینکه بتواند با درخواست حافظه برنامه دیگر تداخل داشته باشد، باید از یک “شکل دهنده درخواست” عبور کند که از ساختار گراف برای پردازش درخواست ها و ارسال آنها به کنترل کننده حافظه در یک زمان بندی ثابت استفاده می کند. این نوع نمودار به عنوان گراف غیر چرخه ای جهت دار (DAG) شناخته می شود و طرح امنیتی این تیم DAGguise نامیده می شود.
گول زدن مهاجم
با استفاده از آن زمانبندی سفت و سخت، گاهی DAGguise درخواست یک برنامه را تا دفعه بعدی که اجازه دسترسی به حافظه را دریافت می کند (طبق برنامه ثابت) به تعویق می اندازد، یا گاهی اوقات اگر برنامه در برنامه بعدی نیازی به دسترسی به حافظه نداشته باشد، درخواست جعلی ارسال می کند. فاصله زمانی
“گاهی اوقات برنامه برای رفتن به کتابخانه باید یک روز بیشتر صبر کند و گاهی اوقات زمانی که واقعاً نیازی به این کار نداشته باشد. اما با انجام این الگوی بسیار ساختاریافته، میتوانید آنچه را که واقعاً هستید از مهاجم پنهان کنید. این تاخیرها و این درخواست های جعلی چیزی است که امنیت را تضمین می کند.
DAGguise درخواست های دسترسی به حافظه برنامه را به صورت نمودار نشان می دهد، جایی که هر درخواست در یک “گره” ذخیره می شود و “لبه” هایی که گره ها را به هم متصل می کنند، وابستگی زمانی بین درخواست ها هستند. (درخواست A باید قبل از درخواست B تکمیل شود.) لبه های بین گره ها – زمان بین هر درخواست – ثابت هستند.
یک برنامه می تواند هر زمان که نیاز داشته باشد یک درخواست حافظه را به DAGguise ارسال کند و DAGguise زمان آن درخواست را تنظیم می کند تا همیشه امنیت را تضمین کند. مهم نیست که پردازش یک درخواست حافظه چقدر طول می کشد، مهاجم فقط می تواند ببیند که درخواست واقعاً چه زمانی به کنترل کننده ارسال می شود، که در یک برنامه زمان بندی ثابت اتفاق می افتد.
این ساختار نمودار کنترل کننده حافظه را قادر می سازد تا به صورت پویا به اشتراک گذاشته شود. DAGguise می تواند در صورتی که برنامه های زیادی در تلاش برای استفاده از حافظه به طور همزمان وجود داشته باشد و برنامه ثابت را بر اساس آن تنظیم کند، که استفاده کارآمدتر از سخت افزار حافظه مشترک را در عین حفظ امنیت ممکن می کند، سازگار شود.
تقویت عملکرد
محققان DAGguise را با شبیه سازی نحوه عملکرد آن در یک پیاده سازی واقعی آزمایش کردند. آنها دائماً سیگنالهایی را به کنترلکننده حافظه ارسال میکردند، به این ترتیب یک مهاجم سعی میکرد الگوهای دسترسی به حافظه برنامههای دیگر را تعیین کند. آنها رسماً تأیید کردند که با هر تلاش احتمالی، هیچ داده خصوصی درز نکرده است.
سپس از یک کامپیوتر شبیه سازی شده استفاده کردند تا ببینند که چگونه سیستم آنها می تواند عملکرد را در مقایسه با سایر رویکردهای امنیتی بهبود بخشد.
دویچ توضیح میدهد: “وقتی این ویژگیهای امنیتی را اضافه میکنید، در مقایسه با یک اجرای معمولی کاهش مییابد. برای این کار هزینه پرداخت میکنید.”
در حالی که روش آنها کندتر از اجرای ناامن پایه بود، در مقایسه با سایر طرح های امنیتی، DAGguise منجر به افزایش 12 درصدی در عملکرد شد.
با در دست داشتن این نتایج دلگرمکننده، محققان میخواهند رویکرد خود را در ساختارهای محاسباتی دیگری که بین برنامهها مشترک هستند، مانند شبکههای روی تراشه، اعمال کنند.. دویچ میگوید، آنها همچنین علاقهمند به استفاده از DAGguise برای تعیین کمیت نوع خاصی از حملات کانال جانبی هستند تا درک بهتری از عملکرد و معاوضههای امنیتی داشته باشند.
این کار تا حدی توسط بنیاد ملی علوم و دفتر تحقیقات علمی نیروی هوایی تامین شد.