سیستمهای خودکار بررسی تهدیدات (Sandboxes)، از روشهای متعددی برای کشف و تشخیص بدافزارها استفاده میکنند. امروزه، بدافزارها از تکنیکهای هوشمندانهای برای دور زدن این سیستمها استفاده میکنند، در این مقاله، به بیان 2 الی 3 مورد از این تکنیکها پرداخته شده است.
طبق گزارشات امنیتی از شرکتهای امنیتی تحلیل بدافزار، تنها از ابتدای 2011 تا ابتدای 2012 چهارصد میلیون نوع بدافزار (Malware) در دنیا تولید شده است، این آمار به صورت میانگین چیزی در حدود 33 میلیون نوع در هر ماه و یا قریب به 1 میلیون در هر روز میباشد.
تحلیل و بررسی دستی و ارائه یک امضاء برای شناسایی این بدافزارها تقریبا امری غیرممکن است، بنابراین برای رویارویی با این ازدحام لازم است از سیستمهای تحلیل و بررسی اتوماتیک که توانایی تشخیص آنها بر پایهی شناسایی رفتار و اولویتبندی فایلهایی است که باید تعریف بدافزار برای آنها تعیین شود، استفاده نمود. با کمی بررسی در اینترنت حتما سرویسهایی شبیه به CW Sandbox و Threat Expert را پیدا خواهید کرد که هم به شکل آنلاین و هم با ارائهی نرمافزارهای کاربردی یک Sandbox به شما ارائه میدهند. این جعبهی شنی (Sandbox) که اصطلاحی متعارف در بحث تحلیل بدافزار است، چهارچوبی را محیا میسازد تا بتوانید قبل از اجرای بدافزار در سیستم خود، آنرا اجرا و رفتارش را مشاهده کنید. در کل، هر دوی این سیستمها کاری جز اجرای فایلهای گرفته شده و بررسی لاگهایی که تولید شدهی آنهاست، را انجام نمیدهند.
اکنون اگر یک نرمافزار مخرب، توانایی پنهان شدن از هوش مصنوعی این سیستمها را داشته باشد چه اتفاقی رخ میدهد؟ مشخص است، میتواند با ترکیب شدن با چندین فایل دیگر خود را تکثیر کند و حتی از دید آنتیویروسها نیز کاملا مورد اطمینان جلوه کند. بنابراین هر دو دسته توسعه دهندگان بدافزار، چه کسانی که یک بدافزار را توسعه میدهند و چه کسانی که این بدافزارها را پک می کنند از این سناریو برای پنهان ماندن محصول خود استفاده خواهند کرد.
اگر چند قدم پیشتر برویم، مدتی طولانی است که این بدافزارها با متدولوژیهای پیجیدهای که دارند، قادر به تشخیص فضای مجازی که سیستمهای تحلیل اتوماتیک فراهم میسازند (Sandboxes) میباشند. لیست زیر، مجموعه اقداماتی را که بدافزار در هنگام ورود به یک سیستم تحلیل برای جلوگیری از شناخته شدن انجام میدهد را نشان میدهد:
بررسی مسیر اصلی ریجستری و خاموشکردن خود، چنانچه تشخیص دهد محیط مجازی است.
بررسی درایورهای گرافیک، موس و ... و خاموش کردن خود، چنانچه تشخیص دهد محیط مجازی است.
پیمایش سرویسهای سیستمی و خاموشکردن خود، چنانچه تشخیص دهد محیط مجازی است.
اجرای دسته کدهای اسمبلی و خاموش کردن خود، چنانچه تشخیص دهد محیط مجازی است.
بررسی پورتهای ارتباطی سیستم و خاموش کردن خود، چنانچه تشخیص دهد محیط مجازی است.
بررسی پروسههای سیستم و خاموش کردن خود، چنانچه تشخیص دهد این پروسه در حال پایششدن است.
کاملا واضح است که اگر خود را بعد از تشخیص مجازی بودن یک سیستم خاموش کند، بدون مشکل و ریسک امنیتی شناخته خواهد شد. لازم به توضیح است، آخرین مورد از لیست بالا می تواند در قابلیتهای تشخیص توسط آنتیویروس یا تحلیل فردی نیز اثزگذار باشد. بکذارید دید خود را در این تکنیکها عمیقتر کنیم و ببینیم نویسندگان چگونه این سیستمهای امنیتی را دور میزنند. به قطعه کد زیر که نتیجهی Disassemble شدن یک تابع از یک بدافزار است توجه کنید:
اگر کدها را کمی با دقت بخوانید متوجه خواهید شد بدافزار از درایور موس برای پنهان سازی خود بهره برده است، اما چگونه؟
یک هوک (Hook)، گسترهای است از مکانیزمهایی که برای تغییر رفتار سیستمعامل و یا اجزای یک نرمافزار به اشکال گوناگون انجام میشود، مثلا با متوقفکردن یا شنود فراخوانیهای یک تابع یا رویدادهای آن بین اجزا (Component) یک نرمافزار یا سیستمعامل، روشی پیچیده که بسیار در Malware Programming کاربرد دارد. اما در اینجا تابع Set Windows Hook ExA که در شکل زیر هم دیده میشود، یک زیر روال _main_routine برای پایشکردن پیامهای در حال انتقال از درایور موس به سمت هسته (Kernel) سیستمعامل میباشد، به این معنی که بدافزار هر وقت پیام یا سیگنالی مبنی بر جرکت موس دریافت کرد، فعال شود. اگر از ویندوز استفاده کنید این روال به خوبی عمل خواهد کرد، اما در یک سیستم تحلیل اتوماتیک تهدیدات هیچ وقت موسی وجود ندارد، بنابراین بدافزار هیچ وقت اجرا نخواهد شد.
به نمونهی تکنیک بعدی توجه کنید:
بدافزار از Sleep برای فرار از سیستم استفاده میکند. در واقع وقتی این کد اجرا میشود، 300000 میلی ثانیه یا 5 دقیقه قبل از اجرای زیرروال Decrypt Code صبر میکند، سپس 20 دقیقه برای اجرای Modify Registry صبر میکند و بعد از اجرای زیرروال Network_main مجددا 20 دقیقه دیگر صبر میکند. سیستمهای تحلیل اتوماتیک برای سرعت بیشتر زمانی خیلی کمی را برای بررسی هر فایل در نظر میگیرند و در نتیجه پاسخی مبنی برای آلوده بودن فایل برنمیگردانند.
در گذشته نویسندگان بدافزارها، باید تکنیکها و تاکتیکهای بسیار دشواری برای شناخت یک محیط مجازی پیادهسازی میکردند. مثلا همین مواردی که توضیح داده شد، که نیازمند مهارتهای ویژه در تشخیص نوع سکو (Platform) محیط مجازی و اطلاع کافی از CPU و مباحث مدیریت حافظه داشتند.
اما اکنون، تکنینهایی که مختصرا شرح داده شد دیگر عملیاتی نیستند، چرا که نوع محیطهای مجازی نیز هوشمندتر شدهاند، علاوه بر این نوشتن بدافزاری که اکتفای آن یک سکوی معین مثلا خانوادهی ویندوز سری XP SP 2-3 باشد دیگر محبوبیتی ندارد و بایستی طیف گستردهتری از سیستمعاملها و ماشینهای مجازی را در خود ببیند. از اینرو، این توسعهدهندگان همواره و هر لحظه در حال تست و پیادهسازی ایدههای نو برای عبور از سدها و مکانیزمهای امنیتی پیشرو هستند. گفتنی است، این ایدهها در 2 بعد تقسیمبندی میشوند:
بعد اول: مواردی که در راه توسعهی بدافزار و حتی استفاده از امضاهای دیجیتالی مورد اعتماد برای حلق یک نرمافزار مخرب در ظاهر سالم
بعد دوم: مواردی که بعد از تکمیل شدن فاز برنامهنویسی اعمال میشوند مانند روشهای پککردن پیشرفته که متخصصین خاص خود را دراست.
در این رقابتهایی که هر روز پیشرفتهتر میشوند و اگر یک لحظه غافل بشویم اتفاقاتی رخ میدهد که شاید جبرانناپذیر باشد، شاید قدری ناامید بشوید، اما میتوان با بهروز نگهداشتن نرمافزارهای مورد استفاده و سیستمعامل تا حد زیادی جلوی این رخدادها را گرفت، اما اگر در فضای گستردهتر مثل یک سازمان هستیم و خود ریسکی برای مقولهی امنیت میباشیم، این مهم را فراموش نکنیم که قبل از اجرای هر سناریوی واقعی از بدافزارها و یا سایر حملات، خودمان با یک سناریو ساختگی از خود دفاع کنیم.
نویسنده: علیرضا محمدزاده