بخشی از مقاله
چکیده
در این مقاله روشی جدید برای تشخیص بدافزارها شده است که پایه آن براساس الگوریتم ژنتیک می باشد. در این روش ما از دو دسته ویژگی جهت جداسازی دو کلاس بدافزار و فایل های سالم استفاده کردیم. ویژگی اول بر اساس فراخوان سیستم و ویژگی دوم بر اساس دنباله از کدهای اجرایی استخراج می شود و این دنباله کدهای اجرایی را به عنوان جمعیت برای الگوریتم ژنتیک تولید کردیم. ویژگی منحصر به فردی که این دنباله کدهای اجرایی دارند این است که طول آنها ثابت نیست، برخلاف کارهای انجام شده در گذشته که طول کدهای اجرایی را ثابت در نظر می گرفتند.
از همه مهمتر این که برای افزایش عمومیت مساله، کلمه بی تفاوت را هم به دنباله کدهای اجرایی اضافه کرده ایم و برای انتخاب مجموعه ویژگی های مناسب از یک روش جدید انتخاب ویژگی استفاده کرده ایم. چون ویژگی های به دست آمده دارای بعد بالایی بودند با استفاده از روش تجریه ماتریس مثبت بعد ویژگی را کاهش دادیم که علاوه بر کاهش پیچیدگی زمانی و محاسباتی، دقت را هم افزایش دادیم . مزیت این روش نسبت به روش های قبلی این است که ما دامنه بزرگتری از ویژگی ها را می توانیم جستجو کنیم و مزیت دیگر آن، انعطاف پذیری بیشتری آن نسبت به روش های دیگر است.
-1 مقدمه
امروزه بدافزارها1 خسارت های جبران ناپذیری به سیستم های کامپیوتری وارد می کنند و تولید آنها با سرعت زیادی در حال گسترش است. لذا به منظور جلوگیری از خسارت های ناشی از آنها، شناسایی و تشخیص بدافزارها بسیار مهم است.
انواع مختلفی از بدافزارها وجود دارند از جمله: ویروس ها، کرم ها، بمب های منطقی،نرم افزارهای جاسوسی، اسب های تراوا و غیره. باید در نظر داشت که امروزه بدافزارهایی با ویژگی های ترکیبی از چندین بدافزار دیگر تولید می شوند و آسیب هایی که به سیستم وارد می کنند بسیار بیشتر از بدافزارهای ساده است. بنابراین لازم است که روش هایی برای مقابله با این گونه فایل ها تولید شود. به طور کلی، دو نوع روش برای مقابله با بدافزارها وجود دارند: روش های مبتنی بر امضا2 و روش های مبتنی بر رفتار.
روش مبتنی بر امضا از اثر یا همان امضای بدافزار برای شناسایی بدافزار استفاده می کند به علت اینکه هر امضا برای یک بدافزار یک ویژگی منحصر به فرد به حساب می آید. از لحاظ تکنیکی، امضای بدافزار یک دنباله از بایت های تشکیل دهنده بدافزار است که این دنباله بایستی فقط در همین بدافزار یافت شود، تا انحصار خود را حفظ نماید. از سویی دیگر، نویسندگان بدافزار نیز به دنبال روشی بودند تا این راهکار را دور بزنند. با توجه به این نیت بود، که بدافزارهای چند ریختی به وجود آمد، این نوع از بدافزارها، کد ثابتی نداشتند و به ازای هر آلودگی کد خود را با یک الگوریتم به صورت رمز شده در می آوردند و در هنگام اجرا کد مورد نظر را رمز گشایی می کردند. نسل بعدی بدافزارها آنهایی بودند که دیگر نیازی به این الگوریتم رمز کننده و رمز گشا نداشتند، که ما به این نوع بدافزار دگرگون شده گفته می شود.
روش های مبتنی بر رفتار، به جای استفاده از خصوصیات ایستا، با بررسی رفتارهای نرم افزار سعی در شناسایی بدافزارها دارند. در این روش ها، بدافزارهایی که در آنها از تکنیک های مبهم سازی استفاده شده است را نیز به خوبی شناسایی می کنند. به طور کلی این گونه روش ها از راهکارهای مدلسازی و داده کاوی جهت تشخیص بدافزارها استفاده می کنند. پس از جمع آوری تعداد زیادی از بدافزارها و مشاهده رفتارهای آنها، مدلی از رفتارهای بداندیش 4ساخته می شود و از این مدل جهت تشخیص بدافزارها استفاده می گردد. سه مشکل در زمینه روش های مبتنی بر رفتار وجود دارد: عدم بررسی برنامه در زمان اجرای آن، عدم استفاده از برنامه های سالم5 جهت ساخت مدل و بالا بودن پیچیدگی زمانی مدل ها.
تقریباً تمامی روش های تحلیل پویای موجود، جهت بررسی سالم یا بداندیش بودن یک نرم افزار، آن را در یک محیط مجازی یا یک محیط جدا شده اجرا می کنند تا عملکرد نرم افزار، آسیبی به سیستم اصلی وارد نکند. به طور کلی پس از اینکه اجرای نرم افزار به پایان رسید، با بررسی عملکرد فایل، تعیین می شود که آیا بد افزار بوده است یا خیر. در واقع، فرآیند بررسی فایل همزمان با اجرای آن صورت نمی گیرد بلکه پس از اینکه اجرای فایل مورد نظر به پایان رسید بد افزار بودن آن تعیین می شود. این مسأله باعث می شود که نتوان فرآیند بررسی نرم افزار را در محیط واقعی انجام داد بدین معنی که جهت جلوگیری از آسیب به سیستم عامل، فرآیند بررسی نرم افزار در یک محیط جدا شده یا مجازی انجام شده و در صورت سالم بودن فایل ، اجازه اجرا روی سیستم واقعی به آن داده می شود.
-2 مروری بر کارهای گذشته
واژه ویروس کامپیوتری اولین بار در سال 1972 توسط شخصی به نام David Gerrold در یک داستان علمی تخیلی به کار گرفته شد .[2] موضوع این داستان در مورد یک برنامه کامپیوتری است که می تواند خودش را کپی کند. در سال 1983 شخصی به نام Fred Cohen برای اولین بار در محیط آکادمی از واژه ویروس نام برد و یک سال بعد در مقاله ای آن را منتشر کرد.
روش های شناسایی بد افزار ها را می توان به چهار دسته طبقه بندی کرد: پویش6، بازبینی فعالیت ها7، بررسی یکپارچگی8، داده کاوی9، که مرحله استخراج ویژگی های این روش ها معمولا از فایل باینری است. روش تحلیل بدافزارها نیز به دو دسته تقسیم می شود: ایستا و پویا.
در ادامه فصل به مروری بر کارهای دیگر، به تفکیک روش ها و دیدگاه های مختلف در زمینه تشخیص بدافزارها می پردازیم. روش هایی که اغلب محققان به کار می برند به چند دسته کلی تقسیم می شوند. دسته اول روش تطابق الگو یا پویش است، در این روش به طور کلی در فایل مورد نظر، به دنبال یک الگوی خاص می گردیم. این الگو می تواند امضای یک بدافزار خاص باشد یا این که یک الگوی پیچیده باشد.
روش پویش در تمامی آنتی ویروس های تجاری به کارمی رود. این روش یک روش موثر، کارا و با سرعتی بالاتر از سایر روش ها است. به دلیل این که الگویی که به این روش، جهت پویش داده می شود عموما امضای بدافزارها است و از طرفی امضای بدافزار با حساسیت خاصی استخراج می شود تا منحصر به فرد باشد، لذا این روش خطای بسیار کمی دارد. این خطا در حد صفر است. اما این روش مشکلاتی نیز دارد که سبب به وجود آمدن روش های دیگر شد. از زمانی که بدافزارهای چند ریختی و دگرگون شده به وجود آمد، رشد روش های دیگر سرعت بیشتری گرفت. اولین مشکل عمده ای که این روش دارد این است که فقط بدافزارهایی را شناسایی می کند که قبلاً کشف شده باشند، امضای آنها در آزمایشگاه های تخصصی توسط متخصصین این امر، استخراج شده باشد و نرم افزار آنتی ویروس این امضاء را نیز داشته باشد. به عبارتی در صورتی که بدافزار جدید به وجود بیاید، این روش از شناسایی آن عاجز است، چون امضای آن را ندارد.
یک مشکل دیگر این است که نیروی انسانی و زمان و هزینه زیادی صرف استخراج امضاء می شود. مشکل سومی که این روش دارد، این است که این روش اغلب در مقابل بدافزارهای دگرگون شده، ناتوان است. به دلیل این که بدافزارهای دگرگون شده توانایی تغییر کد خود را به ازای هر سرایت دارند، لذا استخراج یک الگو که بتواند تمامی این تغییرات را طوری پوشش دهد که خطای تشخیص نداشته باشیم، بسیار دشوار و اغلب غیرممکن است.
به خاطر وجود این مشکلات، روش های مکاشفه ای به وجود آمد. این روش ها بایستی بتوانند، زمانی که یک بدافزار به وجود می آید، آن را در بدو انتشار، شناسایی نمایند برای این کار روش هایی که پیشنهاد شده اغلب از داده کاوی، بهره می برند. این روش ها معمولا بدین صورت کار می کنند که ابتدا یک مجموعه ویژگی از فایل های بدافزار با آنالیزهای مختلف، استخراج نموده، سپس با استفاده از روش های یادگیری ماشین سعی می کنند رفتار یا نیت بدافزارها را یاد بگیرند. پس از آن با استفاده از دسته بندی کننده ها اقدام به تفکیک بدافزار جدید از برنامه های سالم می کنند .
پویشگرها: پویشگر جزء جدا نشدنی هر آنتی ویروس تجاری است. همانطور که Szor نشان داده است، پویشگرها می توانند از تطبیق دهنده های ساده تا تطبیق دهنده های اکتشافی وجود داشته باشند
حالت ایستای تشخیص سوء استفاده: اغلب اوقات پویش از تحلیل ایستا استفاده می کند. بعضی از این روش ها عبارتند از: پویش رشته 10، که تطابق دقیق الگوی داده شده با محتویات فایل ورودی است، پویش نادقیق11، که می تواند تطابق رشته هایی که بخشی از آنها متغیرند را انجام دهد. شناسایی تقریبی12، به همراه امضای اصلی بدافزار، یک امضای دومی هم دارد که انواع دیگر را نیز شناسایی می نماید، شناسایی دقیق13، علاوه بر امضای اصلی تعداد زیادی امضای دوم از بدافزارها دارد تا بتواند تمامی نسخه های بدافزار را شناسایی نماید. و در نهایت روش پویش مکاشفه ای14، رفتار بدافزار را از بین الگوهای رفتاری که از قبل تعریف شده، تطابق می دهد و بدافزار را شناسایی می نماید
حالت ترکیبی تشخیص سوء استفاده: Symantec از روشی ترکیبی برای Bloodhound خود استفاده کرد در این روش علاوه بر پویش ایستا، از شبیه ساز کد نیز استفاده کرد .[4] این پویشگر، برنامه مورد نظر را به چند بخش منطقی مجزا تقسیم می کند، و هر بخش را جداگانه تحلیل می نماید، تا رفتاری مشابه رفتار ویروس ها را بیابد.
بازبینی فعالیت ها: بازبینی فعالیت ها از هر دو روش تحلیل پویا و ایستا می تواند استفاده نماید. با وجود این که روش تحلیل ایستا برای بازبینی فعالیت ها کمی متناقض به نظر میرسد، اما می تواند بدون این که برنامه را اجرا کند، فعالیت ها را بررسی نماید.
فراخوانی سیستمی: رایج ترین روش بازبینی فعالیت های یک برنامه، بررسی فراخوانی های سیستمی است. Wagner و همکارش Dean ، در روشی که ارائه دادند، با استفاده از دنباله فراخوانی های سیستمی یک گراف روند کنترلی برای برنامه ساختند .[5] زمانی که برنامه اجرا می شود، دنباله فراخوانی های سیستمی با این گراف مقایسه می شود و هر گونه تخطی گزارش می شود. Bergeron و همکاران، از یک روش متفاوت با استفاده از تحلیل ایستا استفاده کردند. که در این روش برنامه به چند قسمت تقسیم می شد تا بتوان نقاطی که از نظر امنیتی مهم تر هستند، جدا کرد.
قبل از این، کد اسمبلی از برنامه ها استخراج و آن کد تبدیل به یک کد میانی می شد، وقتی که تکه های برنامه به دست آمدند، رفتار آن با الگوی رفتاری بدافزارها تطبیق داده می شد تا بتوان آن را شناسایی کرد. Bergeron و همکاران، در کاری دیگر، به جای تکه تکه کردن برنامه، گراف فراخوانی های سیستمی را از آن استخراج کردند.
برای این کار ابتدا برنامه تبدیل به کد اسمبلی می شد، سپس از آن کد، گراف روند کنترلی برنامه استخراج شده و در نهایت از گراف به دست آمده، گراف فراخوانی سیستمی استخراج می شد. Sung و همکاران امضایی بر اساس فراخوانی های سیستمی ارائه دادند، که به تحلیل ایستای کدهای مخرب معروف است .[8] این سیستم برای تطابق امضا از فاصله اقلیدسی استفاده می کرد . Debbabi و همکاران، یک سیستم پویا برای بازبینی بر اساس سیاست های امنیتی از پیش تعریف شده، ارائه دادند که این سیستم به نام Damon معروف است
ویژگی های ترکیبی: Christodorescu و همکاران، یک امضای بدافزار که از سه جزء تشکیل شده بود، ارائه دادند .[10] این سه جزء عبارتند از دستورالعمل ها، متغیرها و ثابت های نمادین. یک مدل میانی بر اساس این سه جزء از هر برنامه ساخته می شد. در مرحله بعد، این مدل میانی تبدیل به گراف روند کنترلی برنامه می شد. سپس این گراف با الگوی از پیش تعریف شده ای از گراف روند کنترلی مقایسه می شد.
حالت ایستای تشخیص ناهنجاری: بررسی کننده های یکپارچگی، جزء سیستم های تشخیص مبتنی بر تحلیل ایستا به حساب می آیند، به طوری که جمع کنترلی برنامه مورد نظر با جمع کنترلی که قبلا از همین برنامه محاسبه شده، مقایسه می شود و عدم تطابق می تواند علامت وجود ناهنجاری باشد. Cohen نشان داد که بهترین روش کلی برای محافظت از فایل ها همین روش است
داده کاوی: در سالهای اخیر، بسیاری از محققین ویروس شناسی، برای شناسایی ویروس های ناشناخته روی روش های داده کاوی تمرکز کرده اند. تعدادی دسته بندی کننده وجود دارند که دقت خیلی خوبی هم دارند. اغلب روش های داده کاوی که برای شناسایی بدافزارها به کار می روند ابتدا یک مجموعه ویژگی تولید می کنند. این ویژگی ها می توانند شامل این موارد باشند: N-grams، دنباله دستورالعمل ها، دنباله فراخوانی های سیستمی، یا ترکیبی از این ها و یا هر ویژگی دیگر. تعداد ویژگی هایی که تولید می شود معمولاً بسیار زیاد است. روش هایی وجود دارند که برای کاهش ویژگی استفاده می شود
حال به معرفی چند روشی که از استفاده کردند می پردازیم. می توان گفت بنیانگذار این مبحث Tesauro و همکارانش، هستند که اولین بار از N-grams برای ایجاد چندین دسته بندی کننده مختلف از نوع شبکه های عصبی استفاده کردند، سپس از یک استراتژی رأی گیری برای دست یافتن به نتیجه نهایی استفاده کردند
Li یک روش برای دسته بندی انواع فایل های مختلف، بر اساس ردپای فایل ارائه داد [14] که از توزیع N-grams به عنوان ردپای فایل استفاده می کرد. Yoo یک روش تشخیص سوء استفاده با استفاده از تحلیل ایستا که از الگوریتم SOM بهره می برد، ارائه داد. او ادعا کرد که هر ویروس، DNA خاص خودش را دارد که می تواند SOM projection برنامه ای که آلوده می کند را تغییر دهد. از فایل های آلوده، N-gramها استخراج، و برای آموزش به SOM داده می شد.