چه چیزی می تواند از رم (RAM) دزدیده شود و hiberfil.sys چه ارتباطی با آن دارد؟
اخیرا، توسعه دهندگان مدیریت رمز عبور KeePass یک آسیب پذیری را بستند که اجازه می داد رمز عبور اصلی (Master Password) از RAM بازیابی شود، جایی که به صورت Cleartext1 ذخیره شده بود. به همین ترتیب، بخش هایی از اطلاعات مهم دیگر، مانند پیام های اخیر یا داده های دیتابیس می توانند از حافظه برداشته شوند. توسعه دهندگان KeePass به سرعت یک راه حل غیر معمول برای این مشکل پیدا کردند، اما در اکثر برنامه های دیگر، رمزهای عبور همچنان در RAM به صورت Cleartext ذخیره می شوند که آن را به یک نقطه ضعف عمومی و گسترده در سیستم های امنیتی تبدیل می کند.
حمله حافظه عجیب و پیچیده به نظر می رسد، اما اگر مدیران نتوانند اقدامات ویژه حفاظتی را اتخاذ کنند، انجام یک حمله موفقیت آمیز برای افراد بد سایبری بسیار آسان است.
شخصی چگونه می تواند به حافظه کامپیوتر دسترسی پیدا کند؟مناطقی از RAM که توسط برنامه های مختلف استفاده می شود تا حد زیادی به وسیله سیستم عامل و هایپروایزر از یکدیگر جدا می شوند. بنابراین، خواندن بخشی از حافظه که برنامه دیگری در آن اجرا می شود، امکان پذیر نیست. با این حال، فرآیندهایی با امتیازات هسته (system در ویندوز، root در nix*) قادر به انجام این کار هستند. بیش از چند راه برای افزایش امتیازات (Privileges) به سطح مورد نیاز وجود دارد که آسیب پذیری ها در سیستم عامل یا درایورهای دستگاه رایج ترین آن هستند.
راه دیگری برای ورود به RAM از طریق حمله DMA است. حمله DMA مبتنی بر این واقعیت است که رابط های پرسرعت (USB 4.0 ،Thunderbolt ،Firewire و ...) دسترسی مستقیمی به حافظه برای تسریع فرآیندهای ورودی/خروجی (I/O) دارند. یک دستگاه مخصوص طراحی شده می تواند از این ویژگی برای خواندن هر قطعه از حافظه سوء استفاده کند. این یک تهدید فرضی نیست؛ موارد واقعی وجود داشته است (FinFireWire).
اما حتی بدون دستگاه های پیچیده و آسیب پذیری، هنوز هم حمله قابل انجام است! از آنجایی که سیستم عامل محتوای RAM را روی فایل ها می نویسد، اطلاعات موجود در آن به سادگی با خواندن فایل ها قابل دسترس است.
انواع مختلفی از این فایل ها در ویندوز وجود دارد:
- فایل های Temporary swap (pagefile.sys)
- فایل های Hibernation save (hiberfil.sys)
- فایل های خرابی و اشکال زدایی Memory Dumps (memory.dmp، minidump). چنین فایل هایی را می توان به صورت دستی تولید کرد.
در لینوکس، swap و hibernation از یک پارتیشن دیسک اختصاصی که برای این اهداف به اشتراک گذاشته شده است، استفاده می کنند.
دسترسی به یکی از این فایل ها معمولا مستلزم دسترسی فیزیکی به کامپیوتر است، اما نیازی به دانستن نام کاربری و رمز عبور یا حتی روشن کردن دستگاه نیست. شما می توانید به سادگی هارد دیسک را بردارید و آن را در کامپیوتر دیگری بخوانید.
چگونه از حمله به حافظه جلوگیری کنیم؟از آنجایی که راه های زیادی برای دستکاری حافظه وجود دارد، همزمان باید در سطوح مختلف از خود دفاع کنید. برخی از اقدامات حفاظتی کاربر پسند نخواهند بود، بنابراین قبل از اعمال آن ها، سناریوهای استفاده از هر کامپیوتر در شرکت خود را در نظر بگیرید و خطرات آن را بسنجید.
اقدامات مستقیم:بیایید با برخی اقدامات نسبتا ساده شروع کنیم، که بدون استثنا در همه موارد توصیه می شود.
- پیاده سازی اصل کمترین امتیاز. همه کاربران باید بدون حقوق ادمین کار کنند. حتی خود ادمین ها باید امتیازات administrator را فقط در طول مدت تعمیر و نگهداری، زمانی که واقعا مورد نیاز است، دریافت کنند.
- استقرار سیستم های حفاظتی در تمام کامپیوترهای فیزیکی و مجازی. شرکت ها باید مجهز به سیستم های EDR باشند. اطمینان حاصل کنید که سیاست های امنیتی مانع از اجرای ابزارهای مجاز اما بالقوه خطرناک توسط کارمندان شود. برخی از این ابزارها می توانند برای افزایش امتیاز و تخلیه حافظه استفاده شوند. (Sysinternals ،PowerShell، درایورهای اضافی یا منسوخ شده و ...)
- سیستم عامل و تمام برنامه های کلیدی را به روز نگه دارید.
- اطمینان حاصل کنید که کامپیوترها در حالت UEFI بوت می شوند، نه BIOS. به طور منظم فریمور UEFI را در تمام کامپیوترها به روز کنید.
- تنظیمات امن UEFI را پیکربندی کنید. برای جلوگیری از حملات DMA، واحد مدیریت حافظه ورودی/خروجی (IOMMU) را غیرفعال کنید. از UEFI با رمز عبور محافظت کنید و ترتیب صحیح بوت شدن سیستم عامل را تعیین کنید تا خطرات راه اندازی سیستم از رسانه های مخرب خارجی و تغییر تنظیمات به موارد ناامن را کاهش دهید. ویژگی های Secure Boot و Trusted Boot نیز از اجرای کدهای غیر قابل اعتماد سیستم عامل جلوگیری می کنند.
اقدامات مبهم:
تمام اقدامات ذکر شده در این بخش امنیت سیستم را تا حد زیادی بهبود می بخشد، اما گاهی اوقات بر عملکرد کامپیوتر، کاربر پسند بودن و یا قابلیت بازیابی فاجعه تاثیر منفی می گذارد. هر یک از آن ها نیاز به بررسی دقیق نقش های خاص در داخل شرکت دارند و پیاده سازی آن مستلزم دقت و استقرار مرحله ای با آزمایش عمیق است.
- ذخیره سازی کلید سخت افزاری مبتنی بر TPM 2.0 احراز هویت امن سیستم عامل را ارائه می دهد، برای ورود به حساب کاربری از بیومتریک استفاده می کند و استخراج کلید را دشوارتر می کند. TPM2 همچنین حفاظت از رمزگذاری کامل دیسک را تا حد زیادی افزایش می دهد، زیرا کلیدهای آن نیز در ماژول ذخیره می شوند. مشکلات احتمالی: عدم وجود TPM در بعضی از کامپیوترها؛ ترکیب های ناسازگار سیستم عامل/سخت افزار؛ مشکلات با مدیریت متمرکز کلید (به دلیل سیستم های مختلف و نسخه های TPM).
- رمزگذاری کامل دیسک. این اقدام خطر نشت داده ها را خصوصا از لپ تاپ های گم شده یا دزدیده شده به شدت کاهش می دهد؛ بنابراین حتی برای کسانی که ترس زیادی از حملات حافظه ندارند توصیه می شود. پیاده سازی بومی مایکروسافت، BitLocker است اما راهکارهای شخص ثالث نیز وجود دارد. رمزگذاری کامل دیسک (FDE) نیز بخشی از سیستم های مبتنی بر لینوکس شده است (به عنوان مثال، در اوبونتو نسخه 20 و بالاتر) و معمولا بر اساس LUKS است. ترکیبی از TPM و FDE حداکثر قابلیت اطمینان را ارائه می دهد. مشکلات احتمالی: در صورت وقوع خرابی هیچ چیزی از درایو قابل بازیابی نیست. بنابراین، یک سیستم پشتیبان با عملکرد خوب بسیار ضروری است. گاهی اوقات به خصوص هنگام بوت شدن کامپیوتر کندی قابل توجهی در عملکرد درایو به وجود می آید.
- غیرفعال کردن حالت sleep / standby. اگر حالت sleep را غیرفعال کنید و فقط حالت hibernation را فعال کنید، شرایطی که مهاجمان به کامپیوتر بوت شده و نیمه رمزگشایی شده آسیب پذیر در برابر حملات DMA و سایر روش ها دسترسی پیدا کنند، بسیار نادر خواهد شد. نکته منفی این راه حل نیز واضح است، زیرا حالت sleep سریع ترین و راحت ترین راه برای "خاموش کردن" کامپیوتر پس از کار یا هنگام تغییر مکان در دفتر است. اگر تصمیم دارید این مسیر را طی کنید، همیشه FDE را اجرا کنید. در غیر این صورت، کارمندان به احتمال زیاد از hibernation استفاده می کنند و فایل hibernation در برابر حملات بی دفاع می ماند.
- غیرفعال کردن حالت hibernation. اگر hibernation غیرفعال باشد، ایمیج حافظه را نمی توان از یک فایل در یک کامپیوتر خاموش کپی کرد. برای کامپیوترهای مهم، می توانید هم hibernation و هم sleep را غیرفعال کنید؛ چنین سیستم هایی را فقط می توان خاموش کرد. در ترکیب با FDE ،TPM و سایر اقدامات، شانس کمی برای حملات حافظه باقی خواهد ماند؛ اما این باعث دردسر کاربران خواهد شد، بنابراین ارزش آن را دارد که به طور جدی درباره مواردی که چنین رویکردی را توجیه می کنند فکر کنید.
صراحتا بگوییم
اگر به این نتیجه رسیدید که غیرفعال کردن sleep یا hibernation به خاطر امنیت توجیه پذیر است، به دقت در نظر داشته باشید که این سیاست باید برای چه کاربرانی پیاده سازی شود. بعید است 100 درصد کارمندان باشند؛ بلکه باید برای گروهی اجرا شود که با اطلاعات حیاتی کار می کنند. باید به آن ها توضیح دهید که رمزهای عبور و سایر داده ها می توانند به روش های متعددی به سرقت بروند، بنابراین اقداماتی مانند "استفاده از آنتی ویروس" و "اجتناب از سایت های فلان" برای جلوگیری از حوادث امنیتی جدی کافی نیستند.
ایده خوبی است که چند کلمه در مورد هر اقدام امنیتی بگویید - هدف آن را برای کارمندان توضیح دهید. رمزگذاری کامل دیسک، حفاظتی را در برابر کپی کردن ساده داده ها از یک کامپیوتر فراموش شده یا سرقت شده و همچنین در برابر حملات خدمتکار شیطانی "Evil Maid" (یعنی هک کردن یک دستگاه از طریق دسترسی فیزیکی) ارائه می دهد. غیرفعال کردن sleep و hibernation این حفاظت ها را تقویت می کند، بنابراین پنج دقیقه اضافی مورد نیاز برای روشن و خاموش کردن کامپیوتر به کارمند کمک می کند تا مطمئن شود در صورت استفاده از رمز عبور خود در یک حمله سایبری، قربانی نخواهد شد.
1- Cleartext داده ای است که به صورت رمزگذاری نشده و قابل خواندن ذخیره یا ارسال می شود.
2- ماژول پلتفرم قابل اعتماد (Trusted Platform Module) یک تراشه است که روی مادربرد یا پردازنده قرار دارد. TPM می تواند کلیدهای رمزگذاری مورد استفاده برای احراز هویت پلتفرم (کامپیوتر یا لپ تاپ) را به طور ایمن ذخیره کند.