بخشی از مقاله
چکیده
بدافزارها برنامههایی رایانهای هستند. به علت آنکه معمولاً کاربر را آزار میدهند یا خسارتی به وجود میآورند، به این نام مشهورند. انواع بدافزارها از انواع روشها برای اجرای خود استفاده میکنند. برخی از بدافزارها از اجرای نرم افزارها یا عملیاتهای خاصی بر روی سیستم جلوگیری میکنند، و یا عملیات تخریبی بر روی سیستمها انجام میدهند. از این جمله میتوان به بد افزارهایی که باعث آلوده شدن فایل-ها بهخصوص فایلهای اجرایی میشوند، اشاره کرد. هدف این مقاله ارائهی روشی برای تشخیص و پاکسازی کدهای مخرب تزریق شده به داخل فایلهای اجرایی بر اساس الگوی بیتی ویروس میباشد.
در روش پیشنهادی، هنگام جستجو فقط قسمت سرایند فایلها به حافظه انتقال داده میشود که باعث بالا رفتن سرعت و مصرف کمتر حافظه شده است. برای آزمایش الگوریتم ویروس جیفو و انواع آن استفاده شده است. مطابق این روش، نرخ بهدست آمده در تشخیص ویروس %98 و در پاکسازی ویروس %93 بوده است.
-1 مقدمه
ویروسها یک برنامه یا یک کد بسیار کوچکی هستند که بر روی برنامههای بزرگتر سوار میشوند. یعنی در بین کدهای اصلی یا فایلهای اصلی یک برنامه دیگر که معمولا پر کاربرد میباشد قرار میگیرند و به محض نصب برنامه اصلی، خود را وارد سیستم رایانهBای شخص قربانی میکنند و هنگام اجرای برنامه به طور خودکار اجرا میشوند و شروع به تخریب - کارهایی که نویسنده خواسته - میکنند
در حالت کلی دو روش اصلی برای تشخیص و پاکسازی ویروس وجود دارد: الف - روش مبتنی بر امضا: در این روش با استفاده از یک دیکشنری ویروس که حاوی امضای ویروسهای شناخته شده است، احتمال وجود ویروسهای شناخته شده در فایلها مورد بررسی و آزمایش قرار میگیرند. ب - روش مبتنی بر رفتار: در این روش هدف شناسایی رفتارهای مشکوک هر برنامه کامپیوتری است، زیرا احتمال دارد رفتار مذکور نشان دهنده یک آلودگی ویروسی باشد. نرمافزارهای که از فایل امضای ویروس برای تشخیص ویروسها استفاده میکنند توانایی شناسایی ویروسهایی را دارند که تا کنون برای آنها امضا تولید شدهاند. در این شیوه زمانی که نرم افزار یک فایل را مورد آزمایش قرار میدهد، به یک دیکشنری ویروس که حاوی امضای ویروسهای شناخته شده است مراجعه میکند.
در صورتی که هر تکه از کد فایل با یک ویروس شناخته شده مطابقت داشته باشد، فایل مذکور به عنوان یک فایل آلوده شناسایی شده و یا آن را پاک میکند و یا آن را قرنطینه مینماید تا برنامههای دیگر به آن دسترسی نداشته و همچنین از انتشار آن جلوگیری به عمل آید. روش مبتنی بر رفتار بر خلاف روش مبتنی بر امضا تنها در تلاش برای شناسایی ویروسهای شناخته شده نیست و به جای آن، رفتار همه برنامهها را نظارت میکند.
این تکنیک سعی در تشخیص انواع شناخته شده و همچنین انواع جدید بدافزار دارد و این کار را از طریق جستجوی ویژگی-های عمومی و مشترک بدافزارها انجام میدهد. مشکل این روش تعداد زیاد تشخیصهای مثبت اشتباه و هشدارهای به کاربر است که موجب خستگی و سر رفتن حوصله کاربران می شود. ویروسها روشهای بسیار متنوعی را برای آلوده سازی فایل به کار میبرند و با استفاده از این روشها خود را در مکانهای مختلفی از فایل تزریق میکنند
برای کشف امضای ویروس از دو روش استخراج هَش فایل و روش تجزیه کد اجرایی استفاده میشود.
در میانه های دهه نود روشهای مبتنی بر امضا بوجود آمد3]،[2 از آن به بعد، پژوهش هایی برای بهبود بخشیدن به روش های مبنی بر امضاء ارائه شد7]،6،5،[4 که یکی از بهترین این روش ها پروژه SAVE - Static Analyzer of Vicious Executables - است که بر تمرکز آن بر روی n-gram اندازه گیری شباهت بین کدهای مخرب شناخته شده و کدهای مشکوک است.
الگوریتم MD5 - Message Digest 5 - یکی از معروفترین روشهای تولید چکیده یک طرفه - One-Way hash - است. این الگوریتم، با دریافت رشته دلخواه M - با طول رشته دلخواه - ، نگاشت H - M - را به گونهای محاسبه مینماید که به ازای تمام مقادیر M، خروجی دارای طول ثابتی باشد.
یکی از روشهای دیگر برای استخراج خودکار امضا روش n-gram است در این روش هر زیر رشته Substring از فایل که طول ثابت n داشته باشد را n-grams گوییم. که هر کدام از این n-gram ها میتوانند برای امضاء کاندید شوند. برای این کار ما از یک window با طول n که در پردازش زبان طبیعی هم به کار میرود، استفاده کردیم. بوسیله n-gram میتوانیم برخی از صفات Features مهم مثل Coding cycle و حتی خواص رفتاری را استخراج کنیم. در تحلیل n-gramها ، معمولا آنهایی که بیشترین تکرار را دارند انتخاب میشوند. وقتی که کد جدیدی بررسی می-
شود، میتواند با استفاده از تحلیل ، به کلاس کدهای پاک یا بدافزار تعلق یابد.
روش دیگر برای تولید امضاءکه سربار کمتر از %10 ایجاد میکند روش ارائه شده در [9] است. این روش شامل 4 مرحله شناخت حملهها، همبستگی ورودیها، شناخت محتوای ورودی و تولید امضا است. در سه مرحلهی اول فایل مخرب و دادههای داخل آن را شناسایی میشوند. در مرحله آخر الگوریتم امضا، توسط اطلاعات مخرب و اطلاعات ناآلوده، یک امضا تولید میکند.
هدف این مقاله ارائه روشی جهت ایجاد امضا برای کد بدخواه با تشخیص محل کد تزریق شده، با استفاده از تجزیه کد اجرایی است.
در هنگام آلوده شدن یک فایل exe به ویروس، باید ویروس شناسایی شده و بلوکهای آلوده تشخیص و پاک شوند، پرشهایی که به قسمتهای ویروس شدهاند باید شناسایی شده و به حالت اولیه برگردانده شوند. لذا باید اطلاعات راجع به ویروس بهدست آورده شود. ویروسهایی که خود را به داخل فایلها تزریق میکنند، انواع مختلفی دارند که از جمله آنها میتوان به موارد زیر اشاره کرد:
-1 ویروسهایی که به داخل فایل اجرایی وارد شده و مقداری از بایتها را کلا پاک یا رونوشت میکنند. این گونه ویروسها قابل شناسایی هستند ولی عمدتا قابل پاکسازی نیستند. بدین معنا که پس از پاک کردن کدهای آلوده از داخل فایل اجرایی، آن فایل قابل اجرا نبوده که به این فایل اصطلاحا خراب شده گفته میشود.
-2 ویروسهایی که به داخل فایل اجرایی وارد شده و هیچ کدام از بایت-های آن را پاک نمیکنند، بلکه میتوانند با یک الگوریتم خاص بایتها را رمز کنند یا جابهجا کنند. این ویروسها را میتوان از داخل فایل اجرایی تشخیص داد و پاک کرد. بدین طریق که میتوان الگوریتم آن ویروس را بهدست آورد و عکس آن الگوریتم عمل نمود. بدین ترتیب فایل اجرایی پاکسازی میشود. ولی در بسیاری از مواقع ویروسها دارای تعداد زیادی کد هستند - مثلا چند هزار هگز - که در این صورت بررسی تکتک خطوط کد و تشخیص الگوریتم عملکرد ویروس کار بسیار دشواری است. پس میتوان بهصورت تجربی و با بررسی تعدادی فایل آلوده و مقایسه آنها با فایل اصلی به یک سری نتایجی دست یافت. از جمله این نتایج میتوان به مشترک بودن بخشهای فایلهای آلوده یا مقادیر مشابه یا الگوریتم وار در فایلهای هدر فایلهای آلوده شده اشاره کرد.
شناسایی ویروسها به 3 حالت میتواند انجام پذیرد:
-1 شناسایی ویروسهای دارای الگوهای با مکان ثابت: در مدل ثابت، از تعدادی الگو استفاده خواهد شد. بدین صورت که مثلا از بایت x تا y باید اطلاعات z در داخل فایل موجود باشد تا دلیلی بر آلوده بودن آن فایل موجود باشد. این دلیل فوق لازم است ولی احتمالا کافی نیست، بدین دلیل که یک ویروس به احتمال زیاد دارای چندین الگو خواهد بود که برای شناسایی آن ویروس باید تمامی آن الگوها بررسی شوند. در مدل ثابت، آدرس شروع و پایان این الگوها مشخص است. پس آنتی ویروس میتواند به سرعت به سراغ آن آدرسها رفته و دادههای موجود در آنها را بررسی کند.
-2 شناسایی ویروسهای دارای الگوهای با مکان غیرثابت: در این مدل یک یا چند فرمول خاص وجود دارد که برای پیدا کردن الگوها باید به سراغ آن آدرسها رفته شود. برای مثال الگوی x در آدرس وسط فایل درج میشود. یعنی این که اگر فایل دارای 900 بایت باشد، در بایت 450 درج خواهد شد. پس در این حالت نیز همانند حالت فوق، برای دسترسی به الگوها به آدرس خاصی رجوع میشود.
-3 شناسایی ویروسهای دارای الگوهای با مکان تصادفی: میتوان گفت که حالت قبلی حالت خاصی از این حالت است. در مدل تصادفی نیز همانند مدل ثابت، از تعدادی الگوی مخصوص ویروس خاص، برای شناسایی آن ویروس استفاده میشود. ولی فرقی که با روش فوق دارد این است که در این مدل محل الگوها مشخص نیست. پس برای پیدا کردن الگوها باید سراسر قسمت کد فایل ها بررسی شود.
-2 تشخیص و پاکسازی ویروس جیفو
ویروس مشهور جیفو مدتها کاربران ایرانی را با مشکلات فراوانی مواجه نموده است و شاید یکی از دلایل مهم آن باز شدن ایمیلهای ناآشنا و همچنین سایتهای آلوده توسط کاربران بود. این ویروس که از طریق افزودن و ضمیمه نمودن کد خود، به فایلهای مختلف و رمزگذاری آنها در شبکه اینترنت، منتشر میشود، با مقیم شدن در حافظه سیستمها، سعی در تخریب فایلهای PE دارد. یکی از ویژگیهای این ویروس قابلیت پنهان ماندن در سیستم و انجام حملاتی است که به سختی قابل ردیابی هستند. ویروس جیفو یکی از خطرناکترین ویروسهای جدید است که به فایلهای اجرایی میچسبد و آنها را طوری خراب میکند که آنتی ویروسها معمولا نمیتوانند فایل را از ویروس تمیز کنند و فایل را پاک میکنند. این ویروس همچنین سبب بروز اشکالاتی در ویندوز و کاهش سرعت آن و آلوده کردن فایل svchost.exe میشود.
-2-1 جزئیات نحوهی کار ویروس جیفو
این ویروس اندازهی فایل اصلی را به اندازهی 8E00 H افزایش میدهد. این مقدار افزایش داده شده بهصورت زیر تخصیص داده میشود:
400 H به اول فایل بهعنوان سرایند فایل.
7800 H به بعد از سرایند بهعنوان کد ویروس، اضافه میشود.
400 H به بعد از کد ویروس بهعنوان دادهی ویروس اضافه میشود. A00 H نیز بعد از داده اضافه خواهد شد.
و به آخر فایل نیز 400 H اضافه خواهد شد.
اطلاعات فوق، اطلاعات ویروس هستند. یعنی اینکه ویروس جیفو برای خود هدر خاص خود را میسازد . این ویروس به اندازهی 8A00 H در اول فایل و به اندازهی 400 H درآخر فایل، فضا اشغال میکند. اطلاعات فایل اجرایی آلوده شونده را بین این بایتها رمز کرده و نگهداری میکند. به صورت شکل 1 است.
شکل :1 اطلاعات ویروس جیفو.
بعد از 8A00 H که در حقیقت مربوط به اطلاعات ویروس است، اطلاعات موجود در سکشن rsrc فایل اصلی به داخل فایل ویروسی تزریق خواهد شد که در شکل2 نشان داده شده است.
شکل:2 تزریق اطلاعات موجود در سکشن rsrc فایل اصلی به داخل فایل ویروسی.
ولی اطلاعات rsrc فایل اصلی به صورت رمز شده در داخل فایل آلوده قرار خواهد گرفت. در مرحلهی بعدی، با توجه به الگوریتم ویروس، از آدرس انتهای فایل آلوده به اندازهی rsrc فایل اصلی 8A00 H + 400 H + بایت،
کم خواهد شد و ویروس مذکور از آدرس بهدست آمده شروع به نوشتن کدهای فایل اصلی به صورت رمز شده به داخل فایل آلوده خواهد کرد. که سه حالت ممکن است رخ دهد:
:1 آدرس بهدست آمده برابر با آدرس 8A00 H + rsrc باشد. که در این-صورت از آدرس بهدست آمده شروع به نوشتن خواهد کرد. مطابق شکل .
شکل :3 آدرس بهدست آمده برابر با آدرس .8A00 H + rsrc
:2 آدرس بهدست آمده، کمتر از آدرس 8A00 H + rsrc باشد. یعنی اینکه بین صفر تا آدرس 8A00 H + rsrc باشد. که در این حالت باید از آدرس 8A00 H + rsrc شروع به نوشتن کند. چرا که آدرس بهدست آمده قبلا توسط اطلاعات خود ویروس یا rsrc فایل اصلی پر شده است.
شکل :4 آدرس بهدست آمده، کمتر از آدرس
:3 آدرس بهدست آمده، بزرگتر از آدرس 8A00 H + rsrc باشد. یعنی اینکه تعدادی بایت در بین آدرس 8A00 H + rsrc و آدرس بهدست آمده، هنوز باقی مانده است. در این صورت، دو حالت ممکن است رخ دهد: در این حالت باید از همان آدرس بهدست آمده شروع به نوشتن کند تا به انتهای فایل آلوده برسد. در این حالت بهدلیل اینکه مقداری از اطلاعات فایل اصلی هنوز به داخل فایل آلوده انتقال داده نشده است، الگوریتم ویروس، دوباره به آدرس 8A00 H + rsrc رفته و شروع به نوشتن باقیماندهی اطلاعات فایل اصلی به صورت رمز نشده میکند؛ یعنی این قسمت فایل آلوده رمز نخواهد شد